您当前的位置:首页 > 电脑百科 > 人工智能

让 GPT-4 修改文件,真的太难了!

时间:2023-10-26 16:24:20  来源:CSDN  作者:

作者 | Kevin Lu

译者| 弯月

出品 | CSDN(ID:CSDNnews)

GPT-4 发布以来,我们一直在尝试让其修改长篇的代码文件。尽管它在解决复杂问题或从零开始创建复杂系统方面表现出色,但在向一个 200 行代码的 Flask 服务器中插入日志时,它却举步维艰。然而,显然后者更为实用。

我们经常听到的一种抱怨是:“ChatGPT 可以完成这项任务,但你们的 Sweep.AI 却不能”。这是因为 GPT-4 并不能一致地编辑长篇文件,它往往会在中途写入“#Rest of the code”,或错误地复制一段代码,而使用ChatGPT的人类可以轻松解决这个算法无法解决的问题。因此,我们不能简单地通过从头开始重写文件的方式来修改文件。

以下是我们做过的所有让 GPT-4 修改文件的尝试,以及由于 GPT-4 未能正确格式化或计数而导致的成功和失败。

让 GPT-4 修改文件,真的太难了!

版本 0:简单地重写整个文件

如前所述,完全重写文件存在两个主要问题:

1、对于超过 50 行的文件,GPT-4 最终会生成类似“#Rest of the code”的内容。

2、文件太长。拥有 k 个令牌的文件将需要 k 个输入令牌和 k 个输出令牌。

3、GPT-4 会错误地复制代码。它有时会删除或添加额外的注释或空白,或更改缩进。

我们来看一个如何解决第一个问题的示例。

在本文中,我将使用以下简短的 Flask 服务器实现作为我们正在编辑的文件的示例。出于简洁考虑,我选择了一个简短的示例,因此对于这个特定示例,GPT-4 也许不会出现这些错误,但在较大的文件中经常会出现类似的错误。

让 GPT-4 修改文件,真的太难了!

要求 GPT-4 添加日志,我们可能会得到以下内容:

让 GPT-4 修改文件,真的太难了!

显然,我们不能仅凭这段代码创建拉取请求(PR)!我们必须撤销所有“#Rest of the code”的修改。

版本 1:使用 difflib 修复“rest of the code”救命稻草 difflib

最简单的解决方案似乎是检查两个文件的差异,并回滚所有带有“Rest of the code”、“Remaining of the code”的部分。

上面示例的差异如下所示:

让 GPT-4 修改文件,真的太难了!

现在,我们只需撤销每个删除后面带一个形如 + # Rest of test 注释的部分。具体来说,我们使用以下方法检查这些注释:

在这个示例中,它解决了问题:我们最终得到了我们所期望的结果,即在每个函数的开头有一个打印语句。

限制

不幸的是,这个差异回滚系统的能力仍然相当有限。首先,有时 GPT-4 会写下诸如“More unti tests here”,“Complete the implementation”,“...”等注释,有无限多可能。其次,有些情况下,差异算法无法找到具体应当被替换的行。

例如,让我们要求 GPT-4 添加一个删除端点,它的回应是:

让 GPT-4 修改文件,真的太难了!

但差异算法返回的内容如下:

让 GPT-4 修改文件,真的太难了!

回滚该差异只会产生:

让 GPT-4 修改文件,真的太难了!

显然,这完全不是我们所期望的。在 Sweep.AI 的最初几周中,由于这个问题,Sweep 会随机删除大段的代码。

也许我们可以编写一个更智能的差异算法来捕捉这些讨厌的“Rest of code”注释。但即使如此,从算法角度来看,也不可能确定GPT-4的意图是要删除一切并添加新的 delete_task 端点,还是要将 update_task 端点替换为 delete_task 端点。

根本的问题在于,我们无法确定# Rest of code的意思是替换直到 update_task 的所有代码,还是仅仅是替换 create_task 端点。我们需要不同的输入。我们需要让 GPT-4 指出每个替换和修改标签的覆盖范围。

版本 2:以行为单位修改或复制思路

