KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA
04. 知识库怎样从“能搜到”走向可引用? — keel 龙骨
企业知识库的难点不是把字符串放进向量库,而是让结果同时满足租户隔离、主体权限、版本一致性和可审计引用。检索排序不能成为权限边界。
企业知识库的难点不是把字符串放进向量库,而是让结果同时满足租户隔离、主体权限、版本一致性和可审计引用。检索排序不能成为权限边界。
ACL-first pipeline
query
-> tenant/principal filter
-> lexical + semantic candidates
-> deduplicate and rerank
-> source/version/quote metadata
-> citation validation
必须先过滤 ACL,再做召回和重排;“先召回、最后在 prompt 里隐藏”仍然会把越权内容暴露给模型。每个 chunk 应带 tenant_id、允许主体、source_uri、文档版本和稳定 chunk_id。版本变更后旧 citation 不能悄悄指向新文本。
混合检索不是一个分数
词法检索擅长精确错误码、资源名和 API 字段;语义检索擅长同义表达。生产系统通常把两路候选合并后再 rerank,并记录每路分数、模型版本和过滤原因。项目用确定性的 token/字符相似度作为替身,目的是让权限和证据契约可离线测试,而不是假装它是向量数据库。
运行:
python courses/advanced/advanced-agent-systems/course/project/examples/04_hybrid_retrieval.py
python courses/advanced/advanced-agent-systems/course/project/examples/05_citations_and_context.py
Citation 是结果契约
回答中的 citation 至少能映射到本次检索结果的 chunk_id、来源、版本和可验证 quote。伪造 URI、未召回 chunk、跨版本 quote 和 ACL 不允许的证据都应在回答提交前被拒绝。项目的 validate_citations() 是一个小型 groundedness gate;真实系统还应保存 query、候选集和最终上下文快照。
本章检查点
- 当用户无权访问最高相似度 chunk 时,Recall 和回答应怎样记录?
- 只保存 URL 为什么不足以支持审计和版本回放?
- rerank 模型升级后,如何证明引用仍来自正确租户和版本?