AI 猜错了接口返回格式之后,我开始怀疑喂给它的上下文

一次前后端联调的翻车,和一个我打算认真验证三个月的问题。

上个月做前后端联调,有个接口要适配到前端。

Swagger 文档是现成的,openapi.json 直接能拿到。我把需求、字段名、返回值怎么处理都跟 AI 说了一遍。

就差一样东西------接口实际的返回数据格式,我没给它。

不是因为它不在。它就写在同一份文档里,往上翻两屏就是。我当时就是懒得贴。

AI 写完,我扫了一遍:命名规范,注释齐全,try/catch 都没落下。看着挺像那么回事,直接刷新页面联调。

接口 200 是通的,瞄了一眼返回,数据也有。

但是控制台爆红。

那一个多小时

老实讲,接触 AI 编程之后我有点变懒了。

以前遇到报错,我会先看报错文件、看堆栈、猜想是哪一层的问题、去翻源码。现在我的第一反应是------把错误信息复制,粘给 AI,然后问"这是什么问题"。

那天我也是这么干的。

AI 开始读文件。读了一个,又读一个,跟前一个差不多,再读一个,还是差不多的。老规矩了,它要把一堆长得几乎一样的文件全扫一遍才肯动手。

我给 Cline 开了最高权限,所有弹窗选项都勾了"允许",就是图省事。结果最常出问题的地方恰恰是------它准备自己打开 VS Code 的内部浏览器去调试,跳出来问你是否允许,我点了允许,然后它直接卡死了。

欲哭无泪。

只能取消掉,新开一个对话,把刚才说过的东西再讲一遍。

我们这边因为安全要求做了网络隔离,我自己买的模型用不了,只能用单位部署的模型。用的人多,响应也慢。

我不知道这是不是模型的问题,也可能是权限配得太满的问题,也可能就是我们网太差。反正那天就这么耗着,问了三轮,卡了两回。

最后实在没招了,我把 AI 关掉,自己下断点,一行一行看。

看到那几行的时候我愣了一下。

js 复制代码
// AI 猜的
const { data } = res
const list = data.list

// 实际返回的
// { rows: [...], total: 0 }

AI 猜返回体是 { data: { list: [...] } },实际返回的是 { rows: [...], total: 0 }。

一个多小时。就这?

让我后背发凉的不是这个 bug

我一开始的反应是"这 AI 不行"。

但多说两句,我就觉得自己这判断不对。

我潜意识里默认了一件事:信息不够的时候,它会停下来问我。

它没有。

它直接用最像的那个答案把空白填上了,然后用和正确答案完全一样的语气讲出来。

那天改完,我坐在那儿想了一会儿。真正让我不安的是另一件事:

我不知道它还在哪些别的地方,替我做过决定。

这次是因为控制台报错,我抓到了。那下次呢?如果它猜错的是一个边界条件、一条只在特定情况下才走的逻辑分支------可能要半年后才爆,甚至可能永远不爆,就那么错着。

我原来的解法,现在想想挺蠢的

我的第一反应很朴素:写份文档,让它每次都读。

后来才知道,Cline 官方就有现成方案,叫 Memory Bank------在项目里放六个 Markdown 文件:

bash 复制代码
项目根目录/
├── .clinerules
└── memory-bank/
    ├── projectbrief.md      # 项目简介
    ├── productContext.md    # 产品上下文
    ├── systemPatterns.md    # 系统架构模式
    ├── techContext.md       # 技术栈与开发环境
    ├── activeContext.md     # 当前开发状态
    └── progress.md          # 进度跟踪

思路挺清楚,我打算拿它当起点。但心里一直有个疑问没解决:

这六个文件,每一个都真的有用吗?

我的直觉是,有些内容它本来就能从代码里读出来,我写进去是白费力气。但我拿不出证据,纯粹是感觉。

直到看见一份实验

前几天查资料,翻到苏黎世联邦理工今年二月的一篇论文,专门测这些"给 AI 看的项目文档"到底有没有效果。

