AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

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:049354

评论 1 条评论

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

SpringBoot升级所踩过的坑(一)

技术小生

6 月 优质更文活动

LED广告牌企业的突破点在哪?

Dylan

技术 分辨率 LED LED显示屏 led显示屏厂家

供应链中台管理系统开发私有化部署

薇電13242772558

供应链 管理系统

测试同学职场成长的核心认知

老张

职场成长 认知

后疫情时代,国际形势向好,企业出海如何把握风险管控?

用友BIP

中企出海

中国振华刘昕:携手用友打造电子行业的数智化平台,服务全行业

用友BIP

2023用友BIP技术大会

亿视电子基于PolarDB-X打造能源数字基座实践

阿里云数据库开源

MySQL 数据库 分布式 阿里云; PolarDB-X

MySQL Router高可用搭建

GreatSQL

MySQL 高可用 greatsql社区

大型企业数智化关键举措太难懂?这本数智平台白皮书带你秒理解

用友BIP

白皮书 数智平台 平台白皮书 数智平台白皮书

NineData,稳定、高效的Redis数据同步解决方案

NineData

redis 数据同步 迁移数据 数据同步工具 NineData

什么样的企业需要建设财务共享服务中心?

用友BIP

财务共享

带你走进大数据 | 写给小白的大数据指南

Data 探险实验室

大数据 数据分析 数据处理 数据存储 数据发展

软件测试/测试开发丨App自动化测试学习笔记分享

测试人

程序员 软件测试 测试开发 app自动化测试

公司大规模裁员的时间轴

HoneyMoose

云管理用哪家云管平台厂商好?从哪些方面来看?

行云管家

云计算 云资源 云管理 云成本

MySQL对derived table的优化处理与使用限制

GreatSQL

MySQL greatsql社区

财务共享管理体系助力企业卓越发展

用友BIP

财务共享

手把手实践丨基于STM32+NBIOT+华为云IOT设计智能井盖

华为云开发者联盟

云计算 华为云 华为云开发者联盟 企业号 6 月 PK 榜 智能井盖

Ambient Mesh:Istio 数据面新模式

华为云开发者联盟

云原生 华为云 华为云开发者联盟 企业号 6 月 PK 榜

NFTScan | 05.29~06.04 NFT 市场热点汇总

NFT Research

Simple Date Format类到底为啥不是线程安全的?

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 6 月 PK 榜

硬核!阿里P8呕心沥血5年总结的Java面试速成手册开源一天上榜首

Java你猿哥

Java 微服务 算法 多线程 ssm

二级等保堡垒机用哪个品牌好?理由是什么?

行云管家

网络安全 等保 堡垒机 等级保护

基于STM32+华为云IOT设计的智能温室大棚监控系统

DS小龙哥

6 月 优质更文活动

全面数据管理 DBeaverUltimate最新中文安装包

真大的脸盆

Mac 数据库管理工具 数据库管理 Mac 软件 管理数据库

软件测试/测试开发丨App自动化测试学习笔记

测试人

程序员 软件测试 测试开发 app自动化测试

Maven Could not find artifact com.ruoyi:ruoyi-framework:pom:3.8.5 in public

Andy

如何减少创建订单、支付等线上写场景漏测?去哪儿流量录制回放实践

TakinTalks稳定性社区

阿里工程师手打的MySQL学习笔记,轻松拿捏MySQL

小小怪下士

Java MySQL 程序员

降本增效,StarRocks 在同程旅行的实践

StarRocks

数据库 大数据 数据仓库 湖仓一体 大数据 开源

5分钟在k8s上可视化搭建Kylin5

CloudEon开源

大数据 开源 云原生 kubernetes 运维 Apache Kylin

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