知识库问答系统怎么设计?把权限、版本与证据放进主链路
从用户问题确定边界
假设系统服务企业员工,资料来自内部制度和技术文档,回答需要给出依据。先确认哪些资料属于谁、更新多频繁、哪些问题不能回答,以及可接受的等待时间。这个假设不等于所有知识库都需要多租户或复杂工作流。
首个版本可以只支持一种文档格式和一个组织,但身份与资料可见范围必须清楚,否则一个效果不错的 Demo 也可能泄露内部信息。
数据模型与离线链路
文档记录保存来源、版本、状态、所有者和权限范围;片段记录保存文档 ID、位置、正文与索引标识;导入任务记录处理结果。原文件存储与检索索引各有职责,不要把向量索引当作唯一内容来源。
新文档经过解析、分块和向量化后再切换为可检索版本。中途失败时保留上一个完整可用版本,并显示任务失败;不能让用户在一次更新中随机读到新旧片段混合的结果。
在线主链路
用户认证后,应用确定可访问文档范围,再检索并过滤候选、组装上下文、调用模型、验证引用并返回答案。权限检查不能仅依赖前端,也不能只在生成提示中声明。
检索组件如果支持权限过滤,应尽早应用;最终返回片段前仍要确保资源可见。检索后的缓存也要包含适当的权限与版本边界,不能把一位管理员的答案直接共享给普通员工。
证据与生成如何分工
模型负责组织语言,检索系统提供可追溯资料。每段上下文携带来源标识,回答中的引用对应实际文档与位置。没有足够依据时明确说明,而不是用常识补成内部规定。
文档可能包含恶意或无意的指令,应视为资料而非授权。若未来加入发邮件或改业务数据的工具,需要单独设计执行权限;普通问答系统不应因为读到一句文档文字就获得写入能力。
运行与失败策略
导入任务可重试,但同一文档版本应有稳定标识,避免重复片段。检索服务失败时返回暂时不可用,不把空结果解释为“没有相关制度”;生成失败时可以展示已找到的来源,前提是权限校验完成。
记录脱敏后的链路耗时与来源 ID,便于区分解析、检索和生成问题。日志不默认保存所有内部文档和完整对话;保留范围应符合实际排障需要。
验收从四类问题开始
准备有答案、无答案、文档更新和越权问题,检查依据正确、更新可见、失败状态明确且无权限泄露。再测量检索与生成耗时,按实际瓶颈扩展资源。本文没有实施该系统,不报告准确率或吞吐量。面试时把不变量、版本切换与一次失败处理讲清,比罗列服务数量更有价值。