Enterprise-RAG · 项目展示

企业知识问答,每一句回答都能回到原文那一行

一个权限感知的检索增强问答系统。只检索当前用户有权访问的资料,只依据原文作答,引用能定位到 PDF 的页与坐标、Word 的段落、Excel 的单元格。依据不足时拒答,两份资料矛盾时报告冲突,不猜测。

留出集正确率
越权命中
冲突精确率
自动化检查
88 项
发布版本

这个系统解决什么

四件企业场景里绕不开的事

权限进检索,不做事后过滤

授权范围是检索查询的一部分,关键词与向量两路共用同一集合,返回答案前再校验一次。先检索全部再过滤,意味着敏感资料已经进过排序和生成链路。

引用可核验,核验不过就不返回

模型只选带编号的证据片段,服务端取回真实原文、校验版本与权限后才组装引用。校验不通过的答案不会被修复,而是判定失败。

撤权立即生效

决定可见性的是业务库而不是搜索索引。撤权提交后的下一个请求就被拒绝,不等待索引清理——连历史记录里的提问文本都会被遮蔽。

冲突需要拿出证据

只有模型交出分属两份不同文档的两段矛盾原文,系统才报告冲突。加这道门槛之前,冲突判定的精确率是 4.2%。

实测结果

所有数字都来自冻结的评测集

下面每个数字都由脚本从运行产物中读回生成,不手工填写。开发集参与过选型,留出集只运行一次,验收门槛在运行之前就已写定。

自建开发集 · 147 题

检索配置Recall@5MRR@10回答正确率

混合检索的检索指标低于 BM25,端到端却最高。证据预算只有 4 段时,决定成败的是这 4 个位置被谁占了,而不是金标文档在不在前 10。差异未达统计显著(McNemar p = 0.19),所以准确的说法是实测最优,不是已证明更优。

冻结留出集 · 80 题(只跑一次)

指标门槛实测

留出集比它从未参与过的开发集高 0.9 个百分点,没有观察到开发集过拟合。

外部基准 · 39 题

检索配置Recall@5回答正确率

英文语料 + 100 份干扰文档。这里混合检索的检索优势明显,与内部数据上的排序相反——说明 BM25 在自建语料上的领先来自那批资料的专有名词特征,不能推广。

界面

五个环节,每一步都有断言

下面的截图来自一份可执行走查:它对着当前版本真实操作,断言每一步应当展示的内容,结束时清理自己上传的资料。录像只能证明演示发生过一次,走查每次都跑。

没有采用的方案

三个被数据否决的常见组件

Cross-encoder 重排

检索指标明显改善(Recall@5 0.935 → 0.968),端到端几乎不动(p = 0.79),同时冲突精确率从 100% 掉到 92.3%、耗时增加 22%。已实现,默认关闭。

LLM 查询改写

四组对照显示:不给历史的 LLM 改写与完全不改写逐位完全相同。收益全部来自对话历史,没有一点来自"用模型改写"。最终采用零模型调用的规则拼接。

主题一致性校验

为堵"答非所问"实现,在冻结集上校准后发现:判对回答的重合度 5 分位是 2,判错的无一低于 3——阈值只会误杀正确答案且抓不到任何错误。已完整回退。

保留这些记录,是因为一个系统最终为什么没有采用某个常见组件,本身就是工程结论。

边界

这套结果还不能证明什么

本页是项目展示,不是可交互的在线系统。系统需要 PostgreSQL、OpenSearch 与本地 7B 模型(约 7 GB),无法在静态托管上运行。要实际试用请按仓库里的 make 步骤在本机启动。