日期:2026-07-16
我们服务的某大型制造集团,内部知识长期分散在 OA 文档、ERP 附件、客服工单、产品手册等多个相互割裂的系统里。一线员工遇到设备报修、合同口径、产品参数这类问题时,往往需要跨系统翻找,耗时且容易找到过期版本。更棘手的是,这些知识天然带有密级:财务制度仅对财务线开放,薪酬细则仅 HR 可见,招标文件对外部伙伴严格屏蔽。我们早期尝试过一套纯展示层的"文档全文检索",结果员工搜到一个标题就能点进去——越权访问几乎无法管控。该项目覆盖集团下约三十个二级部门、近万名内部用户,知识总量超过两百万份文档,密级横跨公开、内部、受限、机密四档。越权一旦发生在问答场景里,影响面比单篇文档泄露更大——因为大模型会把敏感内容重新组织后进自然语言答案,溯源极难。于是这个项目里,我们决定基于我们采用的私有化 AI 底座(RAG 知识库层 + 向量库层)与 AI 网关,把"统一问答"和"权限边界"作为同一件事来设计,让权限在检索阶段就生效,而不是等答案吐出来再拦截。
核心场景是面向全员的统一知识问答入口:员工用自然语言提问,系统从跨系统汇聚的语料中检索相关片段,由大模型生成带出处的答案。我们按角色对语料做隔离——同一个"年度预算"问题,财务同事能看到明细口径,普通员工只能得到公开摘要。同时,每条答案都必须回链到原始文档段落,保证可追溯,避免大模型凭空编造。网关侧统一接入主流大模型调用协议风格接口,把不同部门的问答请求按能力画像与成本分发到合适模型实例,并按部门计量 token 开销,月底形成清晰的内部账单,让知识库的算力消耗也变得可核算。在移动端,店员与一线工人通过企业微信入口提问,后台同一套检索鉴权逻辑生效,无需为不同终端重复实现权限,这也是我们采用多终端一套配置思路在知识场景的自然延伸。
跨系统知识接入与切片。 多系统文档格式杂乱(PDF、Word、HTML、Excel 附件),我们建了一条统一的接入—解析—切片流水线:先用文档解析层抽取纯文本与表格,再按语义边界切分为约 512 token 的 chunk,并保留 source_id、doc_type、update_time、visible_roles 等元数据。切片阶段强制打标,避免后续检索时元信息缺失。关键点是切片不能破坏表格与条款的完整性,否则角色隔离和引用都会失真,召回质量会直接塌掉。
角色级语料隔离。 这是权限边界的核心。我们没有把权限控制放在生成之后,而是在向量检索阶段就按用户角色过滤。我们采用元数据过滤方式:每个 chunk 写入可见角色集合 visible_roles 与密级 sensitivity,检索时把当前用户角色作为过滤条件下推到向量库。以 pgvector 为例,检索 SQL 如下:
SELECT chunk_id, content, source_id,
1 - (embedding <=> :user_vec) AS score
FROM knowledge_chunk
WHERE doc_status = 'published'
AND :user_role = ANY(visible_roles) -- 角色级语料隔离
AND sensitivity <= :user_clearance -- 密级阈值约束
ORDER BY embedding <=> :user_vec
LIMIT 20;通过 = ANY(visible_roles) 与密级阈值的双重约束,越权语料在召回阶段就被剔除,大模型根本拿不到不该看的内容,既守住边界又省下无意义生成的算力。
答案引用与可追溯。 为防止幻觉,我们禁用纯自由生成,改为"检索片段 + 限定抽取":prompt 强制要求答案只能引用命中 chunk 的原文区间,并在末尾附上 source_id 与片段坐标。网关会把每次问答的检索上下文、过滤条件、模型输出一并落到调用链,便于审计回溯,也方便安全团队抽查是否出现越权泄露。
冷启动。 新组织树接入时语料为空,直接上线会大量返回"无结果",员工信任迅速流失。我们的做法是先导入高权威的公开制度文档作为种子语料,同时在问答无命中时回退到"转人工工单"提示,并收集真实问法反哺切片与索引优化,两到三周完成冷启动爬坡,再逐步放开敏感语料权限。这里有个工程细节:冷启动期要把默认角色映射为"最低可见",宁可让员工多走一次转人工,也不能在语料不全时误放开受限内容。
| 指标 | 改造前 | 改造后 | 说明 |
|---|---|---|---|
| 问答准确率 | 约 62% | 约 89% | 基于抽样工单人工评分 |
| 越权访问拦截率 | 约 0% | 约 99.2% | 检索层角色过滤生效 |
| 知识覆盖率 | 约 45% | 约 85% | 接入系统数与切片命中 |
| 日均使用率 | 约 300 人次 | 约 2100 人次 | 内部门户埋点统计 |
最重要的一条:权限必须在检索层做,而非在展示层补。展示层拦截只能挡住"看得到链接"的人,挡不住模型把越权内容混进答案。把角色与密级作为向量检索的硬过滤条件,既安全又省算力——不该看的语料根本不参与生成。其次是引用可追溯不能省,这是建立员工信任的前提,没有出处的答案没人敢用。最后,网关的按部门计量让我们能清晰看到哪个业务线在用、用在什么场景,为后续扩容与成本核算提供依据。这套"检索即鉴权"的思路,同样适用于合同、审计、客服等对数据边界敏感的场景,已在我们采用的底座与网关上形成可复制模板。最后提醒一点:角色与密级元数据必须在入库切片时就打标固化,切莫在检索时临时拼装——临时拼装既慢又易错,一旦元数据缺失,隔离就退化为"靠运气"。把权限建模前置到知识工程的第一步,后续所有场景都能直接复用。
案例片段(已脱敏):某制造企业上线首周,安全团队用越权测试账号(外部协作角色)检索"高管薪酬方案",检索层返回空结果;网关审计日志记录 filter=visible_roles 未命中、未触发任何大模型调用,越权访问在召回阶段即被拦截,验证了角色级语料隔离在生产环境真正生效。