## Before 一次知识召回治理通常靠临时分析串起来:先从某个商品域 session 表里取 Top123 知识 ID,再去旧 Base 或本地 FAQ 文件反查标签和标准问;遇到没有命中的知识,再用 `query_recall_multitable.csv` 的答案文本兜底。最后人工判断哪些记录更新、哪些新增,再手写批量导入 Base 的 JSON,并用 1 行 dry-run 验证。 风险是每次口径都要重建:Top1/Top2/Top3 是否合并去重、纯数字知识 ID 属于哪个桶、标准问为空时怎么补、Base 已有记录如何 upsert,都可能在临时脚本里漂移。 ## After ```bash python data-analysis-workspace/tools/knowledge_recall_governance.py \ --sessions data/一级分类打标/domain_label_2026_04_product_sessions_v2.csv \ --recall-detail data/query_recall_multitable.csv \ --base-export data/base/knowledge_master_export.csv \ --sources-config data-analysis-workspace/config/knowledge_recall_sources.yaml \ --topn 123 \ --out data-analysis-workspace/adhoc/knowledge_governance_2026-05-28 ``` 流水线输出: | 产物 | 用途 | |---|---| | `top_knowledge_ids.csv` | TopN 知识 ID、调用次数、session 去重口径 | | `coverage_curve.csv/png` | Top10/20/50/100/500/1000 覆盖率 | | `source_match_report.csv` | 每个知识 ID 命中的历史源、字段完整度、兜底原因 | | `upsert_plan.csv` | 已有更新、新增缺失、未匹配历史库明细 | | `base_payload_dryrun.json` | 1 行 dry-run 请求体 | | `blocking_issues.csv` | 标准问为空、schema 不匹配、重复 ID 等阻断项 | 验收信号: - `validate` 显示唯一知识数、当前母表已有数、本次更新数、本次新增数,与 upsert 明细一致。 - TopN 覆盖率表可复现,例如 Top100/Top500/Top1000 覆盖率稳定生成。 - 标准问为空的记录有明确 reason:历史库未命中、召回明细无标准问、需人工补齐。 - Base dry-run 返回成功后才允许 `--apply` 分批写入。