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

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

了解 ChatGPT

ChatGPT 是 OpenAI 的一个产物,是继GPT-3.5 系列的主力模型之一,这一模型可以与人类进行谈话般的交互,可以回答追问,连续性的问题,承认其回答中的错误,指出人类提问时的不正确前提,拒绝回答不适当的问题。
进行了简单测试,包裹但不限于以下事情他都可以做:

  • 让他给你写代码,甚至是 sql,甚至是设计架构
  • 让他给你写文章,或者概括文章
  • 让他给你写的代码生成 commit 消息,也就是你只管写代码他来描述你做的工作
  • 让他给你重构代码
  • 让他为你讲解代码
  • 你可以随便使用中文或英文或其他语言和他对话,他能使用相当的语言回答你
  • 各种问答,基本没有显得刻意,十分流畅…
    以下简单出几张图:
    问游戏
    2022-12-09-14-58-16
    身份转换
    2022-12-09-15-03-03
    解释代码
    2022-12-09-15-08-32
    给你的代码查 bug
    2022-12-09-15-09-08
    各种技能就不一一罗列了,当然,我走过最深的路,就是你的套路 这句话充分说明了要是真玩起来,人都玩不过人,所以我们不要指望机器是先知,是上帝,回答有点不如意就认为他不过如此。

进入正题

ChatGPT 确实强大,那如何让他为我们服务呢?比如简单的编程问题或常见的数据处理函数就不用谷歌了,直接问他就行,他能直接给你可运行的代码以及实现思路。
但是,他目前 不对该地区开放 ,并且注册有一些门槛,例如国内手机号是不支持的,国内网络是不能访问的。争对这个问题,国内就出现了很多方案,例如代理、vscode插件、镜像、国内版、共享KEY……
好啦,既然有方法可以使用,但如何优雅的使用就是个需要思考的问题了:

  • 官方页面 https://chat.openaI.com/chat 有一些痛点

    • 不支持保存聊天记录
    • 不方便二开
    • 要使用总得打开浏览器
  • 那就先去 GITHUB 看看

    • chat-gpt-google-extension 在谷歌搜索时也显示 ChatGPT 的搜索结果
    • chatgpt-api 一个 nodejs chatgpt api
    • chatgpt-mac 在 mac 的菜单栏中直接使用 chatgpt
    • chatgpt-vscode 在 vscode 中使用 chatgpt
    • ai-cli 在 命令行中与 chatgpt 进行交互

      ai-cli

      image.png
      根据 readme 和 star 来看,很酷很专业的样式,来,就你了。
      命令行方式,即可方便使用,也可方便集成到其他程序,还是 js 的,那就说明假设有定制化的需求也不怕掉头发啦。
      # 安装
      npm i @abhagsain/ai-cli -g
      # 使用
      ai ask 来一段express示例
      
      运行结果
      2022-12-09-15-36-31

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

问题出现

万丈高楼平地起,蚱蜢先从 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

我的目光开始闪烁,笑容逐渐消失。
2022-12-09-15-48-48
我再次把我的目光注视着他,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),以及重现步骤给写上。
    
    最好再加上一些分析、结论、建议啥的,但目前比较忙,就不先写分析这些了。
    所以有以下截图:
    2022-12-09-16-38-44
    丢给他一个问题,我转身头也不会的走了。这次没有再奢求他会答复我什么。
    (写其他代码去了。)

    讨论问题

    过大约一小时,收到了一封邮件,可能是广告但还是打开看了一下,没想到是他的讯息。我忍住不表现出自己的欣喜拆开它。
    看起来他让我选检查当前 a-cli 的配置文件,然后又尝试选择一个 model。
    2022-12-09-16-41-21
    然而,我其实并不知道他在说些什么。
    只有这样,才能勉强大概可能知道他在说什么的样子,我好可怜……
    2022-12-09-16-43-05
    为了避免自己不理解他的意图而给到他错误甚至是尴尬的回答,所以我干脆 都给你,请自取
    2022-12-09-16-45-11
    由于我使用的是 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 了!终于看清了他的面目,于是我不再懦弱,不再退让,我现在要义正言辞的告诉他:
我知道引号一般都是在参数含有空格或特殊字符时才需要添加的,你不要忽悠我,并且我也是测试过的,我证明给你看,我要让你无话可说,渣男!
2022-12-09-16-54-10

他无话可说,他开始自我怀疑 奇怪,但是他还在试图挣扎,他给了我一条 curl 命令,让我添加参数看一下是不是 OpenAI 的问题还是他的 ai-cli 的问题。
2022-12-09-17-05-05
添加自己的 key 运行 curl?当然没有问题。但他又说要确保有 OpenAI 的使用权?这可唬到我了,不过不怕,我一并接招:
直接告诉他,我的账号在网页平台上使用是没有问题的,以下所给 curl 请求的报文,请检查错误。

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

2022-12-09-17-08-21
但是,总感觉这样的沟通不知何时是头,虽然他是渣男,但我们的共同目标都是解决问题,我决定伸出援手,向他提供更多更有价值的分析和参考问题都这么明显!你!你!你!
2022-12-09-17-14-15
好家伙,这下终于承认了代码错误了吧~

解决问题

其实在为他提供信息的过程中,我已经基本找到问题的原因了。理论上,以 github 上的交流情怀而言,我应该主动修改代码解决问题,并向他提出申请把代码合并。
提(PR)还是不提,这是个问题。因为他现在已经知道错误在代码中,并正在排查错误位置。
虽然我已经从调试过程中知道了错误位置,但如果我要提 PR ,应使用完整的流程已避免一些问题显得蚱蜢是个正经人,例如 Fork 代码到自己的名下,并 Clone 到本地,然后从他的主分支新建一个分支,命名比较简洁并且能表示此分支专用于修复当前讨论的 issues 。
切换到新分支之后,应从源码修改,而不是从 build 后的文件中修改。在修改时,应注意使用 最少修改最少影响范围符合原代码格式规范等规则,修改之要查询仓库中有没有测试用例,如果有,应该先把测试用例跑通,避免对之前的功能造成问题。

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

说着说着我已经 Clone 了代码并修改完了,当我尝试编译的时候:
2022-12-09-17-40-59
2022-12-09-17-36-37

先发制人

我已经很难了,为什么还要这么难!
算了,直接告诉他应该在哪改吧。
2022-12-09-17-44-13

后来

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

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

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

posted @ 2022-12-12 15:10  程序媛李李李李蕾  阅读(846)  评论(0编辑  收藏  举报