likes
comments
collection
share

我为 OpenAI ChatGPT 生态处理一个致命 BUG 的经过

作者站长头像
站长
· 阅读数 3

最近的 ChatGPT 应该不用我多说了,不过避免有朋友还没收到相关推送,我还是简单介绍两句:

了解 ChatGPT

ChatGPT 是 OpenAI 的一个产物,是继GPT-3.5 系列的主力模型之一,这一模型可以与人类进行谈话般的交互,可以回答追问,连续性的问题,承认其回答中的错误,指出人类提问时的不正确前提,拒绝回答不适当的问题。

进行了简单测试,包裹但不限于以下事情他都可以做:

  • 让他给你写代码,甚至是 sql,甚至是设计架构
  • 让他给你写文章,或者概括文章
  • 让他给你写的代码生成 commit 消息,也就是你只管写代码他来描述你做的工作
  • 让他给你重构代码
  • 让他为你讲解代码
  • 你可以随便使用中文或英文或其他语言和他对话,他能使用相当的语言回答你
  • 各种问答,基本没有显得刻意,十分流畅...

以下简单出几张图:

问游戏 我为 OpenAI ChatGPT 生态处理一个致命 BUG 的经过

身份转换 我为 OpenAI ChatGPT 生态处理一个致命 BUG 的经过

解释代码 我为 OpenAI ChatGPT 生态处理一个致命 BUG 的经过

给你的代码查 bug 我为 OpenAI ChatGPT 生态处理一个致命 BUG 的经过

各种技能就不一一罗列了,当然,我走过最深的路,就是你的套路 这句话充分说明了要是真玩起来,人都玩不过人,所以我们不要指望机器是先知,是上帝,回答有点不如意就认为他不过如此。

进入正题

ChatGPT 确实强大,那如何让他为我们服务呢?比如简单的编程问题或常见的数据处理函数就不用谷歌了,直接问他就行,他能直接给你可运行的代码以及实现思路。

但是,他目前 不对该地区开放 ,并且注册有一些门槛,例如国内手机号是不支持的,国内网络是不能访问的。争对这个问题,国内就出现了很多方案,例如代理、vscode插件、镜像、国内版、共享KEY……

好啦,既然有方法可以使用,但如何优雅的使用就是个需要思考的问题了:

ai-cli

我为 OpenAI ChatGPT 生态处理一个致命 BUG 的经过 根据 readme 和 star 来看,很酷很专业的样式,来,就你了。

命令行方式,即可方便使用,也可方便集成到其他程序,还是 js 的,那就说明假设有定制化的需求也不怕掉头发啦。

# 安装
npm i @abhagsain/ai-cli -g

# 使用
ai ask 来一段express示例

运行结果

我为 OpenAI ChatGPT 生态处理一个致命 BUG 的经过

就是这么丝滑!然而并没有。

问题出现

万丈高楼平地起,蚱蜢先从 hello world 开始~ 然而他这连 hello 都不行!

运行 ai 时需要先使用 ai auth 添加一个 key,这步没什么问题。

根据官网的示例:

ai ask "Check process running on port"

好像这串洋文有点复杂,蚱蜢先来个简单的:

> ai ask 你好
... !
    Error: Request failed with status code 400

这是认真的?我给 AI 说 你好,然后 AI 甩我一脸 Error,难道是 AI 不屑与我这个的垃圾沟通?我开始有点怀疑自己……

但我假装淡定,不,一定不是!肯定是其他原因,再给他一次机会!

> ai ask 你好
... !
    Error: Request failed with status code 400

我的目光开始闪烁,笑容逐渐消失。

我为 OpenAI ChatGPT 生态处理一个致命 BUG 的经过

我再次把我的目光注视着他,ai-cli,看到他的 readme,图文并茂,看到他的 star,700+(当前舍入法),看到他的最后一次更新就在昨天,看到他的 issues 全都关闭了。看他的每一眼里,无不透露着他的自信、他的傲慢,无不处处似乎写着,是我自己的问题,是我不配。

忽然我灵光一闪,难道是语言歧视?

然后我小心翼翼的向他说出,hello。一字一顿,生怕自己有半点差错。

>ai ask hello
... !
    Error: Request failed with status code 400

果然还是错付了。这一次,我低下了头,猛然发现!!!难道是我太小了?难道是我不够大?格局!格局!格局!

然后这些年的回忆涌上心头,浮现在脑海。

  • 400?
  • 400?
  • 400?

终究是记忆中的伤痕发出一丝隐隐作痛,让我似乎又找到一丝可以让他回眸的勇气。

这些年来做前端的回忆,400 这个状态码让我意识到,可能是数据传错了。

但我就传了个 hello,也是按 readme 的格式传的。 ChatGPT 这么多人都在使用,应该问题不是出在那边,出应该也是 500。

大概率是 ai-cli 出现了问题,向 ChatGPT 传错了参数什么的。

提出问题

这一次我终于勇敢的抬起头,跑过去拉住他的手问他,这是我的问题吗?

嗯对,我提了一个 issues。

提 issues 之前先看看他有没有什么要求(issues 模板),
如果没有,那至少把系统(win10x64),宿主(nodejs 14.5.5),
版本(ai-cli 1.2.2),以及重现步骤给写上。

