周五终端复盘:把 AI 的错误变成下周的回归测试
周五收工前,先收集本周被你纠正的回答
我不靠印象评价 AI 这一周的表现。周五留出半小时,只看那些让我改代码、补约束或者撤回提交的回答。目标不是给模型打分,而是减少下周重复纠错的次数。
下面假设你在 Git 仓库根目录,使用 Bash,并已安装 curl、jq 和 Python。先建立复盘目录,再查看最近七天的修改:
mkdir -p .retro/cases .retro/runs — git log --since='7 days ago' --oneline --no-merges
挑三个确实造成返工的案例。每个案例只记录输入、错误输出、正确结果和影响;不要把整段聊天倾倒进仓库。日志、客户数据和密钥先脱敏,终端历史也别当保险箱。
把字符串 false 的误判缩成一个样本
假设本周最烦的错误是:AI 把配置字符串 false 解释成开启。先别改一大段提示词,把问题缩成一句能够独立重放的请求,并明确默认值。这样才能判断修复到底改变了什么。
printf '%s\n' '只返回一个 JSON 对象,不要解释或代码围栏。配置规则:字符串 true 表示开启,字符串 false 表示关闭,缺失值默认关闭。输入为字符串 false。输出字段只能是 enabled,值必须是布尔值。' > .retro/cases/false-string.prompt.txt
printf '%s\n' '{"enabled":false}' > .retro/cases/false-string.expected.json — 这里的期望结果由业务规则决定,不让另一个模型充当裁判。真实项目还应补上 true、缺失值、空字符串和非法值,但先把一个失败样本跑通。
用同一个入口保存原始响应
我通过 Fluxo 接入时,只维护一个密钥和一个基础地址。下面可以用 Claude Sonnet 5 做首次重放,再用 DeepSeek V4 Pro 复核;模型参数填写账户中对应的实际标识,不要直接猜展示名称。 — export FLUXO_BASE_URL='https://api.fluxorelay.com'
read -r -s -p 'Fluxo 密钥:' FLUXO_API_KEY; printf '\n'; export FLUXO_API_KEY
read -r -p '实际模型 ID:' FLUXO_MODEL; export FLUXO_MODEL
jq -n --arg model "$FLUXO_MODEL" --rawfile prompt .retro/cases/false-string.prompt.txt '{model:$model,messages:[{role:"user",content:$prompt}]}' > .retro/cases/false-string.request.json
curl --fail --silent --show-error "$FLUXO_BASE_URL/v1/chat/completions" -H "Authorization: Bearer $FLUXO_API_KEY" -H 'Content-Type: application/json' --data-binary @.retro/cases/false-string.request.json -o .retro/runs/false-string.response.json
curl 如果失败,先停下来查鉴权、限流或网络,不要继续读取上一次留下的响应,更不要把基础设施故障记成推理错误。
让断言判定失败,而不是凭肉眼看着差不多
下面的断言同时检查 JSON 可解析、字段完整和布尔值正确。模型如果返回字符串 false,或者夹带解释,也应该失败。
jq -e --slurpfile expected .retro/cases/false-string.expected.json '.choices[0].message.content | fromjson | . == $expected[0]' .retro/runs/false-string.response.json
退出码为零才算通过。这只是输出契约测试,不代表项目里的配置解析代码已经修好;后者仍要加入项目自己的测试套件。不要让一次漂亮回答替代真实代码验证。
每次只修改一个变量,再重复三次
把错误分成四类,下一步动作会清楚很多:
- 如果输入缺少关键业务规则,就补充那条规则,并保留修改之前的失败样本。
- 如果上下文混入已经废弃的接口,就删除过期材料,并记录上下文来源与版本。
- 如果输出结构不符合调用约定,就增加解析断言,而不是继续依赖人工检查。
- 如果同一输入仍然反复答错,就保持请求不变,再比较另一个模型的表现。
每次只改提示词、上下文或模型中的一项。修改提示词后,重新执行生成请求、调用接口和断言这三步;固定请求再跑三次,并分别保存响应。三次通过只能说明暂未复现,不能证明错误已经消失。
Fluxo 按实际 token 计费,缓存读取和写入也计入,没有月费。查看响应中的 usage,若返回缓存明细就一起留存;比较重试成本时,不要只数请求次数。
把周报收束成一个可以合并的提交
最后只写三件事:本周最贵的错误是什么、根因证据是什么、哪条自动检查能够阻止重演。原始响应留在本地,提交前检查请求文件是否含有敏感信息。 — git status --short .retro
git add .retro/cases/false-string.prompt.txt .retro/cases/false-string.expected.json — git diff --cached
确认暂存区没有无关改动,再提交:
git commit -m 'test: record AI false-string regression case'
这套样本也能作为 Claude Code、Codex、Gemini CLI 或 OpenAI SDK 工作流的验收材料。如果你想沿用这些命令,可以创建一个 Fluxo 账号。排查接入问题时,可在登录后的联系页面留言;邀请他人付费产生的推荐分成,和模型质量复盘分开记录即可。