这是AI原生项目系列的第二篇。
上一篇《AI原生中小型项目落地指南》在架构部分提到一个重要的观察:评估层的缺失,正是中小项目最常见的隐性债务。
这篇展开一个具体的问题:怎么把项目的评估层搭起来。
恰好我手上有在跑的实操,后面挂上了生产闭环案例供探讨。
目 录
01评估层的数据飞轮是怎么运转的
02参考架构
03工具选型及实施步骤
04落地四步
05五条易踩坑的原则
01评估层的数据飞轮是怎么运转的
Anthropic 的工程博客给评估的工程定义是:给 AI 一个输入,然后对它的输出施加打分逻辑,度量成功与否。
这里有三个容易搞混的东西,把它们串起来正好是这个流程的闭环。
轨迹记录:它管系统刚才具体做了什么,每次运行的提示词、工具调用、成本、延迟,都完整落档。
评估:它主要管输出算不算好,一般是数据集加评估器打分,以离线为主。
监控:回答的问题是生产环境现在健康吗?管的是线上实时监控、异常检测、用户反馈。
三件套的闭环是这么跑的:监控发现的线上新失败,回流成离线测试用例,再进入回归集。
评估层数据飞轮闭环
与传统软件测试的区别
传统软件是确定性的,单元测试通过就等于行为正确。
AI系统的输出是概率性的:同一段提示词跑两次,结果大概率不同;同一个模型换个月度快照,行为漂移是常态。
这就带来了三个传统测试管不了的问题:
回归不可见:模型供应商静默更新快照,线上质量悄悄掉10%(Voiceflow换gpt-3.5-turbo后端后的实测),生产端可能压根没感觉。
改进不可判:改提示词的效果好不好全靠感觉,不可量化。
分数不可外推:在公开基准测试里考高分,不等于跑在业务场景里好用。
02参考架构
评估层的参考架构是一条流水线:
评估层参考架构流水线
1、数据集:核心是黄金集,就是真实用例加期望结果,再配上保留集和回归集。
最小形态可以做成一张电子表格,或者在仓库里放个YAML加JSON,20到50条起步。
我的实盘里,回归集放在对应生产域的决策文件中。42条用例,正好落在20到50的区间里,每条对应一次历史事故现场。配套一条纪律:期望结果一律用独立真值,字面量、人工校对的对照表都行。禁止拿被测逻辑重算一遍当期望值,因为测试永远自洽。
事故锚对照表
2、评估器分三类:确定性断言、大模型评审、人工评审;打分方式分单条打分与成对对比。最小形态是一个Python断言脚本,评审后置。
评估器的形态我做过一次裁剪。
立项时两个选项:脚本断言,还是让AI把场景重放一遍。
我用的脚本断言,理由有三:
确定性,同输入同结果,红了能定位到具体哪个文件;速度快,秒级,撑得起门禁的时延;能进CI。AI回放每跑一次烧一次token,结果还不稳定。
这样做的灵感来自Anthropic的一处分享:优先用确定性评分器。
代价是关键词和结构断言只能证明配置在场、形态正确,证明不了系统实际行为合规。语义这一层的最终保底是人,不过日常跑回归我一般不参与,全部丢给机器。
3、门禁:合并请求触发评估,通过率下降就阻断合并。最小形态是GitHub Actions加命令行工具的非零退出码,再配上分支保护规则。
我的触发判据是一份文件清单:宪法文档、规则、技能配置、钩子脚本、Makefile、CI配置等等。
凡改到清单里的文件,提交时自动跑一遍快速档,红了提交直接被拦。
快是硬约束:快速档必须秒级跑完,慢了就会被习惯性地no-verify绕过,门禁形同虚设。
门禁拦截复演
4、可观测:生产轨迹记录、成本与延迟监控、漂移检测,最小形态是先用平台的免费档。
这里我没有买平台,直接用留痕记录。
以我日常采集任务举例,每次运行强制落三样:每个源采完落一份工件清单,带行数;每天一份运行快照;异常和夜间事件记观察日志。
留痕的价值体现在项目出现异常时。比如晚间跑无人值守,任务失败了,没报错、没通知。回放痕迹即可快速定位异常。它的作用相当于一个动态日志,随时记录人不在场时,机器自己干活的轨迹:
OBS夜间事件表
5、反馈回路:线上失败和事故在48小时内转成永久回归用例。最小形态可以做成一个制度:每周人工抽检10到20条轨迹。
这一块我直接把它做成了制度,四个部件:
事故一周内必须登记进台账;台账只增不改,登记写错了也原样保留再记一笔;销账的前提是这桩事故已经固化成断言,断言号写进台账,触发器强制,缺一步销不了账;超期未处理,巡检自动报警。
时限设置上我没有用48小时,按机器兜底7天处理。
一条红项实录:9月16日首次巡检报了一项红,台账自动登记。核实下来是巡检自己的判定错了,把配置模式当成了字面路径去跑磁盘任务。处置是校准判定、销账留痕,第二天复巡标绿。
监控自己也会误报,误报同样要走完整流程:
巡检红绿对照
台账实拍
03工具选型及实施步骤
工具选型
promptfoo:开源命令行工具,MIT许可,开源版全功能免费。一行命令装好,YAML定义评估,官方提供GitHub Action,评估失败以非零退出码阻断合并。2026年3月加入OpenAI。
Langfuse:开源核心MIT许可,可自托管,生态最热。自托管无限免费;云版免费档每月5万单位,Core档每月29美元不限用户。覆盖轨迹、提示词版本、数据集、实验。2026年1月被ClickHouse收购。
DeepEval:Apache-2.0许可,18,367星。框架全免费,平台版每月200美元起步。pytest式评估,断言直接进持续集成,内置40多个指标。
Arize Phoenix:ELv2许可,开源版全免费,AX Pro每月50美元。OpenTelemetry原生,本地装完即用。2026年8月被Dynatrace以9.15亿美元收购。
RAGAS:Apache-2.0许可,全免费。RAG四指标专用,仓库自2026年2月后无提交,长期底座存疑。
OpenAI Evals与Graders:开源框架加API,API按用量计费。已深度使用OpenAI生态的团队顺手。
中小团队的对冲办法有两个:一是用能自托管的开源核心;二是数据集以纯文本格式存在自己仓库里。
04 落地四步
Step 1:冷启动黄金集。
从真实失败、用户工单、自己踩过的坑里攒20到50条用例,每条含输入和期望结果。项目小的话,电子表格就行。
每条写一到两条确定性断言:结构校验、关键词、数值容差。
确认标准:20条以上用例可一键重跑,通过率有基线数字。
Step 2:接持续集成,建门禁。
promptfoo或DeepEval进GitHub Actions,合并请求一碰提示词目录,就跑前后对比。
命令行非零退出加分支保护,变更拦截到这一步就有了闸门。
确认标准:一次故意注入的坏提示词被持续集成拦住;确定性套件单次运行成本低于0.1美元、时间低于5分钟。
Step 3:上评审模型,开反馈回路。
选一到两个断言覆盖不了的失败模式,写评分细则型评审,二值优先;用30到50条人工标签校准,看真阳性率与真阴性率。
生产这边每周人工抽检10到20条轨迹,事故48小时内转成回归用例。
确认标准:评审与人工一致率超过85%,以真阳性率与真阴性率口径计;回归集不少于40条,其中至少5条来自生产。
Step 4:上观测,做投入产出复盘。
Langfuse免费档或自托管补轨迹与提示词版本管理,加一个漂移指标,比如输出分布或通过率的滚动均值。
用成对对比做一次真实的模型或提示词升级决策。
确认标准:从事故到永久回归用例的时长缩短到天级。
跑评估的频率,业界的做法基本一致:每次合并请求跑确定性套件,每晚跑全量,评审管道降频到每周或变更时。
人工这边每周看10到20条异常样本。
预算上限是标配,开源工具EvalForge甚至内置了最大成本参数,省去评估成本跟着合并请求膨胀。
05五条易踩坑的原则
1、工具先行。先买平台再攒用例,数据在哪、失败长什么样都不知道,工具只会加速混乱。
2、拿公开基准或通用指标当业务评估,上通用指标比没用还糟。
3、评审模型没校准就上岗。不看真阳性率和真阴性率,全答通过的评审也能有95%一致率的假象。
4、评估集建完不更新。不从生产回流,三个月后用例分布漂移,新评估测旧世界。
5、将护栏或对话框中的反馈按钮当评估。护栏是同步拦截,反馈按钮是稀疏信号,都不可替代离线回归集。