限定知识任务与权威范围
先定义受众、数据域和答案责任。教学项目只回答公司发布的差旅政策、适用地区、报销限制与流程入口;不回答税务或法律意见,不替用户提交报销。系统为员工提供检索问答与任务辅助,权威事实仍由政策 Owner 和源文档持有。
成功答案必须满足四个条件:提问者有权访问证据;证据在查询时仍有效;关键主张能映射到具体片段;证据不足、互相冲突或问题超出范围时明确拒答、澄清或转人工。流畅度只能作为体验指标,不能覆盖权限与事实错误。
| 请求 | 系统动作 | 完成证据 |
|---|---|---|
| 当前可回答政策 | 检索权限内有效版本并引用 | 主张—证据映射、来源时间与链接 |
| 问题缺少地区/职级 | 提出最小澄清 | 未提前泄露任一分支内容 |
| 来源冲突或过期 | 展示冲突并升级 Owner | 冲突来源、版本与工单引用 |
| 法律/税务判断 | 拒绝代替专业意见 | 范围说明与人工渠道 |
数据源准入与血缘
每个数据源在接入前登记 Owner、许可、敏感等级、地域、保留期、更新方式、删除语义和权限来源。爬到文本不等于可以索引;缺少 Owner、许可不清或无法同步撤权的来源进入隔离区,不进入可服务索引。
解析流水线保留 source_id、源版本、抓取时间、内容哈希、解析器版本、Chunk 策略、ACL 快照、Embedding 模型与索引版本。PDF 表格、扫描件、页眉页脚和跨页条款分别设质量检查;解析失败文档有队列、原因码、Owner 与修复时限,不能静默丢失。
// 教学用血缘记录,字段按组织治理要求扩展
type IndexedChunk = {
chunkId: string;
sourceId: string;
sourceVersion: string;
validFrom: string;
validTo?: string;
acl: Array<{ subjectType: 'user' | 'group'; subjectId: string }>;
parserVersion: string;
embeddingVersion: string;
contentHash: string;
};
更新使用可回滚的索引别名:新版本完整构建并通过解析、权限和 Golden Query 检查后再切换。删除与撤权优先级高于内容更新,要传播到倒排、向量、缓存、摘要和导出 Artifact;只删源文档而保留派生索引仍是泄露。
从简单基线逐步增加复杂度
第一版建立 BM25、Dense Retrieval 与 Metadata Filter 的可解释基线。关键词适合政策编号、金额和专有名词,Dense 适合语义改写;两者可用 Reciprocal Rank Fusion(RRF)合并,再用小规模重排提高顶部相关性。每层都保存候选与分数,才能定位召回、排序还是生成失败。
Parent-Child Retrieval 只在小 Chunk 命中但需要较大上下文时引入;按域路由用于减少错误语料竞争;Query Rewrite 要同时保留原始查询和改写结果,避免改写丢失限制条件。多跳检索或知识图谱只有在单跳基线无法覆盖且消融实验能证明收益时才增加,否则会扩大延迟、成本和错误传播面。
| 增量能力 | 它解决的问题 | 放行证据 | 新增风险 |
|---|---|---|---|
| Hybrid + RRF | 词面与语义召回互补 | 目标切片 Recall@k 提升 | 候选量和延迟增加 |
| Reranker | 顶部证据排序错误 | Precision@k 与答案忠实度提升 | 额外模型成本 |
| Parent-Child | 片段缺上下文 | 跨段规则题改善且 Token 可控 | 权限继承与上下文膨胀 |
| 多跳/图谱 | 证据分散且需关系推理 | 多跳切片显著改善 | 错误链更长、调试更难 |
权限在召回前生效
身份与租户从已验证会话进入检索层,模型不能声明自己是谁。查询先将用户、群组、组织关系与环境属性转为可审计的策略输入,再把允许范围下推到倒排与向量检索。OWASP Authorization Cheat Sheet建议最小权限、默认拒绝和每次请求校验,这些原则同样适用于 Chunk、缓存和引用链接。
“先召回再让模型过滤”是不可接受的边界,因为未授权文本已经进入 Context、Trace 或缓存。文档级 ACL 之外,工资、人员信息等字段可能还需字段级或段落级策略。Parent-Child 检索必须保证父内容不扩大子 Chunk 权限,跨域 RRF 也不能在合并时丢失 ACL。
引用链接再次鉴权,因为用户权限可能在生成后、点击前变化。缓存键包含租户、主体权限版本、查询与索引版本;权限变更触发失效。Microsoft 的文档安全过滤示例也把“用户只能基于自身权限获得答案”作为 RAG 基本要求,但具体实现仍需结合组织 IdP 与策略系统。
答案绑定证据与不确定性
答案对象不只存文本,还要存每个关键主张对应的 Chunk、源版本、有效时间、适用范围与访问链接。引用编号由系统根据真实检索结果生成,模型只能引用给定 ID,不能自由编造 URL。生成后 Verifier 检查引用存在、仍授权、主张被证据支持。
type GroundedAnswer = {
status: 'answered' | 'needs_clarification' | 'insufficient_evidence';
answer?: string;
claims: Array<{
text: string;
evidenceIds: string[];
applicability: string;
}>;
conflicts: Array<{ evidenceIds: string[]; reason: string }>;
};
来源冲突时并列呈现政策版本和生效范围,并标记需要 Owner 仲裁。证据不足时拒答不是产品失败,而是正确控制;系统可询问地区、时间或员工类型。NIST AI 100-2e2025指出运行时第三方数据可携带间接 Prompt Injection,因此来源文本只被当作证据数据,不能改变系统策略或调用未授权 Tool。
离线和在线质量闭环
Golden Case 包含问题、身份、时间点、Gold Evidence、可接受答案、必须拒答条件和禁止泄露。离线指标分层:解析覆盖和 ACL 正确性;检索 Recall/Precision 与过滤正确性;上下文相关性;答案忠实度、完整性、引用准确性;端到端任务成功、拒答与升级正确性。
RAGAS 原始论文把检索相关性、生成忠实度和答案质量分开评估,这一分层适合诊断,但 LLM Judge 分数不能替代权限断言、精确引用和领域专家复核。高风险政策题与越权测试应有确定性门禁。
| 切片 | 主要失败 | 判定证据 |
|---|---|---|
| 无答案/超范围 | 编造或错误兜底 | 拒答与升级正确率 |
| 时效变化 | 引用旧版本 | 查询时点与有效版本匹配 |
| 多跳 | 漏证据或错误拼接 | 每个主张的证据链 |
| 越权 | 召回、缓存或引用泄露 | 确定性零容忍测试 |
| 冲突来源 | 静默选择单一来源 | 冲突呈现与 Owner 升级 |
线上采集去敏后的无结果、用户纠正、引用点击、升级原因和低置信答案,进入候选队列;只有经授权、可重放与专家标注后才进入下一版 Golden Dataset。引用点击低可能是答案已足够,也可能是链接失效,不能单独当作正确率。
知识系统的核心 SLO 包含新鲜度
服务可用但索引过期仍会产生错误答案,因此 SLI 至少覆盖源变更到可检索的延迟、解析失败率、索引积压、撤权传播延迟、引用可访问率、答案成功率与单位成功成本。按数据域、来源与租户切片,避免平均值隐藏某一政策域长期失效。
Runbook 分别处理源连接失败、解析退化、索引积压、权限同步失败、错误引用、过时答案与模型升级回归。权限同步失败默认冻结受影响域的新查询或退回权威站内搜索,不继续服务可能越权的旧缓存;错误引用事件先确定影响范围和访问日志,再撤回缓存并重建索引。
从单域到企业级扩展
扩展时按数据域分区,每个域有内容 Owner、权限 Owner、接入 SLA、质量 Scorecard 和停用路径。平台共享连接框架、血缘、索引发布、身份下推、Eval Runner 与观测;领域团队保留 Chunk 语义、检索策略、Gold 与答案责任。统一基础设施不等于抹平权限和业务语义。
跨域问题先显式路由并保留各域引用,只有真实多跳需求与评测证据支持时才引入知识图谱或 Agentic Retrieval。迁移波次从低敏感、Owner 清晰、查询量高的域开始;每波完成数据准入、否定测试、Eval、SLO、Runbook 和回滚后再扩展。
主动提取:为什么召回后再做权限过滤仍然不安全?
演进判断:何时值得引入多跳或知识图谱?
资料与事实边界
以下以官方文档、标准、论文和原始工程资料为主。厂商 API、价格、限额与模型能力会变化,落地时仍需按目标版本做能力探测和回归。
- OWASP:Authorization Cheat Sheet — 最小权限、默认拒绝、逐请求校验与授权测试
- Microsoft Learn:RAG document security filtering — 文档权限过滤的官方参考实现
- NIST:Adversarial Machine Learning Taxonomy 2025 — RAG、间接 Prompt Injection 与企业应用威胁
- RAGAS:Automated Evaluation of Retrieval Augmented Generation — 检索、忠实度与答案质量分层评测的原始论文