最好再加上一些分析、结论、建议啥的,但目前比较忙,就不先写分析这些了。

所以有以下截图: 我为 OpenAI ChatGPT 生态处理一个致命 BUG 的经过

丢给他一个问题,我转身头也不会的走了。这次没有再奢求他会答复我什么。

(写其他代码去了。)

讨论问题

过大约一小时,收到了一封邮件,可能是广告但还是打开看了一下,没想到是他的讯息。我忍住不表现出自己的欣喜拆开它。

看起来他让我选检查当前 a-cli 的配置文件,然后又尝试选择一个 model。

我为 OpenAI ChatGPT 生态处理一个致命 BUG 的经过

然而,我其实并不知道他在说些什么。

只有这样,才能勉强大概可能知道他在说什么的样子,我好可怜…… 我为 OpenAI ChatGPT 生态处理一个致命 BUG 的经过

为了避免自己不理解他的意图而给到他错误甚至是尴尬的回答,所以我干脆 都给你,请自取我为 OpenAI ChatGPT 生态处理一个致命 BUG 的经过

由于我使用的是 window,我使用 type 命令来向他展示配置文件的完整路径,以及配置文件中的内容。然后再重新运行一遍 ai ask hello 来展示错误,这是为了向他表示,配置文件是没问题的,但程序还是错误。

可是紧接着他的回答,让我渐渐明白,他就是个渣男!渣男!总是试图从我这边找问题。你看他说的,你们来评评理:

Oh, You need to pass the question in a string (double quotes) like this ai ask "Check running containers". As I can see in the screenshot you're passing without it.

他似乎在说,我出现这个问题是因为 ai ask hello 这条命令中的 hello 没有添加双引号。

还好我是上过小学的人,不然就被他 PUA 了!终于看清了他的面目,于是我不再懦弱,不再退让,我现在要义正言辞的告诉他:

我知道引号一般都是在参数含有空格或特殊字符时才需要添加的,你不要忽悠我,并且我也是测试过的,我证明给你看,我要让你无话可说,渣男!

我为 OpenAI ChatGPT 生态处理一个致命 BUG 的经过

他无话可说,他开始自我怀疑 奇怪,但是他还在试图挣扎,他给了我一条 curl 命令,让我添加参数看一下是不是 OpenAI 的问题还是他的 ai-cli 的问题。

我为 OpenAI ChatGPT 生态处理一个致命 BUG 的经过

添加自己的 key 运行 curl?当然没有问题。但他又说要确保有 OpenAI 的使用权?这可唬到我了,不过不怕,我一并接招:

直接告诉他,我的账号在网页平台上使用是没有问题的,以下所给 curl 请求的报文,请检查错误。

注:在运行别人给的命令时,
请确保知道命令做的是什么事。
如果在沟通过程中有敏感信息(例如 curl 报文中的 key),
请做脱敏处理。

我为 OpenAI ChatGPT 生态处理一个致命 BUG 的经过

但是,总感觉这样的沟通不知何时是头,虽然他是渣男,但我们的共同目标都是解决问题,我决定伸出援手,向他提供更多更有价值的分析和参考问题都这么明显!你!你!你!

我为 OpenAI ChatGPT 生态处理一个致命 BUG 的经过

好家伙,这下终于承认了代码错误了吧~

解决问题

其实在为他提供信息的过程中,我已经基本找到问题的原因了。理论上,以 github 上的交流情怀而言,我应该主动修改代码解决问题,并向他提出申请把代码合并。

提(PR)还是不提,这是个问题。因为他现在已经知道错误在代码中,并正在排查错误位置。

虽然我已经从调试过程中知道了错误位置,但如果我要提 PR ,应使用完整的流程已避免一些问题显得蚱蜢是个正经人,例如 Fork 代码到自己的名下,并 Clone 到本地,然后从他的主分支新建一个分支,命名比较简洁并且能表示此分支专用于修复当前讨论的 issues 。

切换到新分支之后,应从源码修改,而不是从 build 后的文件中修改。在修改时,应注意使用 最少修改最少影响范围符合原代码格式规范等规则,修改之要查询仓库中有没有测试用例,如果有,应该先把测试用例跑通,避免对之前的功能造成问题。

提(PR)还是不提,这是个问题。因为我要提这个 PR,要处理的步骤还是蛮多的,如果我刚好提了 PR,他又刚好推送了修改,修改的地方又不相同时,这时候是要我的呢?他岂不是很没面子?要他的呢我岂不是没面子。

说着说着我已经 Clone 了代码并修改完了,当我尝试编译的时候:

我为 OpenAI ChatGPT 生态处理一个致命 BUG 的经过

我为 OpenAI ChatGPT 生态处理一个致命 BUG 的经过

先发制人

我已经很难了,为什么还要这么难!

算了,直接告诉他应该在哪改吧。 我为 OpenAI ChatGPT 生态处理一个致命 BUG 的经过

后来

后来,我总算学会了如何去爱,可惜你早已远去,消失在人海……

不好意思刚走错片场了,后来在他修复的过程中,我使用本地已解决问题的版本成功使用了他这个 ai-cli 。

发现并不是我想要的样子,终究还是错付了。