ChatGPT 和我写了个小工具:Pipe2GPT
开通了尊贵的 ChatGPT Plus 之后,在平时做些控制台操作的时候,就多了个习惯——把各种控制台内容投喂给 ChatGPT,看他如何反馈。结果还是不错的,经过适当的 Prompt 设计,ChatGPT 不但能够读懂这些输出内容,更可以提供进一步排查或者解决问题的建议。
懒惰是进步的动力——我连拷贝黏贴都懒了,还是想 ChatGPT 帮我写个小工具吧。按照官方客户端情况来说,Python 才是一等公民,然而为了方便分发,而且不是自己动手,我选择了高大上的 Golang。
实现思路
其实起初我是想模仿 kubectl
,用 krew 插件的形式写个 gpt-diag 子命令,例如 kubectl gpt-diag pod xxxx
,直接将 Describe Pod 内容输出,结合一个关于诊断 Kubernetes Pod 信息的 Prompt 来对某种对象,于是我让 ChatGPT 使用 Cobra 给我生成一个这样的框架。有趣的是,生成途中,它根据我提供的这些对象名称,自动给这个程序加了个简介——一个 Kubernetes 检查工具。
命令行代码生成之后,要求它用接口、类的方式来定义各种检测行为,这里包含了 Pod、Node、Event、API Server、ETCD 等在 kubectl 命令中能够拿到输出的内容,每个类都有自己的 Prompt,利用 Kubernetes 获取信息,OpenAI Client 进行解答。
在这之后,我意识到一个问题:这玩法太传统了,我压根不需要替 ChatGPT 做这种前期工作,于是我删掉了这套代码,另起炉灶。
所以以下的工作步骤就四班顺滑了:
- 要求 ChatGPT 输出 Shell 脚本,用来初始化一个 Golang CLI 应用的目录结构。然后用 Goland 打开。
- ChatGPT 生成代码,读取环境变量中的 OpenAI API Key
- 加入一个配置文件,要求 ChatGPT 判断命令行参数,根据 JSON 格式,生成代码
- 继续生成代码,从管道读取输入,加入 Prompt,调用 OpenAI。
说起来还是比较辛苦的,实际上这些功能在 ChatGPT 4.0 中一个 Prompt 就差不多搞定了:
用 golang 编写一个 CLI 应用,它带有一个配置文件,格式如下: { “data”:{“k8s”: “简明扼要地用 Kubernetes 专家的身份判断一下这段输出有什> 么问题,要整齐列出问题对象和可能原因以及操作建议:”} } 这个命令行接受 –type 参数,参数值就是配置文件中的
data.[key]
。 另外这个命令还要从环境变量中读取 OPENAI_APIKEY 运行时,这个工具从管道接收其它应用输出的内容,根据从配置文件中取得的值作为 > Prompt,调用 OpenAI 的 API,获得反馈内容。
我这里测试的时候,只有模型选择不太合适,其它都可以直接进行调试。
生成代码之后,Debug 一下下,基本就 OK 了。
接下来又让他生成了双语版本的 README.md。以及一个用于 golang 交叉构建的 GitHub Action。
最后,这个非人产生的项目保存在了 https://github.com/fleeto/pipe2gpt
。
运行效果大致如下:
接下来我可能会在项目 README.md 里面写一句:本 REPO 仅接受 AI 生成代码,人工勿入,面斥不雅