# 召回Top知识粒度保真检查 候选 id:`retrieval-topk-grain-guard` ## 诊断流程样例 ### 场景 用户给出 242 条价格上下限咨询 case,要求按 `智能会话id` 从风神导出中补回当时召回的 `标注-知识Top1/2/3`。 ### 输入 - `cases.xlsx`:242 行,242 个唯一 `智能会话id`,含 `对话原文` - `fengshen_export.xlsx`:消息级导出,同一 `智能会话id` 可能多行,含 `标注-知识Top1`、`标注-知识Top2`、`标注-知识Top3` ### 检查步骤 1. 读取两张表,打印 case 行数、唯一 session 数、风神导出行数、风神中重复 session 的数量。 2. 对每个 case session,在风神导出中按原始顺序找第一条 Top1/2/3 任一非空记录。 3. 逐字复制这一条记录的 Top1/2/3 单元格,不做 `groupby().agg(join)`。 4. 扫描输出 Top 字段:如果出现 `[1]`、`[2]`、`[3]` 前缀,或同一单元格包含多段拼接文本,直接标记失败。 5. 抽样 10 个 session,把输出 Top 字段与风神原始行做逐字比对。 ### 成功信号 - 输出为 242 行、242 个唯一 `智能会话id` - 列名是 `智能会话id / 对话原文 / 标注-知识Top1 / 标注-知识Top2 / 标注-知识Top3` - Top 字段与风神原始单元格逐字一致 - 没有旧版 `[1][2][3]` 拼接前缀 ### 失败信号 - 输出行数变少或变多 - 一个 Top 字段里拼了多条召回记录 - 原始 JSON 被改写成二次整理文本 - Top 列名或字段含义被重命名导致不可回源 ### 建议处理 失败时不要继续做召回质量分析,先回滚到风神原始导出,重新按“每个 session 取第一条 Top 非空原始记录”的规则生成 v2。