AI 一口咬定接口用不了,翻案靠的是我懒得写备注
先说结论:我赢了。赢得不太体面,靠的不是技术,是我这个人懒。
事情是我和自己的 AI 吵了一架。它咬定服务器面板的建站接口不可用,还翻出笔记证明给我看。我咬定它错了,因为我记得一个细节。最后日志站在了我这边。
背景
我的服务器面板用的是 1Panel,站点、证书、反向代理都归它管。但平时动手的不是我,是 AI:Claude 和 Codex 轮着来,我只负责提需求和拍板。
1Panel 有一套 HTTP API,建站、签证书这些活理论上都能自动化。「理论上」三个字,是本文的全部剧情。
错误结论是怎么来的
前几天 Claude 想用 API 建一个新站。连发八次请求,八个 500。响应体是空的,零字节;服务端日志翻了个遍,连一行报错都没有。
它换了好几种请求格式重试,全都一样。最后它放弃了,让我去网页后台点了一下。三十秒,建好了。
到这为止都还正常,调不通先绕过去,没毛病。不正常的是它接下来做的事:它把「建站接口恒 500,只能走网页界面」写进了自己的知识库,还加了一句提醒,别被『以前成功过』的说法误导去重试。
它把自己的失败总结成了规律,从此深信不疑。
拿着错误笔记,去纠正写对了的人
今天上午,朋友发来一份他的 agent 整理的 1Panel 操作手册,里面明确写着:建站和签证书的接口可用。我让 Claude 把这份手册跟它自己那份合并。
合并是合并了。顺手,它把人家这条「证伪」了,批注写得理直气壮:此说法在本面板已两次证实不可用,以后再见到一律不重试。引用的依据,是它自己上周写的那条笔记。
我看着这个批注,越看越不对。我印象里明明用 API 建成过站。但它有笔记,我只有印象,讲道理讲不过它。
直到我想起后台那两条备注。
面板里有两个站点带着备注,一条写着「爱哔哔官网」,一条写着「StickS3 Gateway」。这两条不可能出自我手。我建站从来不填备注,一个字都懒得打。能把备注填得这么工整的只有 AI,而 AI 动这台面板,走的从来都是 API。
翻案
我把这个细节甩给它:你去查,后台明晃晃写着备注,我是不可能写备注的。
这回它去翻日志了。1Panel 把每次操作都记在数据库里,每条带着 user_agent。浏览器操作是 Mozilla 开头,API 调用是 curl 开头,而且没有登录用户名。是人点的还是程序调的,一查一个准。
07-08 /websites/ssl/obtain Success curl/8.14.1 # 证书,API 签发成功
07-17 /websites Success curl/8.14.1 # 建站成功,备注「爱哔哔官网」
07-20 /websites Success curl/8.14.1 # 建站成功,备注「StickS3 Gateway」
07-27 /websites Failed curl/8.14.1 # 一天连败八次的,是它自己成功过,不止一次。建站成功过两回,证书也用 API 签发过。干成这些事的是 Codex,它当时的会话记录还躺在我硬盘上。翻出来一看,当年发的完整请求、参考过的官方源码,全都在案。
真正的死因
拿成功的请求和失败的请求一对比,八个 500 的死因当场现形。
失败的请求里,域名是用 primaryDomain 这个字段传的。听着很合理,但建站接口的定义里根本没有这个字段,正确写法是一个叫 domains 的数组。也就是说,那八次请求在服务端眼里全都没带域名。
而服务端处理建站的代码里有这么一行:
primaryDomain = domains[0].Domaindomains 是空的,取第 0 个元素,数组越界,程序当场崩掉。框架把这个崩溃兜住了,对外只吐一个 500:响应体零字节,日志零记录。
所以从头到尾不存在「接口不可用」。是请求格式错了,把后端打崩了,而崩的姿势恰好毁尸灭迹,一点线索不留。Claude 对着一个毫无信息量的 500 猜了八次,然后给接口判了死刑。
正确的请求长什么样,官方源码里的结构体写得清清楚楚。除了 domains 数组,还有两个别处踩不到的点:taskID 要现场生成一个 UUID 带上;webSiteGroupID 这个字段名长得离谱,照源码原样抄,别自由发挥。这些都不难,难的是你得去读源码,而不是对着空响应瞎猜。
教训
技术上的教训一句话:500 加空响应加无日志,大概率是你把后端搞崩了。先怀疑自己的请求,再怀疑接口。
更值得写下来的是 AI 记笔记这件事。
错误结论一旦进了它的知识库,就会自我强化。它不是简单记错了,它会拿着这条笔记去反驳正确的信息,引用自己,语气还很笃定。这次要不是那两条备注,朋友那份写对了的手册就被它「纠正」成错的了。
还有一条:判断「以前到底成没成功过」,别问记忆,问日志。人的印象会糊,AI 的笔记会错,操作日志不会。user_agent 连是谁的手都分得清。
结尾
它后来把笔记改了,给那份被冤枉的手册恢复了名誉,还在新笔记里补了一句:下结论前先查日志。
翻案后修订出来的手册,我也放出来了:基础设施信息全部脱敏,MIT 协议。原版的安全流程照旧保留,补上这回实测可用的请求骨架和「500 空响应」的排查方法。想让自家 agent 学的,下载页在 fs.to/kQceB,也可以让 agent 直接抓原始文件。
至于我,赢是赢了。复盘下来,我对这场胜利的全部贡献,是多年来坚持不填备注,逼得 AI 只能自己动手,从而留下了人证。
懒也是一种可审计性。
COMMENTS 留言
READING MEMORY CARD…