最近的 ChatGPT 应该不用我多说了,不过避免有朋友还没收到相关推送,我还是简单介绍两句:
了解 ChatGPT
ChatGPT 是 OpenAI 的一个产物,是继GPT-3.5 系列的主力模型之一,这一模型可以与人类进行谈话般的交互,可以回答追问,连续性的问题,承认其回答中的错误,指出人类提问时的不正确前提,拒绝回答不适当的问题。进行了简单测试,包裹但不限于以下事情他都可以做:
- 让他给你写代码,甚至是 sql,甚至是设计架构
- 让他给你写文章,或者概括文章
- 让他给你写的代码生成 commit 消息,也就是你只管写代码他来描述你做的工作
- 让他给你重构代码
- 让他为你讲解代码
- 你可以随便使用中文或英文或其他语言和他对话,他能使用相当的语言回答你
- 各种问答,基本没有显得刻意,十分流畅…以下简单出几张图:问游戏身份转换解释代码给你的代码查 bug各种技能就不一一罗列了,当然,
我走过最深的路,就是你的套路
这句话充分说明了要是真玩起来,人都玩不过人,所以我们不要指望机器是先知,是上帝,回答有点不如意就认为他不过如此。
进入正题
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
根据 readme 和 star 来看,很酷很专业的样式,来,就你了。命令行方式,即可方便使用,也可方便集成到其他程序,还是 js 的,那就说明假设有定制化的需求也不怕掉头发啦。
运行结果# 安装npm i @abhagsain/ai-cli -g# 使用ai ask 来一段express示例
就是这么丝滑!然而并没有。
问题出现
万丈高楼平地起,蚱蜢先从 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
我的目光开始闪烁,笑容逐渐消失。我再次把我的目光注视着他,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),以及重现步骤给写上。
讨论问题
过大约一小时,收到了一封邮件,可能是广告但还是打开看了一下,没想到是他的讯息。我忍住不表现出自己的欣喜拆开它。看起来他让我选检查当前a-cli
的配置文件,然后又尝试选择一个 model。然而,我其实并不知道他在说些什么。只有这样,才能勉强大概可能知道他在说什么的样子,我好可怜……为了避免自己不理解他的意图而给到他错误甚至是尴尬的回答,所以我干脆都给你,请自取
:由于我使用的是 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 了!终于看清了他的面目,于是我不再懦弱,不再退让,我现在要义正言辞的告诉他:我知道引号一般都是在参数含有空格或特殊字符时才需要添加的,你不要忽悠我,并且我也是测试过的,我证明给你看,我要让你无话可说,渣男!
他无话可说,他开始自我怀疑 奇怪
,但是他还在试图挣扎,他给了我一条 curl 命令,让我添加参数看一下是不是 OpenAI 的问题还是他的 ai-cli 的问题。添加自己的 key 运行 curl?当然没有问题。但他又说要确保有 OpenAI 的使用权?这可唬到我了,不过不怕,我一并接招:直接告诉他,我的账号在网页平台上使用是没有问题的,以下所给 curl 请求的报文,请检查错误。
注:在运行别人给的命令时,请确保知道命令做的是什么事。如果在沟通过程中有敏感信息(例如 curl 报文中的 key),请做脱敏处理。
但是,总感觉这样的沟通不知何时是头,虽然他是渣男,但我们的共同目标都是解决问题,我决定伸出援手,向他提供更多更有价值的分析和参考问题都这么明显!你!你!你!。好家伙,这下终于承认了代码错误了吧~
解决问题
其实在为他提供信息的过程中,我已经基本找到问题的原因了。理论上,以 github 上的交流情怀而言,我应该主动修改代码解决问题,并向他提出申请把代码合并。提(PR)还是不提,这是个问题。因为他现在已经知道错误在代码中,并正在排查错误位置。虽然我已经从调试过程中知道了错误位置,但如果我要提 PR ,应使用完整的流程已避免一些问题显得蚱蜢是个正经人,例如 Fork 代码到自己的名下,并 Clone 到本地,然后从他的主分支新建一个分支,命名比较简洁并且能表示此分支专用于修复当前讨论的 issues 。切换到新分支之后,应从源码修改,而不是从 build 后的文件中修改。在修改时,应注意使用 最少修改
、最少影响范围
、符合原代码格式规范
等规则,修改之要查询仓库中有没有测试用例,如果有,应该先把测试用例跑通,避免对之前的功能造成问题。
提(PR)还是不提,这是个问题。因为我要提这个 PR,要处理的步骤还是蛮多的,如果我刚好提了 PR,他又刚好推送了修改,修改的地方又不相同时,这时候是要我的呢?他岂不是很没面子?要他的呢我岂不是没面子。
说着说着我已经 Clone 了代码并修改完了,当我尝试编译的时候:
先发制人
我已经很难了,为什么还要这么难!算了,直接告诉他应该在哪改吧。
后来
后来,我总算学会了如何去爱,可惜你早已远去,消失在人海……
不好意思刚走错片场了,后来在他修复的过程中,我使用本地已解决问题的版本成功使用了他这个 ai-cli 。
发现并不是我想要的样子,终究还是错付了。
?