总结

AI回答得很好,是真的吗?我用19道题测出了真相

银行合规助手项目——Evals

2026-06-26

前两篇,我搭了一个会检索文档的 RAG 系统,又给它加上了”理解意图、调用工具”的 Agent 能力。 但一直有个问题没解决:这套系统到底好不好用?靠”感觉”是不可靠的。 这篇,我给它做了一次系统性的评估——用数字说话。

一、为什么”感觉好用”是不够的

搭完系统后,我测了几个问题,AI 的回答看起来头头是道,还标了条款来源。 我差点就满意了。

但仔细想想:

这些问题,靠随机试几道题回答不了。

AI 系统评估面临一个根本困难:你不能让它自己给自己打分。

就像让学生自己批改自己的试卷,大概率会比实际水平高一截。


二、我设计了三套测试

我准备了 19 道测试题,覆盖三种类型:

知识型(13道):问银行规定、条款、流程
查询型(4道) :查特定客户的账户信息
操作型(2道) :提交业务申请

还故意放了 2 道”模糊题”,比如:

“C002 客户最近逾期了,我想了解她现在账户的具体状态,另外逾期处理的规定是什么”

这道题同时包含”查客户信息”和”问规定”两层意图,用来测试系统在边界情况下的判断能力。


三、三张”体检单”

体检单 A:意图路由准确率

系统收到问题,第一步是判断”这是什么类型的问题”,再决定走哪条路。 这个判断错了,后面全是白费力气。

我用两种方式各跑了一遍,对比结果:

两种方式都答对了,但”工具调用”有一个隐情:它有 8 次没能原生识别, 靠代码自动切换到 JSON 解析模式才救回来。 所以 100% 是真实的,但不是因为工具调用完美无缺——而是因为兜底机制工作了。

唯一的失分题是那道模糊题(A01)。 两种方式都把它判成了”知识型”(只回答规定), 而我预设的正确答案是”查询型”(先查客户账户)。

这种模糊情况下,系统选了保守策略,没有标准答案—— 这是真实世界里 AI 系统的常态,不是 bug,是 feature。


体检单 B:检索命中率

对知识型问题,RAG 系统先去文档库里找相关内容,再用找到的内容生成回答。 如果找错了文档,再好的 AI 也没办法给出正确答案。

我测了 13 道知识型问题,看检索前 3 名里有没有正确文档:

Recall@3 = 12/13(92.3%)

唯一失手的是 K01:

问题:信用卡逾期之后利息是怎么计算的?

为什么会这样?因为”利息”这个词在贷款文档里出现频率更高, 向量检索被”利息”带跑了,没能区分”信用卡利息”和”贷款利息”的语义差别。

这是 embedding 模型的局限,不是程序 bug——它不够聪明,没法像人一样理解”信用卡”和”贷款”是两件不同的事。


体检单 C:回答质量打分

前两张单子可以用数学来算,但”回答质量好不好”是个主观判断,怎么量化?

这里用到了一个业界流行的方法,叫 LLM-as-judge(用 AI 给 AI 打分)

做法是:把”用户问题 + 标准答案摘要 + AI 实际回答”一起发给另一个 AI, 让它按三个维度打分:

关键设计:裁判和选手不能是同一个人

生成回答用的是 qwen2.5:7b, 打分用的是 gemma4-hermes——一个不同训练背景的模型。

为什么要这样?

如果让 qwen2.5 给 qwen2.5 的回答打分,会出现一个已知偏差, 学术上叫 self-preference bias(自我偏好偏差): 同一个模型倾向于给”自己风格”的答案打高分, 对其他措辞方式则打低分,哪怕内容一样好。

裁判和选手要”利益回避”,这和人类世界的道理是一样的。

结果(两次运行的平均)

平均准确性:3.54 / 5
引用率:    81%(有明确条款来源)
幻觉率:    16%(存在编造内容)

准确性 3.54 分不算高,但背后有规律可循:

检索质量直接决定了回答质量的上限。 找错了文档,AI 没有材料可用, 要么说”根据现有材料暂无规定”(准确但没用),要么开始”发挥”(不准确且有幻觉)。

16% 的幻觉率主要集中在这几道检索失败的题上。


四、一个让我印象深刻的细节

跑完第一遍,数据是:引用率 85%,幻觉率 8%。

跑完第二遍,数据是:引用率 77%,幻觉率 23%。

路由准确率和检索命中率两次完全一致——因为这两个是数学计算,可复现。

但回答质量的打分出现了漂移:幻觉率从 8% 跳到了 23%

这说明什么?

本地小模型做裁判,判断本身就不够稳定。 同一道题,今天打 3 分,明天可能打 4 分,不是因为答案变了,而是因为”裁判的状态”变了。

这是用本地模型做评估的真实限制,不应该回避:

路由准确率和检索命中率,可以放心用。 质量评分只能作为参考,看趋势而不是盯着具体数字, 跑 3 次取平均,再人工抽查几条,才算靠谱。

五、三张单子读下来,系统的问题在哪

看完三套数据,问题定位就清晰了:

意图路由 94-100% ✅ 基本没问题,模糊题是哲学问题
    │
    ▼
RAG 检索 92.3%   ⚠️ 1 道题检索跑偏,根因是 embedding 语义区分度不足
    │
    ▼
回答质量 3.54/5  ⚠️ 低分集中在检索失败的题,根因在上一层

三层是串联的。 路由判错,检索就针对错误的问题去找; 检索找错文档,回答就没有好材料;材料不对,回答自然不准。

所以改系统的优先级是:先修检索(换 embedding 模型,或调整分块策略), 检索质量上去了,回答质量自然跟着涨。


六、这套评估体系本身值得关注什么

搭完这套系统,我发现评估 AI 系统这件事本身,和搭 AI 系统一样有挑战

路由和检索可以完全自动化评估,因为答案是明确的——找没找到正确文档,意图判断对没对,这些有标准答案。

回答质量无法完全自动化,因为”好不好”本质上是人的判断。 LLM-as-judge 是个实用的妥协方案,但它把”主观判断”外包给了另一个 AI, 后者同样不完美,甚至在小模型场景下打分一致性明显变差。

目前业界公认的最佳实践是:自动评估 + 人工抽查配合。 自动评估负责覆盖面,人工抽查负责校准。 两者缺一不可。


尾声

从搭 RAG、加 Agent 能力,到现在这套评估系统, 代码量加起来不超过 600 行,跑在本机,不需要任何云端 API。

但这 600 行背后,涉及了检索、向量化、意图识别、工具调用、自动化评估五个方向—— 每一个在工业界都是独立的工程模块。

理解一项技术最好的方式,是让它在你的电脑上跑起来,然后用数据而不是感觉来评价它。


本文基于实际跑通的项目,所有数字均来自真实运行结果。代码完全本地运行,无需任何 API Key 即可复现路由和检索评估;质量评估需要本地 Ollama(gemma4-hermes 作裁判,qwen2.5 做生成)。