如果可以让 GPT-4 编写一组具体的替换说明,我们就可以用新代码进行替换。最初,我们采用了以下格式:

这段指令的意思是使用新的代码替换从 i(包含)到 j(不包含)的行。

通常,我们更喜欢从 GPT-4 获得基于 XML 的响应,因为它们:

  • 可以使用正则表达式轻松解析。我们的模式通常类似于:<update_lines start="(??<start>d+)" end="(?P<end>d+)">(?P<code>.*?)</update_lines>。
  • 在训练数据(从网上获取的数据)中很常见,因此大型语言模型非常了解它们。
  • 可以处理引号和换行符,这些符号在代码中很常见。XML 不像 JSON 那样需要对符号进行转义。此外,XML 的结束标记通常很少出现。
  • 大型语言模型很难破坏 XML 格式。

例如,向上面的 Flask API 端点添加更多示例数据,GPT-4 会给出:

而插入新的代码,比如删除端点,GPT-4 会给出:

GPT-4 无法复制行号

当然,我们在提示中添加了代码的行号,以帮助模型正确计数。然而,即便如此,GPT-4 也会复制不正确的行号。这可能导致代码缺失一行或多出一行,如下所示,缺少 return 语句:

让 GPT-4 修改文件,真的太难了!

或者产生重复的代码行,如下所示:

我们尝试了一些办法,但都无法很好地解决这个问题:

1、删除重复行:如果出现重复较小的行,我们将尝试去除重复行。不幸的是,这并不完全可的,有时会错误删除有意重复的代码。而且它无法处理缺失行的情况。

2、通过另一个模型运行以修复代码:我们将代码输入到 GPT-3.5-16k 中,以验证更改并修复应该修复的内容。不幸的是,这会导致复制中的随机错误,并偶尔出现随机的“#Rest of code”。所以这条路也行不通。

我们还尝试了其他方法,但感觉不太自然,即从文件中复制旧的代码行,然后自然地编写剩下的部分,如下所示:

让 GPT-4 修改文件,真的太难了!

但同样会受到错误行号的影响。

版本 3:aider diff

这个时候,我们碰巧看到了 aider 创建者的博客文章,aider 是类似于 Sweep 的工具,但是它在本地运行。Aider 要求 GPT-4 生成以下格式的搜索和替换对:

然后只需在代码中搜索原始代码块,并用新代码块替换。例如,为了生成更多的测试数据,它可能生成如下内容:

让 GPT-4 修改文件,真的太难了!

这种新方法在我们以前的尝试中效果明显更好,我认为主要原因是:

1、对于 LLM 来说,复制代码比选择正确的行号要容易得多。

2、一旦代码被复制到ORIGINAL代码块中,Sweep 就可以非常容易地修改代码,因为 ORIGINAL 原始代码更接近 GPT-4 编写的代码的地方,并且可以用作参考。很有可能,位置嵌入减少了 LLM 在修改代码块过程中的噪声。

这种格式与 git 合并冲突的格式相似,这可能是 GPT-4 的训练数据的一部分。

然而,我们仍然有一些问题:

  • 可能无法正确地复制 ORIGINAL 代码。

○最初,我们考虑构建一个模糊匹配算法。然后,我们构建了 V4 来进一步解决这个问题。

  • ORIGINAL 代码块可能会多次出现在代码中。

○默认情况下,我们会匹配第一个项。

○我们还提示 Sweep 在 ORIGINAL 代码块前后多复制几行以消除歧义。

○此外,通常不建议在多个地方重复使用中等大小的代码块,而是应该使用辅助函数。

  • 在重新编写较长的部分时,它仍然偶尔会写入“#Rest of code”。

○我们提示 GPT-4 进行多个小的更改,而不是较大的更改。

  • 代码仍然太长。

○对于超过 600 行的文件,我们会要求 GPT-4 一次处理 400 行代码。由此产生了一些与上下文相关的问题,但这解决了目前的问题。有关此问题的更多信息,请参见下文。

版本 4:搜索并替换

我们目前的算法是在 Aider diff 的基础上进行了一些扩展。主要问题是,对于中等大小的文件,Sweep 经常会复制错误的行。