结果有点反直觉:

上下文文件来源 任务成功率变化
AI 自己生成的 下降约 3%
人写的 仅提升约 4%
推理成本 上涨 20% 以上

写了半天,效果约等于零,还更贵。

论文里有句话解释得很直白:详细的代码库概览和已有文档大量重复,AI 本来就能读到你的代码,你复述一遍,只是在浪费它的注意力。

我第一反应是,那还写什么。

但回头想想那天的事,我发现问题不在写多写少------

我一直在写"我觉得它该知道的东西",而不是"它真的不知道的东西"。

这两件事的重合度,可能低得可怕。看那个"下降 3%",如果写进去的全是代码里已有的信息,那我干的事不是提供上下文,是制造噪音。

所以我打算花三个月,验证一下该删什么

这事我不想从网上抄答案。网上讲这个的基本是两类人:一类做小 demo 的,用 Cursor 十分钟写个待办事项,但真实项目没这么干净;一类是后端视角,讲 Java 微服务、模块依赖矩阵,跟前端完全是两回事。

前端有前端自己的麻烦。组件怎么组织,状态放哪儿,样式怎么约定,哪些祖传代码碰不得------这些没人讲。

我手上的项目正好合适。一个真实的企业级后台,有历史包袱,有复杂业务。它不是 demo,它就是那种你一次性讲不清楚的项目。

方法很笨:拿 Memory Bank 那六个文件当对象,一个一个往下删。删掉之后看它表现是真变差了,还是压根没变化。

说不定删到最后,六个文件活下来两个。

顺便说下我的约束,它会影响这件事的节奏:每天晚上尽量抽出一两个小时。 所以我不做宏大的东西,目标是每期推一小步,三个月收尾。

一个前提条件

我用的不是云端 AI。前面提过,我们这边做了网络隔离,只能用单位部署的模型,通过 VS Code 的 Cline 插件调。

意味着用不了 Cursor 那种云端代码库索引,也用不了很多要联网的能力。它对项目的全部了解,基本只能靠我喂。

我不能指望工具替我理解项目,通读整个工程不敢想,任务还没开始估计就挂掉了。喂什么,是我自己的责任。

这话听着像常识,但我以前的做法是"讲需求,讲背景,多喂就对了"。那天之后我才明白,光多没用,得喂对。

接下来

第一步我打算干件蠢事:把过去半年跟 AI 说过的"开场白"全翻出来,看看我到底在反复讲什么。

我有个猜测------那些我每次都讲的,可能恰恰是最没必要讲的。

要是猜对了,那这半年我有一半力气就真的白花了。

后续每一步的进展和翻车,我都会记下来。三个月后应该能出一份"真正必要的上下文清单"。


如果你也遇到过下面这几种情况,大概能在这个话题里找到同感,也欢迎说说你踩的坑:

  • 每次开新会话,都要重新交代一遍项目
  • 写了规则文档,它该错还是错
  • 不确定哪些信息该写,哪些纯属废话
  • 它写了段看着没问题的代码,跑到线上才炸
相关推荐
对空六课2 小时前
Vue 组件曝光埋点为什么会重复触发?去重方案与实现思路
服务器·前端·算法·数据分析
isha2 小时前
Univer拆解——从类与方法的视角分析
前端·javascript
羲云2 小时前
不想再让用户手写 Markdown:零依赖的所见即所得编辑器最新版发布 V0.2.0
前端
deli0072 小时前
限流算法到底怎么选?令牌桶 vs 漏桶 vs 滑动窗口 3 种同屏实测
前端
风花一世月2 小时前
🏫 我把一整座校园的数据大屏塞进了一个 HTML 文件(零构建、双击即开,在线直接玩)
前端
变与不变8062 小时前
GET请求知识详解
前端·javascript
智塑未来2 小时前
网站建设哪家服务好?把交付前、交付中、交付后拆开看
大数据·前端
百度一下吧2 小时前
H5 应用开发:Android、iOS 与鸿蒙安全区域适配实战
前端