AI / Agent

统计会话里反复手敲的命令,把它们固化成几个本机脚本

1744 字约 6 分钟

摘要用 AI 助手开发项目时,发版、合并 PR、查线上数据、截图看页面这些流程每个会话都要重来一遍。我让助手先统计会话里的命令,再把重复最多的几类封装成脚本,并把过去踩过的坑写进部署前的检查里。

我现在写论坛项目,大部分时间是在和 AI 助手一起干活。用久了发现一件事,不同的会话里,总有一些操作在反复重来。发一个版要先等 CI,再备份线上数据库,打标签,等镜像构建完,部署,最后检查。每一步助手都要重新想办法拼命令,中间还夹着几次轮询。这既慢,又会白白消耗上下文。

于是我让助手回顾一下最近的会话,哪些事经常重复,能不能固化下来。

第一轮,先封装最明显的四件事

第一次整理凭的是对近期会话的回顾,找出了最固定的四类流程,做成了放在 ~/.local/bin 里的四个命令。

命令代替的手工流程
发版命令等 CI 通过,备份线上数据库,打标签,等镜像构建,拉镜像部署,检查是否健康、镜像版本和最新迁移是否对得上
合并命令开 PR,等 CI,合并,删分支,在独立工作区里运行时连工作区和它的临时数据库一起清掉
线上查询命令查线上状态,在线上库跑只读 SQL,以某个用户的身份调线上接口
建工作区命令从最新主干建一个工作区,配好独立的数据库和端口,装依赖,跑迁移

以前发一个版要 4 到 6 轮命令,中间夹着几次 sleep 轮询,现在一次调用,大约 3 分钟。

做这些脚本时有几个取舍。它们只放在我本机,不进仓库,这是我当时选的。使用说明写进项目的记忆文件里,这样每个会话一开始就知道有这些命令,不用重新发明。线上查询命令里的 SQL 走只读事务,写操作在数据库层面就会被拒绝,这样即使助手手滑也不会改到线上数据。

助手也如实告诉了我,哪些测过,哪些没有。线上查询命令的三个功能都在线上跑过,建工作区命令和合并命令的清理部分也用测试工作区跑通了。没有测的是真正开 PR 合并、真正发一次版,因为当时没有可发的改动,所以下次合并 PR、下次发版,就是它们第一次完整运行,出问题就直接改脚本。

第二轮,数一数而不是凭印象

四天后,我又让助手整理了一次,这次要求它用数据说话。它写了个小脚本,把上次整理之后约 30 个会话里的所有工具调用都提取出来统计,一共 9716 次,其中 8121 次是执行命令。

光看命令的名字没有用,排在最前面的是 grep、sed、python3、cat,这些是通用工具,不是重复的任务。它又把命令按任务归了类。上一轮的发版、合并、线上查询三个命令,已经用了一百多次,没有出过问题,不用改。真正还在反复手写的有三类。

重复的事次数以前的做法
在工作区里启动开发服务器,登录后截图看页面10 多个会话,127 次每次重写一个自动化浏览器脚本,登录、设置手机或桌面尺寸、截图,复制开发库也要手敲
插件的部署、看日志、看和改配置、查额度部署 24 次,日志 100 多次,配置 90 次,额度 49 次每次重新拼请求、去掉颜色码、给密钥打码
查“猜你想问”的效果5 个会话每次从日志和聊天导出里临时写脚本找触发记录

针对这三类,新增了一组命令,包括建工作区时可以连开发库的数据和上传的图片一起复制,后台启动开发服务器并等健康检查通过才返回,一条命令完成登录加截图并顺带打印浏览器里的报错,以及一组管理机器人插件的子命令。

把踩过的坑写进检查里

这组命令里我最喜欢的是插件管理里的一个子命令,它在部署之前先检查三件事。

插件是打成压缩包上传到机器人平台的,线上并没有记录“现在是哪个版本”。它的办法是拿线上插件的文件树和仓库的提交历史逐个比对,算出线上到底是哪个提交,以及这次部署会顺带发布哪些之前没上线过的提交。

更重要的是,如果这些提交里涉及状态文件的格式、定时任务的时刻,或者配置项的结构,它会单独提醒。这三类都是过去碰到过的。

  • 改了每天汇总的发送时刻,部署之后插件以为错过了整点,立刻补发了一条,在群里不合时宜地冒了出来。
  • 状态文件的格式变了,旧文件没有及时转换,部署后第一轮就报了错,一分多钟后才改好重载。
  • 插件订阅了论坛的新事件类型,而线上论坛还是旧版本,不认识这个类型,整个事件流就会因为请求被拒而停止。这一条是部署前人工核对时侥幸发现的,没有真的出事。

把它们写成检查,下次部署之前,脚本会先问一句“这次有这几类改动吗”,把原来靠记忆提醒的事,交给了脚本。

为什么没有做成 skill

我的要求里写的是“用 skill、脚本之类的封装好”,助手最后只做了脚本,没有做 skill。它的理由是,这些都是固定的命令,只要把命令名和用法写进记忆的索引里,每个会话一开始就能看到,再另做一个 skill,内容会重复,还多一层加载。

没测过的部分

这组新命令里,部署和改配置两个子命令没有实际跑过。当时插件已经是最新提交,没有可部署的内容,改配置会动线上,所以只检查了逻辑,没有执行。它们第一次真正运行,就是下次部署。

另外,我也没有把这些脚本公开,它们和我的服务器、数据库、账号绑得很紧,直接拿去用不会有效果。值得借鉴的是做法本身。

可以照着做的三步

先让助手统计最近会话里的命令和任务,而不是凭印象判断什么重复。再按任务而不是命令来归类,通用工具的次数多并不说明问题。最后把过去出过事故的地方写成检查,而不仅仅是把操作自动化。

评论