Aider diff 存在的问题

例如,如果要求 Sweep 向端点添加日志:

让 GPT-4 修改文件,真的太难了!

此处,ORIGINAL 代码块中的 create_task 被无意间更改为 start_task。本质上是 GPT-4 错误地复制了行,然后在错误复制的行上应用了转换。

更准确地说,GPT-4 本来想把子字符串 S 替换成 R(S),其中 R: str → str 是需要进行的变换。但是,它生成了 S',然后替换成了 R(S')。这就导致 S 被替换成了 R(S'),这经常会导致代码无法编译,或者导致不可预见的错误。

aider diff 的改进

一个解决方案是更早地开始流式传输,即使用 200 行的块而不是 400 行的块,但这会导致更多的问题,如算法缺少上下文、性能较差和成本较高。

最终我们的解决方案是分别生成 S 和 R(S)。首先让 GPT-4 生成 S',然后通过模糊匹配,在代码中用 S' 搜索 S。然后要求 GPT-4 在 S 上执行相应的变换,这样就生成了 R(S)。

具体而言,新算法执行以下操作:

1、生成一系列的小段代码:S'1, S'2, ..., S'n,供GPT-4编辑,然后使用模糊匹配算法,找到正确的行:S1, S2, ..., Sn。

a.如果模糊匹配对于某个 S'i 产生的相似度分数过低(< 50%),则抛弃。未来也可以向 GPT-4 重新提示该问题。

2、然后将真正的代码片段发给 GPT-4 进行编辑。

因此,我们会要求 GPT-4 生成类似于以下内容:

此时生成省略号(...)是允许的,因为我们的匹配算法通常可以正确匹配代码片段。然后,我们会在代码库中找到真正的代码片段,并呈现给 GPT-4 进行编辑,如下所示:

然后,我们会回复以下内容,要求 GPT-4 进行编辑:

这样可以确保不会出现意外编辑,比如将变量从 create_task 重命名为 start_task。

其他障碍

以下是我们遇到的其他不太重要的障碍:

  • 格式错误:我们设置了一个退避系统,可以再次提示 GPT-4 以更高的准确度以正确的格式提供响应。
  • 缩进:GPT-4 往往会取消缩进代码,这会使 Python/ target=_blank class=infotextkey>Python 代码无法解析。我们通过匹配原始缩进来修复这个问题,根据 ORIGINAL 代码块和原始文件的匹配部分之间的缩进差异来进行匹配。

尽管我们解决了大部分问题,但仍然存在一些文件太长的问题。我们自己的代码库中就有多个超过 1000 行的文件。

  • 每次流式传输 400 行只是一个权宜之计,但并不能完全解决问题,因为它会分割代码的语义。此外,模型有时不会修改代码的任何部分,有时会修改代码的多个部分。在没有文件其余部分的上下文的情况下,修改文件的一部分非常困难。
  • 对于 Python,我们建立了基于实体的编辑。最近,我们建立了一个用于更好地理解 Python 代码的库级别的调用图系统。我们在规划阶段使用它,让 LLM 决定要编辑文件的哪个类或函数。

结论

让 GPT-4 正确修改代码是一场艰苦的战斗,很容易出现各种错误。自发布以来,我们一直在与这些错误作斗争,但只能缓解常见的错误。

原文链接:https://docs.sweep.dev/blogs/gpt-4-modification



Tags:GPT-4   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
报告称 OpenAI 采集了超一百万小时的 YouTube 视频来训练 GPT-4
IT之家 4 月 7 日消息,本周早些时候,《华尔街日报》报道称 AI 公司在收集高质量训练数据方面遇到了困难。今天,《纽约时报》详细介绍了 AI 公司处理此问题的一些方法,其中涉及到...【详细内容】
2024-04-07  Search: GPT-4  点击:(5)  评论:(0)  加入收藏
微软AI程序员登场,10倍AI工程师真来了?996自主生成代码,性能超GPT-4 30%
新智元报道编辑:桃子 润【新智元导读】全球首个AI程序员Devin诞生之后,让码农纷纷恐慌。没想到,微软同时也整出了一个AI程序员&mdash;&mdash;AutoDev,能够自主生成、执行代码等...【详细内容】
2024-03-18  Search: GPT-4  点击:(15)  评论:(0)  加入收藏
前端不存在了?盲测64%的人更喜欢GPT-4V的设计,杨笛一等团队新作
3 月 9 日央视的一档节目上,百度创始人、董事长兼 CEO 李彦宏指出,以后不会存在「程序员」这种职业了,因为只要会说话,人人都会具备程序员的能力。「未来的编程语言只会剩下两种...【详细内容】
2024-03-11  Search: GPT-4  点击:(9)  评论:(0)  加入收藏
多模态大模型,阿里通义千问能和GPT-4V掰手腕了
通义千问的图像推理能力,最近有了大幅提升。2024 年,大模型领域要卷什么?如果没有思路的话,不妨看看各家大厂都在押注什么方向。最近一段时间,先是 OpenAI 推出 GPT-4V,让大模型...【详细内容】
2024-01-29  Search: GPT-4  点击:(71)  评论:(0)  加入收藏
微软Copilot Pro来了:个人用户也能在Word里用GPT-4,20美元/月
面向个人用户的微软Copilot会员版来了。一个月多交20刀(约合人民币142元),Microsoft 365个人版/家庭版用户就能在Word、Excel、PPT等Office全家桶中用上GPT-4。就像这样,不用在C...【详细内容】
2024-01-16  Search: GPT-4  点击:(89)  评论:(0)  加入收藏
“GPT-4变傻”不只是OpenAI的苦恼,所有大模型与人类交往越久就会越蠢?
 许多大模型在处理早期数据时展现出的优异表现,实际上是受到了&lsquo;任务污染&rsquo;的影响,回答问题全靠记,而非纯粹基于学习理解能力。  ChatGPT发布一年多,已经在全世界...【详细内容】
2024-01-05  Search: GPT-4  点击:(48)  评论:(0)  加入收藏
GPT-4V开源平替!清华浙大领衔,LLaVA等开源视觉模型大爆发
新智元报道编辑:Aeneas【新智元导读】GPT-4V的开源替代方案来了!极低成本,性能却类似,清华、浙大等中国顶尖学府,为我们提供了性能优异的GPT-4V开源平替。如今,GPT-4 Vision在语言...【详细内容】
2024-01-03  Search: GPT-4  点击:(53)  评论:(0)  加入收藏
谷歌Gemini扳回一局!多模态能力和GPT-4V不分伯仲|港中文128页全面测评报告
量子位 | 公众号 QbitAI谷歌扳回一局!在Gemini开放API不到一周的时间,港中文等机构就完成评测,联合发布了多达128页的报告,结果显示:在37个视觉理解任务上,Gemini-Pro表现出了和GP...【详细内容】
2023-12-22  Search: GPT-4  点击:(118)  评论:(0)  加入收藏
GPT-4V 都搞不明白的未来推理有解法了!来自华科大 & 上科大
多模态大语言模型展现了强大的图像理解和推理能力。但要让它们基于当前观测来对未来事件进行预测推理仍然非常困难。即便是当前最强大的 GPT-4V(如下图所示),也无法很好地解决...【详细内容】
2023-12-18  Search: GPT-4  点击:(58)  评论:(0)  加入收藏
OpenAI 宣布修复GPT-4变懒问题,将在离线评估及AB测试后更新模型
IT之家 12 月 11 日消息,OpenAI 在上周遭到部分用户投诉,许多用户声称,他们在使用 ChatGPT 或 GPT-4 API 时,会遇到回应速度慢、敷衍回答、拒绝回答、中断会话等一系列问题,OpenA...【详细内容】
2023-12-12  Search: GPT-4  点击:(50)  评论:(0)  加入收藏
▌简易百科推荐
OpenAI和谷歌再起纷争:AI的尽头是内容
日前,纽约时报的一篇报道称,人工智能公司 OpenAI为收集高质量训练数据而开发了一个语音转录模型Whisper。该模型主要用于转录 OpenAI 获取的超过 100 万小时的 YouTube 视频,也...【详细内容】
2024-04-09  小编也疯狂  新浪网  Tags:AI   点击:(1)  评论:(0)  加入收藏
AI产业的灰色暗面:OpenAI、谷歌、META如何搞训练语料
财联社4月7日讯(编辑 史正丞)种种迹象显示,目前站在全世界AI领域潮头浪尖的这些公司,早在几年前就已经陷入对训练语料的“绝望”追逐中&mdash;&mdash;为此他们不惜修改政策条款...【详细内容】
2024-04-09    财联社  Tags:AI产业   点击:(1)  评论:(0)  加入收藏
和“数字人”交朋友,当心隐私被出卖......
在虚拟社交中如何在保护用户隐私和数据安全的同时提供高质量的社交体验?如何避免过度依赖虚拟社交找到虚拟与真实之间的平衡点?《中国消费者报》记者就此展开了调查APP里有个...【详细内容】
2024-04-09    中国消费者报  Tags:数字人   点击:(2)  评论:(0)  加入收藏
AI“复活”成产业链:成本可降至数百元
大模型应用落地,带火数字人(11.560, 0.29, 2.57%)赛道。文|《中国企业家》记者李艳艳 实习生 孙欣编辑|姚赟头图来源|《流浪地球2》电影画面截图清明节前,预估会有需求的庞立...【详细内容】
2024-04-09    中国企业家  Tags:AI“复活”   点击:(2)  评论:(0)  加入收藏
多方热议人工智能产业新机遇
编者按&emsp;&emsp;从前沿科技展会到高层对话平台,从上海、重庆到博鳌,从线上到线下&hellip;&hellip;一场场高规格、大规模的盛会中,人工智能正在成为各界热议的高频词。赋能千...【详细内容】
2024-04-08    中国家电网  Tags:人工智能   点击:(4)  评论:(0)  加入收藏
​人形机器人时代来了吗
日前,由中国人形机器人(11.080, -0.05, -0.45%)百人会主办的人形机器人大赛在北京经济技术开发区开赛。工作人员向参观者展示一款人形机器人。参观者与一款陪护型人形机器人...【详细内容】
2024-04-08    中国青年报  Tags:​人形机器人   点击:(5)  评论:(0)  加入收藏
AI重塑社交:腾讯与字节跳动的新赛场
文|新火种 一号编辑|美美最近,腾讯和字节跳动这两大互联网巨头几乎同步推出了各自的AI社交产品,尽管腾讯和字节跳动在前段时间刚刚“破冰”,但这一举措不仅意味着这两大巨头之...【详细内容】
2024-04-07    蓝鲸财经  Tags:AI   点击:(8)  评论:(0)  加入收藏
第一批用 Kimi 做内容的网红已经杀疯了
作者:王东东 文章来自:斗战圣佛小组技术信仰派 VS 市场信仰派 朱啸虎和月之暗面老板杨植麟在前几天有一场不算 battle 的 battle。battle 的争论点是:大模型有没有戏。技术派...【详细内容】
2024-04-04    斗战圣佛小组  Tags:Kimi   点击:(4)  评论:(0)  加入收藏
昆仑万维发布面向人工智能时代的六条人才宣言
过去的一年多,是人工智能取得非凡进步的一年。在这充满突破性技术飞跃和备受争议的一年里,我们见证了人工智能的快速发展和广泛的影响,人工智能已经迅速地融入了我们的生活,深刻...【详细内容】
2024-04-03    砍柴网  Tags:昆仑万维   点击:(7)  评论:(0)  加入收藏
AI干掉声优?音频大模型追逐“图灵时刻”
七十年前,“人工智能之父”图灵提出,如果人无法判断屏幕的另一侧究竟是人还是机器,就证明机器具备了人一样的智能。这一经典的图灵测试如同北斗星一般,指引着AI行业的工作者们不...【详细内容】
2024-04-03    第一财经网  Tags:AI   点击:(5)  评论:(0)  加入收藏
站内最新
站内热门
站内头条