文档问答引擎

本地检索 · 带出处 · 可增量扩展

把一批 PDF 文档变成能问、能溯源的知识库。回答永远带原文出处, 用户可核对;答不出时明确说"找不到"。
同一套引擎装了三种完全不同的语料,每种都针对性地调过检索与提示词。

它解决什么

不是"算得更准",而是"翻得更快"

一份 200~300 页的年报,想知道"公司靠什么赚钱", 得翻到第 30 页左右;想知道"研发方向是什么",又是一处;想知道"有哪些风险",再翻一遍。

这套系统把它变成一句话。用户省下的是翻找的时间,不是判断的脑力 —— 所以设计上刻意做了一件事:每个答案都能追到原文

三套语料

同一个引擎,换语料、换检索策略、换提示词
语料内容文档切块特有问题
A · 单公司年报华润微 2019–202242,955 表格列与年份对应不上
B · 行业知识库半导体 5 家公司1510,947 多源归因:不能把甲公司的说成乙公司的
C · 制度知识库华润微全套管理制度10627 条款精确:关联交易/对外投资/对外担保规定不同,不能混

实测效果

下面每一条都来自真实运行,不是示意

A · 单公司年报 —— 跨年对比

华润微的营业收入从2019年到2022年是怎么变化的?
华润微营业收入逐年上升: · 2019年度为 5,742,784,130.70 元(57.43 亿元) · 2021年度为 9,249,202,849.06 元 · 2022年度为 10,060,129,516.04 元 2019 年到 2022 年整体呈增长趋势,2022 年较 2021 年增长约 8.77%(按营业总收入口径)。
★ 三个数值与独立抽取的报表数据交叉验证一致 · 检索覆盖 2019 / 2021 / 2022 三个年份

B · 行业知识库 —— 多源归因

这几家公司在半导体产业链上分别处于什么位置?
华润微(2019) · 中国领先的拥有芯片设计、晶圆制造、封装测试等全产业链一体化经营能力的半导体企业(华润微 2019)。 · 在2018年排名前十的中国本土半导体企业中,是唯一一家以IDM模式为主运营的半导体企业(华润微 2019)。 中芯国际(2022) · 处于集成电路晶圆代工行业(中芯国际 2022)。 · 公司针对行业共同面临的困境,积极寻求与产业链上下游的多元化合作(中芯国际 2022)。 国芯科技(2021、2022) · 2022年牵头整合长三角区域…组建"苏州自主可控智能汽车电子芯片创新联合体"(国芯科技 2022)。 芯海科技(2021) · 全信号链集成电路设计企业,国内上市企业中唯一一家模拟信号链和MCU双平台驱动(芯海科技 2021)。 小结(按产业链环节归纳): · 芯片设计:芯海科技、国芯科技 · 晶圆制造:中芯国际、华润微
★ 每个结论都标了出处 —— 这是 B 场景最关键的机制

C · 制度知识库 —— 条款精确

对外投资的审批权限是怎么划分的?董事会和股东大会各自能批多大额度?
对外投资审批权限按"股东会—董事会—董事长/总裁"三级划分: 一、股东会 —— 最高决策机构 股东会是公司对外投资的最高决策机构(《对外投资管理制度》第五条)。 二、董事会 —— 在股东会授权范围内决策 交易涉及的资产总额占公司最近一期经审计总资产的10%以上,应当提交董事会审议(《章程》第一百零八条)。 三、董事长或总裁 未达到董事会审议标准的对外投资,由董事长或总裁在董事会的授权范围内决定(《对外投资管理制度》第五条)。 补充说明:制度未对股东会、董事会各自审批的具体金额上限/下限作出明确规定。
★ 引用精确到条款;且主动说明"制度里没规定什么"

切块质量

切块是检索的地基 —— 这里每一项都是测出来的
指标A 年报B 行业C 制度说明
块数2,95510,947627
超长块(>900字)0.00%0.25%0.00%超了会被模型静默截断
标题路径覆盖99.9%99.9%98.7%没有路径的块 = 召回了也不知道出自哪
正文重复0.0%1.0%0.0%重复块会挤占 TopK 名额

开发中修掉的三个真问题

问题后果修法
制度文档的「章」层级丢失路径只剩"第X节",不知道属于哪一章层级扩到 5 层(章/节/条/一、/(一))
「条」把整条正文吞进标题路径路径里塞满正文,内容反而丢了路径只放"第X条"编号
10~12% 的模板重复块跨公司套话挤占检索名额跨公司模板剔除 + 同公司跨年保留最新

开发中修掉的检索问题

问题现象修法
B:检索被单一公司垄断 问"这几家公司处于什么位置",只召回华润微一家(它年报里相关词密度最高),另外 4 家全被挤出 按公司分组检索,每家保底取 2 条再合并
A:跨年问题召不全 问"2019到2022年营收",含数值的块排在第 18~92 名,Top-8 里一条完整年度营收都没有 按年份分组检索,每年保底取 4 条
A:科目名与提问不一致 利润表里写"营业收入",用户问"营业收入",字符二元组匹配不上 术语同义词扩展(营业收入 → 营业总收入 / 主营业务收入 / 营收),块从第 20 名升到榜首

检索策略

选型是测出来的,不是拍脑袋

在 60 道真实问题上做过对照实验:

策略Top-6 命中
纯向量检索22%
BM25 关键词92%← 采用
RRF 等权融合47%
向量top3 + BM25top382%

结论是只用 BM25。原因:中文企业文档的提问自带精确术语 ("所得税影响额""对外投资审批权限"),关键词匹配一击即中; 而向量模型会把整页内容平均成一个语义向量,具体术语被稀释。

这个选择还带来一个工程红利

不用向量检索,就不需要嵌入模型、不需要 ONNX、不需要 WebAssembly。 检索完全在浏览器里用纯 JS 跑,首屏只需几百 KB,且没有冷启动。 这也是它能免费部署的原因。

架构

构建期(运作者做,一次性) PDF ──解析──> 清洗 ──> 结构感知切块 ──> 去重 ──> 分片 ──> 上传 CDN 成本:约 40 秒/份 运行期(用户提问) 浏览器 ──按需下载语料分片──> 本地 BM25 检索 ──> 拼上下文 │ 免费后端(只转发) ──> LLM ──> 带出处的回答 增量更新 新增一份文档 → 只处理这一份 → 上传一个文件 已有的内容一个字节都不用动

明确不做的事

知道不该做什么,和知道该做什么一样重要
不做为什么
用 RAG 回答具体财务数据 企业实践里这类需求走数仓 / Text2SQL,不走 RAG。用文档检索去查数字,是拿短板碰长板
让模型替用户做计算 需要精确计算时应让代码算,模型只负责找与说
假装什么都能答 答不出时明确说"找不到" —— 实测这类判断的正确率是 87.7%