写点什么

chatgpt-o1 能完成初级的前端开发任务吗?

  • 2025-01-26
    北京
  • 本文字数:2775 字

    阅读完需:约 9 分钟

大小:630.96K时长:03:35
chatgpt-o1 能完成初级的前端开发任务吗?

当我刚开始成为一名初级软件工程师时(大约 14 年前),我记得自己做的一个前端项目需要用纯色部分填充一朵“云”的 SVG,做出一个漂亮的进度条。

 

作为一名刚入职的初级开发人员,彼时我急着证明自己的技能水平。我记得自己疯狂地在谷歌上搜索解决方案,但只找到了填充整个 SVG 对象的示例。在针对这个问题调整了一段时间后,我想出了一个巧妙的解决方案,关键是操纵一个渐变停止点。

这个技巧是使用有两个停止点的线性渐变,一个是透明色,另一个是纯色。通过操纵这些停止点的偏移量,渐变分界线会随着数据加载而不断移动,并逐渐用颜色填充那朵云。


由于当时网上没有这方面的资源,我记得自己觉得这是个非常巧妙的技巧,并想写一篇关于它的博客文章,结果我直到现在才开始做这件事情。

我的解决方案

这是我当时使用的技巧的现代版示例。

const CloudFillHuman: React.FC<CloudFillProps> = ({ percentage }) => {  /*    calculate the offset of the gradient stops based on the passed    percentage and render the cloud filled with the gradient   */  const clampedPercentage = Math.max(0, Math.min(percentage, 100));  const offset = 100 - clampedPercentage;  return (    <svg       xmlns="http://www.w3.org/2000/svg"       width="200"       height="200"       strokeWidth={0.5}       viewBox="0 0 24 24"       stroke="#fff"    >      /* Define the Gradient with two stops */      <defs>        <linearGradient id="cloud-gradient" x1="0%" y1="0%" x2="0%" y2="100%">          <stop offset={`${offset}%`} style={{stopColor: "#ffffff00", stopOpacity: 0}} />          <stop offset={`${offset}%`} style={{stopColor: "#5cc6fe", stopOpacity: 1}} />        </linearGradient>      </defs>      /* Define the Shape to be filled */      <path         fill="url(#cloud-gradient)"         strokeLinecap="round"         strokeLinejoin="round"         d="M 2.25 15a4.5 4.5 0 0 0 4.5 4.5           H 18a3.75 3.75 0 0 0 1.332-7.257            3 3 0 0 0-3.758-3.848 5.25 5.25            0 0 0-10.233 2.33 A 4.502 4.502            0 0 0 2.25 15Z"      />    </svg>  )};

复制代码

考虑到 LLM 模型已经训练过大量在线数据,加上我第一次解决这个问题后已经过去了这么久的时间,我很好奇 ChatGPT-o1 今天会如何解决这个问题。所以我决定测试一下。

提示

这是我用来测试 ChatGPT-o1 的提示。公平地说,我给了它非常明确的指示,我希望我当时的老板也能这样做就好了。

 

我有一个云形状的 SVG,我希望你编写一个 typescript 函数,以 0 到 100 之间的整数作为输入,并用纯色部分填充云。例如,如果输入值为 50,我希望一半的云填充蓝色,另一半是透明的。

 

SVG 形状如下……

 

I have an SVG in the shape of a cloud, I want you to write a typescript function that takes an integer number between 0 and 100 as input and partially fill the cloud with a solid color. For example, if the input value is 50, I expect half the cloud to be filled with the color blue and the other half to be transparent.

 

here is the SVG shape ...

 

O1 思考了 30 秒,然后提供了以下解决方案

