Skip to content
English

检索质量评估 ​

检索是否值得引入,不应由“用了向量”决定,而应由真实问题上的来源命中决定。评估的目标不是证明方案先进,而是回答:它有没有把正确资料带到模型面前,代价是否可以接受。

先定义“好”的标准 ​

先写下你要改善的具体现象,例如:

  • 用户换个说法就找不到已有资料;
  • 正确资料在候选里,但排在很后面;
  • 没有资料时仍然编出答案;
  • 回答引用的来源与正文对不上。

不同现象对应不同指标。只改善平均延迟、候选数量或“看起来更智能”都不算目标。

建一个小样本集 ​

从真实提问里抽样,覆盖三类:

类型例子期望
有明确来源“播放器怎么暂停”对应主题或章节进入前 k 条
同义或口语“那个放歌的地方怎么关”与上一类命中同一来源
没有资料“你们支持哪些支付方式”明确说明没有资料,不编造

每条样本记录 question、expectedSourceIds 和可选的 mustNotSourceIds。样本不必多,但要来自真实使用,而不是为检索算法量身定做。

指标 ​

指标定义用途
recall@k期望来源是否出现在前 k 条判断召回是否够用
无答案正确率没有资料时是否明确说不知道防止编造
引用准确率回答中的引用是否指向真实来源且内容一致防止错误归因
额外延迟检索与 embedding 增加的耗时判断体验代价
单次成本embedding 调用与索引维护成本判断长期可持续性

recall@k 只说明来源有没有被带到,不说明模型是否用了它;引用准确率需要结合回答正文检查。

记录建议 ​

日志字段属于软约定,不是 SDK 强制 schema。建议至少记录:

  • 配置标识与索引 revision;
  • 检索方式(整篇、章节、关键词、向量、融合);
  • 命中的来源 ID、名次与分数;
  • 是否降级、降级原因;
  • 延迟、embedding 模型 identity、调用结果状态;
  • 无答案判定结果。

不要记录完整提示词、密钥或未脱敏的个人资料。问题文本是否需要落盘,按隐私策略决定;需要时可以只记录哈希与长度。

一个最小评测脚本 ​

ts
type Case = { question: string; expectedSourceIds: string[] };

async function evaluate(
  cases: Case[],
  retrieve: (question: string) => Promise<{ sourceIds: string[] }>,
  k: number,
) {
  const rows = [];
  for (const item of cases) {
    const { sourceIds } = await retrieve(item.question);
    const top = sourceIds.slice(0, k);
    rows.push({
      question: item.question,
      hit: item.expectedSourceIds.some((id) => top.includes(id)),
      top,
    });
  }
  const answered = rows.filter((row) => row.hit).length;
  return { recall: answered / rows.length, rows };
}

无答案样本单独统计,不要和 recall@k 混在一起。引用准确率需要检查回答正文与来源,不能只看向量分数。

对比实验 ​

一次只改一个变量,并固定其余条件:

  • 同一份语料快照与 revision;
  • 同一组问题;
  • 同一模型与提示词;
  • 同一 k 与预算;
  • 同一权限范围。

建议至少比较三组:整篇读取、章节读取、混合检索。只看混合检索与关键词的差异,无法说明问题出在切块还是向量。

决策规则 ​

  • 期望来源没有进入前 k:先改切块、词表或章节结构,不要先调模型。
  • 来源进了前 k,但回答仍错:检查证据是否进入上下文、预算是否截断、模型是否忽略来源。
  • 没有资料时仍编造:优先修无答案判定与提示边界,不要靠提高相似度阈值掩盖。
  • 检索成本明显上升但来源命中没有提升:停止向量化,把维护成本放回资料结构。

评估结论应写成“在什么样本、什么配置、观察到什么”,而不是“效果更好”。样本或配置变化后,旧结论不能直接沿用。

常见误区 ​

误区问题替代做法
用调参时的同一批问题验收结果被过拟合留出未参与调整的样本
只看 top1正确来源常在前几条看 recall@k,并检查引用
把融合分数当置信度分数只表示名次用来源命中与回答正文判断
忽略无答案样本编造不会被发现单独统计无答案正确率
用延迟或成本代替质量指标方向错误质量与代价分开记录

下一步 ​

接口参考、使用示例与开发指南。