之前做了一个使用 ChatGPT 来处理纯文本的工具 PTPT ( https://v2ex.com/t/927694 ),最近新添加了一个实用的功能:lint 。传统的 linter 一般只能在特定的语言上使用,而 ChatGPT 能自动适应各种语言,因此萌生了这个想法。
在实现的过程中,进行了一些思考,也提出了一些解决方法,也一并分享出来,欢迎大家交流。
给 ChatGPT 提供一整个代码文件之后,line:char 会出现丢失的情况。猜想是 tokenize 的时候丢失了。如果要解决行号,在每一行开头手动补一个行号即可。char 的问题可能无法解决,但是作为 lint 来说没有 char 也还行。
目前经常出现一些没有用的建议或者是对语言的特性不了解、对上下文不了解等,导致模型提出一些无效的建议,需要再加人工去筛选。 猜想目前使用的是 GPT3.5 的模型,在 cursor 中,使用 GPT4 的模型,在一些比较明显的问题上,能够检测出来并给出比较有用的建议。
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
1
tfdetang 2023-04-14 19:51:16 +08:00
> GPT 是个单向的模型,相比于 BERT ,对上下文理解能力略差。
你是怎么得出这个结论的 |
2
LeslieLeung OP @tfdetang #1 GPT 提出了大量 unused/undefined variable 的提示,但明明变量上下文就有定义 /使用。当然“对比”我没有做过,我只是从 GPT 的特点出发作出这个猜测。
|
3
hsir 2023-04-15 15:02:16 +08:00
这个会不会代码稍微多一点,就超过 token 限制了
|
4
LeslieLeung OP @hsir #3 的确会。不过目前来看三四百行的代码基本 ok ( lint 的时候是对单个文件)。
|