const CloudFill: React.FC<CloudWithFillProps> = ({ percentage }) => {  // Ensure percentage is within 0 to 100  const clampedPercentage = Math.max(0, Math.min(percentage, 100));  const yPosition = (24 * (100 - clampedPercentage)) / 100; // Calculate Y position based on percentage  // Generate a unique ID for the clip path to avoid ID conflicts if multiple clouds are rendered  const clipPathId = React.useMemo(() => `clip-${Math.random().toString(36).substr(2, 9)}`, []);  return (    <svg      xmlns="http://www.w3.org/2000/svg"      viewBox="0 0 24 24"      strokeWidth={0.5}      stroke="currentColor"      width={200}      height={200}    >      <defs>        <clipPath id={clipPathId}>          {/* Rectangle that determines the filled area based on the percentage */}          <rect x="0" ={yPosition} width="24" height={24 - yPosition} />        </clipPath>      </defs>      {/* Filled cloud shape clipped to the percentage */}      <path        fill="#5cc6fe"        d="M2.25 15a4.5 4.5 0 0 0 4.5 4.5H18a3.75           3.75 0 0 0 1.332-7.257 3 3 0 0 0-3.758-3.848           5.25 5.25 0 0 0-10.233           2.33A4.502 4.502 0 0 0 2.25 15Z"        clipPath={`url(#${clipPathId})`}      />      {/* Cloud outline */}      <path        fill="none"        strokeLinecap="round"        strokeLinejoin="round"        d="M2.25 15a4.5 4.5 0 0 0 4.5 4.5H18a3.75           3.75 0 0 0 1.332-7.257 3 3 0 0 0-3.758-3.848           5.25 5.25 0 0 0-10.233           2.33A4.502 4.502 0 0 0 2.25 15Z"      />    </svg>  );};

复制代码

GPT o1 使用了一个 ClipPath(https://developer.mozilla.org/en-US/docs/Web/SVG/Element/clipPath),在云的轮廓后面渲染了一朵填充颜色云的一部分。

 

老实说,这个解决方案非常好,它对提示的理解程度令我印象深刻。

 

现在我们来对这两个解决方案做做对比测试。

对比解决方案

乍一看,这两个解决方案看起来非常像。LLM 给出的解决方案似乎符合预期。但我们来看看当我们操纵百分比的值时它们的表现如何。

 

可以看到,LLM 解决方案直到滑块超过 20% 才开始填充形状,并且当百分比为 80% 或以上时,它就已经填充了整个形状。

结论

那么这给我们留下了什么结论?LLM 是否准备好了代替人类完成中等复杂度的前端任务?

 

虽然这项技术无疑是很有用的,但 LLM 是否准备好了在没有任何人工监督的情况下接管工程任务呢?答案仍然是斩钉截铁的“否”,尽管这并不意味着一些公司不会尝试走这条路。

 

很难从单个例子​​中推断出太多信息,但有一点是肯定的,软件工程一直看重准确度和精确性,就像它看重创造力和创新一样。

 

虽然 LLM 擅长生成内容、回答问题和辅助开发人员,但要让它们自己编写出一致、无错误的代码还需要该领域取得重大突破。

 

也许让多个代理对同一代码进行迭代可能是朝着正确方向迈出的一步? 然而,我相信在可预见的未来这依旧会是一个挑战,毕竟,LLM 是在数十亿行由人类编写的“不完美”代码上进行训练的,而我们自己依旧没有解决这个问题。

 

原文链接:https://www.charbzg.com/blog/gpt-frontend-task

2025-01-26 11:049496

评论 1 条评论

发布
用户头像
deepseek应该不会出错
2025-02-07 08:00 · 广东
回复
没有更多了

OpenTelemetry WebSocket 监控终极方案:打通最后一公里

观测云

OpenTelemetry

怎样做数据库日志管理自动化?YashanDB高效解决方案

数据库砖家

怎样做数据库自动化运维?借助YashanDB实现智能管理

数据库砖家

“大模型”技术专栏 | 浅谈基于 Kubernetes 的 LLM 分布式推理框架架构:概览

ModelWhale

Kubernetes 分布式 大模型

前瞻性技术驱动,枫清科技助力制造企业借助大模型完成生产力转化

Fabarta

人工智能 AI 智能体

米哈游创始人 AI 游戏上线,与女主实时语音互动;昆仑万维上线 Mureka V7.5 模型,中文歌曲能力大幅提升丨日报

声网

怎样做数据迁移与环境切换?YashanDB全流程指南

数据库砖家

怎样做提高YashanDB数据库事务处理效率详解

数据库砖家

大数据-69 Kafka 存储结构解析:日志文件与索引文件的内部机制

武子康

Java 大数据 kafka 分布式 消息队列

怎样做数据库多版本控制?通过YashanDB实现数据追踪

数据库砖家

怎样做数据库业务流程自动化?YashanDB支持方案介绍

数据库砖家

香港理工大学 鲲鹏昇腾科教创新孵化中心揭牌 培育计算人才创新生态

极客天地

低代码平台能力框架:可复用组件与复杂业务的实现机制

JeeLowCode低代码平台

低代码 低代码报告 低代码,

通过YashanDB数据库分析用户行为数据的指南

数据库砖家

推荐护眼灯品牌:守护视力健康,照亮学习未来

科技汇

前半场放纵,后半场冲刺!我的暑假“极限挑战”从华为阅读这份书单开始!

最新动态

PDF怎么转为PPT演示文档?3个办公常用工具推荐

职场工具箱

效率 PPT 办公软件 AI生成PPT pdf

通过YashanDB数据库搭建分布式缓存系统的技术分析

数据库砖家

怎样通过YashanDB数据库实现实时报表生成

数据库砖家

邪修的方式找工作那真是非常快

Y11

AI 产品经理 求职 找工作

2025年中国AI算力基础设施发展趋势洞察

易观分析

怎样做数据库负载高峰应对?YashanDB动态调节机制

数据库砖家

通过YashanDB数据库提升电子商务数据处理能力技术指南

数据库砖家

v0.dev,bolt.new,lovable,前后端高效开发与零成本部署

AI山脚学长

如何进行数据库灾难恢复演练?YashanDB全流程管理策略

数据库砖家

通过YashanDB实现企业数据标准化管理的指南

数据库砖家

SelectDB x 同辕开发:在 ARM 架构下实现 25% 分析性能提升

SelectDB

数据库 华为 实时数仓 鲲鹏计算 ARM内核

通过YashanDB数据库支持快速应用开发流程

数据库砖家

提升YashanDB数据库的传输与处理速度

数据库砖家

怎样做通过YashanDB数据库提升企业数据资产利用率

数据库砖家

chatgpt-o1 能完成初级的前端开发任务吗?_生成式 AI_Charbel Ghossain_InfoQ精选文章