ChatGPT Lint - 让 ChatGPT 来 review 代码

2023-04-14 16:55:30 +08:00
 LeslieLeung

之前做了一个使用 ChatGPT 来处理纯文本的工具 PTPT ( https://v2ex.com/t/927694 ),最近新添加了一个实用的功能:lint 。传统的 linter 一般只能在特定的语言上使用,而 ChatGPT 能自动适应各种语言,因此萌生了这个想法。

在实现的过程中,进行了一些思考,也提出了一些解决方法,也一并分享出来,欢迎大家交流。

存在的问题

行号问题

给 ChatGPT 提供一整个代码文件之后,line:char 会出现丢失的情况。猜想是 tokenize 的时候丢失了。如果要解决行号,在每一行开头手动补一个行号即可。char 的问题可能无法解决,但是作为 lint 来说没有 char 也还行。

输出更有用的建议

目前经常出现一些没有用的建议或者是对语言的特性不了解、对上下文不了解等,导致模型提出一些无效的建议,需要再加人工去筛选。 猜想目前使用的是 GPT3.5 的模型,在 cursor 中,使用 GPT4 的模型,在一些比较明显的问题上,能够检测出来并给出比较有用的建议。

经常性输出 undefined/undeclared/unused 等建议

GPT 是个单向的模型,相比于 BERT ,对上下文理解能力略差。这是 GPT 先天的不足,经过 prompt 的调教暂时还无法解决。

安装

go install github.com/leslieleung/ptpt@latest

或从 Release 下载

使用方法

> ptpt lint <file>
> ptpt lint -l zh <file> # 中文建议

项目地址: https://github.com/LeslieLeung/PTPT, 欢迎 star

1629 次点击
所在节点    分享创造
4 条回复
tfdetang
2023-04-14 19:51:16 +08:00
> GPT 是个单向的模型,相比于 BERT ,对上下文理解能力略差。
你是怎么得出这个结论的
LeslieLeung
2023-04-14 21:55:29 +08:00
@tfdetang #1 GPT 提出了大量 unused/undefined variable 的提示,但明明变量上下文就有定义 /使用。当然“对比”我没有做过,我只是从 GPT 的特点出发作出这个猜测。
hsir
2023-04-15 15:02:16 +08:00
这个会不会代码稍微多一点,就超过 token 限制了
LeslieLeung
2023-04-15 15:11:46 +08:00
@hsir #3 的确会。不过目前来看三四百行的代码基本 ok ( lint 的时候是对单个文件)。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/932575

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX