先看出事的那一刻
2026 年 7 月 26 日,AI 导师接上第三方模型,跑了一遍冒烟测试:五项检查全部失败,报错是 401。
第 11 课讲过它的原因:运行环境里一个同名的变量,悄悄盖掉了配置文件。这节课看的是另一面:这一次,前后不到两分钟就找到了原因。靠的是两样提前准备好的东西:
- 一组冒烟测试,第一时间告诉你"坏了";
- 启动时打印实际生效的配置:请求发往哪个地址、用哪个模型。日志里写着请求发往官方地址,而不是配置文件里的第三方端点,这就告诉你"坏在哪"。
再加上加载配置的那个库,自己打出一行提示,说只注入了 2 个变量,而文件里写的是 3 个,原因一下就对上了。
要是没有这两样,看到的多半只有一句"密钥不对",排查很可能要从重新复制密钥开始。
这节课要回答的是:Agent 上线以后,怎么知道它哪里答得不好?改了之后,怎么确认是真的变好了?
装备几个词
为什么要懂
AI 替你做了
日志、测试脚本、反馈按钮,AI 都能顺手加上,代码量不大。
留给你的
决定记下什么、拿什么当标准答案、反馈怎么变成下一次的考题。这决定了你能不能看清它在做什么,以及改了之后是变好还是变坏。
不懂的代价
看不见,就只能凭感觉改提示词:这次好像好了,下次又坏了,你分不清是改动起了作用,还是模型碰巧答对。
日志:记下实际发生了什么
Agent 的日志,至少要回答三个问题:
| 要回答的问题 | 记什么 | 知识库 Agent 的做法 |
|---|---|---|
| 它是在什么配置下运行的? | 启动时实际生效的地址、模型、读进的配置项(不记密钥) | 启动时打印知识库的名字和模型 |
| 这一次它做了什么? | 问题、调用了哪些工具、读了哪些文件、用了多久 | 检索轨迹在界面上实时展开,答完收成一行,可以点开回看 |
| 用的人觉得怎样? | 有帮助、没帮助,没帮助的原因 | 每条回答下面有 👍 和 👎,👎 可以补一句原因 |
几条从这个项目里学到的记法:
- 好坏都收:只收 👎,就分不清没点的回答是"答得好"还是"懒得点",算不出质量。
- 删除只做标记:用户删掉的对话,往往正是答得差的那些。真删了,最该分析的样本也一起没了。
- 同一个数字,只用一个来源:界面上的用时,用前端自己的计时;SDK 报的用时只在结束时才到,两个来源混着用,数字会在收尾时突然一跳,看着像 bug。SDK 报的耗时和用量照样存下来,只用来分析,不显示。
- 记到能直接定位原因:被点了 👎 的、拒答了的回答,进了待处理清单,会被标上原因。搜了却一个文件都没读到,标"缺文档",该补资料;读到了文件却还是拒答,标"可能是提示词",该查提示词。
评测:先有标准答案
知识库 Agent 在写代码之前,先写好了 25 道评测题:15 道正样本,答案在资料里,必须答出来,还要标对出处;10 道负样本,资料里没有,必须拒答。通过标准是正样本 90% 以上、负样本全部拒答。以后每次换模型,都要重跑一遍。
题出错了,评测会骗人。这个项目踩过两次:
- 第一次实跑,三道负样本的内容其实就在资料里:资料里收的是论文全文的译文,比当初盘点用的摘要丰富得多。模型照着原文答对了,反而被判成"泄漏"。
- 两天后再查,10 道负样本里有 6 道的主题,资料里都提到过。这些题测的不是"会不会拒答",而是"这一次挖得够不够深",同一道题会在通过和失败之间来回跳。
所以后来立了一条规矩:写负样本之前,先在资料全文里搜这个词,一处都搜不到才入库。
判定方式也改过一次。第一版草稿把要点写成了整句,可模型每次措辞都不同,整句比对注定失败;写判定程序时就改成了"必须命中的几个要点",每个要点还允许几种写法,比如"截断"或"truncated"出现一个就算。
闭环:反馈要变成下一次的考题
只把问题列出来,清单只会越来越长,下周再看,分不清哪些是新的、哪些跟进过。知识库 Agent 后来把处理一条 👎 定成四步:
- 写标准答案:维护者写下给用户的正式答复,再列出"必须命中的要点",一行一个。一个要点都不填,就不让提交:没有判定依据的考题永远会通过,比没有还糟。
- 改:按清单上的原因,补资料或者调提示词。
- 验证:把这道题拿去跑评测;想用肉眼看,就开一个新会话重问。接着旧对话问,会带上之前的上下文,验的就不是改动本身了。
- 标记已处理:评测跑通了,再手动标记,这一条才从清单上消失。
这个流程的起点,是站长自己的一句话:给用户的正式答复,就应该拿来当测试集。AI 第一次还理解偏了,把正式答案直接写进了资料;站长指出本意是拿它当测试的标准,这才撤掉,改成现在的做法。第一次跑,两道题过了一道;没过的那道漏了"轨迹发散"这个要点,说明它还没修好。评测如实指出这一点,正是它该做的事。
深潜为什么不把 AI 答得好的回答直接存成标准答案+
最省事的办法,是把用户点了 👍 的回答直接存成正样本。知识库 Agent 一开始也是这么做的:点过 👍 的回答,列为正样本的候选。后来又加了一条更可靠的路,也就是上面的标准答案:
- 点了 👍 的回答,只说明模型这一次碰巧答对了;维护者写的标准答案,才是确认过的期望。
- 要点要人手填,不让机器从答案里抽:机器抽出来的关键词很可能抽错,而这个项目已经被坏题坑过一次。
另外,维护者私下回复提反馈的人,只帮了一个人一次;把缺的原始文档补进资料,下一个问同样问题的人,才能直接得到带出处的回答。
本站自己也在用同一个办法:快测题曾经能靠"挑最长的选项"猜对,修好之后,正确选项比最长的错误选项长一半以上就构建失败,这条规则写进了构建检查;自动驾驶分区去掉课件代号之后,正文里再出现代号,构建就直接失败。一次判断,写成一条自动检查,下次就不用再靠人记得。
找茬
下面是知识库 Agent 的第一版评测题草稿(节选)。写判定程序和第一次实跑时,这里面的问题陆续暴露出来。找出会让评测给出错误结论的地方。
这段 YAML 里埋了 4 处问题。点击你觉得有问题的行,至少找出 3 处再揭晓。
·第 2 行中危
只核验了"资料里有",没核验"资料里没有"
正样本的每个要点都在资料里搜过,负样本的"资料没讲"却没有搜:依据是当初盘点资料时看的摘要。第一次实跑,三道负样本就被发现资料里其实有。核验要两边都做。
该问的话:每条负样本的"资料里没有",是在全文里搜出来的,还是凭印象判断的?
·第 7 行中危
拿整句话当判定标准
模型每次措辞都不同,"相比原始 diffusion policy 减少 10 倍,仅用 2 步"这样的整句几乎不可能原样出现,答对了也判不过。写判定程序时就改成了必须命中的几个要点,每个要点允许几种写法。
该问的话:这道题是比对整句话,还是比对几个关键要点?同一个意思换一种说法,还能判对吗?
·第 11 行中危
判不了的题,资料里还其实有
"泛泛作答不算通过、需人工复核":自动评测判不了,每跑一次都要有人看。而且 QIM 的内容就在资料里的论文译文中,模型照着原文作答,反被判成"泄漏"。这道题后来换掉了。
该问的话:这道题能不能自动判定?它的"资料里没有"在全文里搜过吗?
·第 15 行高危
"完全未提",其实提了
第一次实跑就发现,资料里的一篇论文译文讲到了 DPO。模型答对了,却被判失败:坏的负样本会惩罚正确的回答,把你往"让它少答一点"的方向推。后来的规矩是:先在全文里搜,一处都没有才入库。
该问的话:这个词在资料全文里搜过吗?搜出几处?
查看代码与答案(4 处问题)
1 # 知识库 Agent 的第一版评测题(eval/cases.yaml,7 月 19 日,节选)
2 # 所有 expect_points 关键事实已于 2026-07-19 逐条 grep 语料核验
3
4 - id: pos-01
5 question: DiffusionDrive 为什么要做 truncated diffusion?效果如何?
6 expect_points:
7 - 截断扩散减少去噪步数(相比原始 diffusion policy 减少 10 倍,仅用 2 步)
8
9 - id: neg-02
10 question: MOTR 的 QIM(Query Interaction Module)训练策略具体是怎么设计的?
11 note: 边界题——语料有 MOTR 译文和导读,但只到"解决什么问题"层面,QIM 训练细节未展开;若模型用译文泛泛作答不算通过,需人工复核本条判定
12
13 - id: neg-08
14 question: DPO 和 RLHF 相比有什么优势?
15 note: TrajHF 只讲 RLHF(reward model 路线),DPO 语料完全未提- 第 2 行 · 中危 · 只核验了"资料里有",没核验"资料里没有":正样本的每个要点都在资料里搜过,负样本的"资料没讲"却没有搜:依据是当初盘点资料时看的摘要。第一次实跑,三道负样本就被发现资料里其实有。核验要两边都做。 该问的话:每条负样本的"资料里没有",是在全文里搜出来的,还是凭印象判断的?
- 第 7 行 · 中危 · 拿整句话当判定标准:模型每次措辞都不同,"相比原始 diffusion policy 减少 10 倍,仅用 2 步"这样的整句几乎不可能原样出现,答对了也判不过。写判定程序时就改成了必须命中的几个要点,每个要点允许几种写法。 该问的话:这道题是比对整句话,还是比对几个关键要点?同一个意思换一种说法,还能判对吗?
- 第 11 行 · 中危 · 判不了的题,资料里还其实有:"泛泛作答不算通过、需人工复核":自动评测判不了,每跑一次都要有人看。而且 QIM 的内容就在资料里的论文译文中,模型照着原文作答,反被判成"泄漏"。这道题后来换掉了。 该问的话:这道题能不能自动判定?它的"资料里没有"在全文里搜过吗?
- 第 15 行 · 高危 · "完全未提",其实提了:第一次实跑就发现,资料里的一篇论文译文讲到了 DPO。模型答对了,却被判失败:坏的负样本会惩罚正确的回答,把你往"让它少答一点"的方向推。后来的规矩是:先在全文里搜,一处都没有才入库。 该问的话:这个词在资料全文里搜过吗?搜出几处?
快测
1. 改了提示词之后,怎么判断 Agent 是变好了还是变坏了?
你可能是这么想的:感觉会骗人:这一次碰巧答对的,下一次未必;原来答对的题有没有被改坏,你也看不见。
对了。有标准答案,才知道是改对了还是碰巧。知识库 Agent 每次换模型都要重跑一遍。
你可能是这么想的:它会顺着你说;而且它评的是提示词写得好不好,不是回答有没有变好。
变好还是变坏,让评测题说话。
查看选项与答案
- A. 多问它几个问题,看看回答是不是顺眼了一些——感觉会骗人:这一次碰巧答对的,下一次未必;原来答对的题有没有被改坏,你也看不见。
- B. 把评测题跑一遍,和改之前的通过率对比(正确)——有标准答案,才知道是改对了还是碰巧。知识库 Agent 每次换模型都要重跑一遍。
- C. 让 AI 自己评价新提示词比旧的好在哪里——它会顺着你说;而且它评的是提示词写得好不好,不是回答有没有变好。
变好还是变坏,让评测题说话。
2. 你要写一条负样本:问某项技术怎么实现,预期 Agent 拒答。入库之前最该做什么?
对了。这是后来定下的规矩。主题只要在资料里出现过,这道题测的就不是拒答,而是这一次挖得深不深。
你可能是这么想的:第一版就是这么判断的:三道负样本的内容其实藏在论文全文的译文里,模型答对了反被判失败。
你可能是这么想的:它没读全文,回忆出来的只是猜。资料里有没有,要靠搜索。
"资料里没有"也要核验,而且要在全文里核验。
查看选项与答案
- A. 先在资料全文里搜这个词,确认一处都搜不到(正确)——这是后来定下的规矩。主题只要在资料里出现过,这道题测的就不是拒答,而是这一次挖得深不深。
- B. 看一眼资料的目录和摘要,确认没有专门讲它的章节——第一版就是这么判断的:三道负样本的内容其实藏在论文全文的译文里,模型答对了反被判失败。
- C. 让 AI 回忆一下,资料里有没有提到过这项技术——它没读全文,回忆出来的只是猜。资料里有没有,要靠搜索。
"资料里没有"也要核验,而且要在全文里核验。
3. 用户点了"没帮助",你补了一份文档。什么时候能把这条反馈标成"已处理"?
你可能是这么想的:放进去,不等于它就能搜到、答对。没验证过就标处理,清单上的数字好看了,问题可能还在。
你可能是这么想的:回复只帮了一个人一次。问题本身有没有修好,还得靠评测说话。
对了。补了不等于答对了。跑通了,才说明这次改动真的起了作用;开新会话,是为了不让旧对话的上下文帮它作弊。
没有验证这一步,就不叫闭环。
查看选项与答案
- A. 文档放进资料目录、刷新了资料之后——放进去,不等于它就能搜到、答对。没验证过就标处理,清单上的数字好看了,问题可能还在。
- B. 回复了提反馈的那位同事之后——回复只帮了一个人一次。问题本身有没有修好,还得靠评测说话。
- C. 把这个问题写成评测题,开新会话跑通之后(正确)——补了不等于答对了。跑通了,才说明这次改动真的起了作用;开新会话,是为了不让旧对话的上下文帮它作弊。
没有验证这一步,就不叫闭环。
判断时刻
你的 Agent 上线一个月,收到 30 条“没帮助”的反馈。你有一天时间处理。AI 给了三种安排。
你会选哪一个?
考察:见效快,容易翻车
这 30 个问题多半能答好。可没有评测兜底,改提示词可能把原来答对的问题改坏,你却看不见;下个月,新的 30 条里也许就有被你改坏的。
考察:慢一点,越改越稳
知识库 Agent 就是这么做的:反馈按"缺文档""可能是提示词"打上标签,修好的问题变成评测题,跑通了才算处理完。代价是今天修不完 30 条。
考察:看得清,修得慢
数据多了,可用户在这一个月里继续拿到坏答案。日志应该从第一版就带上,而不是等出了问题再补。
先看得见(日志),再有标准(评测),然后每修好一个问题,就多一道考题。三样连起来,才是闭环。
三个选项各自的代价
- A. 逐条看反馈,改提示词,直到这 30 个问题都答对——考察见效快,容易翻车:这 30 个问题多半能答好。可没有评测兜底,改提示词可能把原来答对的问题改坏,你却看不见;下个月,新的 30 条里也许就有被你改坏的。
- B. 先按原因分类:没搜到的补资料,搜到了还答错的查提示词;每修一类,把对应的问题写成评测题——考察慢一点,越改越稳:知识库 Agent 就是这么做的:反馈按"缺文档""可能是提示词"打上标签,修好的问题变成评测题,跑通了才算处理完。代价是今天修不完 30 条。
- C. 先不改,补上日志和统计,攒一个月的数据再说——考察看得清,修得慢:数据多了,可用户在这一个月里继续拿到坏答案。日志应该从第一版就带上,而不是等出了问题再补。
先看得见(日志),再有标准(评测),然后每修好一个问题,就多一道考题。三样连起来,才是闭环。
带走
下次让 AI 做这件事时,问它
- 启动时把实际生效的配置打印出来:连的是哪个地址、哪个模型、读进了几项配置(不打印密钥)。
- 每次回答都记下:问题、调用了哪些工具、读了哪些文件、用了多久,存起来供以后分析。
- 先帮我写评测题:每条写清必须命中的要点和出处;资料里没有的题,先在全文里搜一遍,确认真的没有。
- 用户反馈的问题修好之后,把它写成一条评测题;评测跑通了,才算处理完。
自己验证
- 改提示词、换模型之后,先跑一遍评测,和改之前的通过率对比。
- 故意配错一个地址,看日志能不能让你在几分钟内找到它。
- 翻一遍反馈清单:标了"已处理"的每一条,都有一条对应的评测题跑通了吗?
看得见,才知道错在哪;有标准答案,才知道改对了没有。
