跳到正文

01 - 文档接入与解析 ​

一句话:一份文档从上传到可检索要过四道——解析、切片、向量化、就绪,麻烦全在第一道:PDF 的表格和扫描件一旦在解析阶段丢了结构,后面调什么参数都补不回来,所以“解析任务成功”从来不是验收,抽得出原文的章节关系才算。

一、入库链路 ​

四段各有独立责任:解析归引擎的文档处理链路,切片由解析器配置决定,向量化取决于 embedding 服务,就绪状态是前三段都成功。任何一段失败都不该让文档“看起来在库里”。

上传入口两条:管理台手工上传,和 Connector 定时同步企业网盘与文档系统。两条走同一条解析链路,区别只在触发者。

二、解析是质量的地基 ​

企业文档的坑集中在三类:

文档类型会在哪里丢信息生产做法
纯文本 / Markdown基本不丢,可能切碎代码块按标题层级切,代码块整体保留
含表格 PDF表头与单元格关系被压成一行文本走表格结构还原,转成带表头的结构化文本再入块
扫描件 / 图片型 PDF识别错字、漏行、表格线断裂OCR 后进人工抽检,未过抽检不进默认检索
图表与架构图图里的结论完全丢失能转表的走图表转表;补不了的单独成块、带上下文并标注“来自图”,且只参与定位不参与重排(见 02、06)

解析这一层由三个能力拼成,选型时容易被当成一个:版面与文字检测识别(含中文扫描件基线)、表格结构还原(转成带表头的结构化文本)、图表转表与公式识别。第三项对图表类文档必须单独确认覆盖范围,缺位时按“需改写”或“拒收”处置(见 08),不要在检索层补救。工作流形态的解析节点用来把解析挂到上游系统的变更事件上,批量重解析与增量重解析走同一条路径,不另起一次性脚本。

判断解析有没有做够,不看任务状态,看内容能否还原:随机抽 20 份解析结果,逐份对照原文回答“这一段的上级标题是什么、表格第 3 行第 2 列是什么”。抽不出来就是解析丢信息,下游检索调参救不回来。

三、切片的默认取值 ​

原则一句话:结构优先,长度兜底。先按标题、段落、列表、表格这些自然边界切,边界内超过长度上限再按 token 二次切。

项取值说明
目标块长300–800 token经验值;技术文档偏短利于定位,制度条款偏长保证一句规定不被切断
相邻重叠10–15%经验值;用于兜住跨块指代,不是越多越好
硬上限不超过 embedding 输入窗口超了就是静默截断,比召回差更难查
表格整表一块,带表头拆行会丢行列关系
代码按函数或代码块成块不按行切

把上面原则落成一张可执行表(取值是经验起点,首轮上线后按各桶评测结果校准,不当作实测值):

文档类型切片策略块长 / 重叠检索取值就绪抽检判据
制度、法规条款按标题与条款边界,整条不拆600–800 / 10%关键词权重不低于语义,重排开条款号整条命中,不出现半条
技术手册、接口文档按标题层级,代码块整体保留300–500 / 10%双路召回,重排开错误码与接口名精确串可查
FAQ、问答对一问一答配成块≤300 / 0语义权重可上调同义问法命中同一块
报表、含表 PDF整表一块并带表头;超限按行组切且重复表头表不按长度二次切重排必开,送入 ≤4 条指定行列定位题答对
论文、长报告按章节,父子块开500–800 / 15%多跳桶达标才开父子块跨节指代题可答
扫描件、图文混排OCR 后按版面块,图单独成块300–500 / 10%强制人工抽检后才进默认检索OCR 错字率与页码回链同时合格
会议纪要、个人笔记默认拒收,最多降级为参考源—不进权威源清单拒收留回执

父子块与上下文增强块默认关。开的条件只有一条:黄金集里出现“文档找到了、但块内信息不完整”的题型,也就是模型拿到了正确块却缺前后文。代价同步到位——存储与 embedding 成本随块数线性上涨,索引重建时间也涨。

四、就绪状态怎么判 ​

解析任务返回成功只说明流程跑完,不代表内容可用。生产上“就绪”要同时满足三条:

  1. 解析终态为成功,且分块数与按文档长度估算的期望值偏差在约定范围内、空块与乱码块为零——引擎当前只给整篇终态与进度,拿不到分片级失败计数,所以用这三项替代“失败分片数为 0”这种落不了地的判据;
  2. 抽检通过:新入库文档按比例抽检,能还原章节关系与表格行列;抽检记录(样本、判定人、结论)必须留档,不留档等于没做;
  3. 元数据归位:负责人、复审周期、所属项目、共享范围、密级五项齐备。任一项缺失即不进默认检索,落“待归位”状态并在管理台可见——与 08 的体检口径一致,不给“缺项但先入库试试看”留口子。

三条不过,文档停在“已入库、不可检索”,在管理台可见但不会出现在答案里。这样比悄悄入库后给出半截答案要好——前者是看得见的延迟,后者是看不见的错误。

五、更新与替换 ​

文档改版是高频动作,规则是先挂新、再停旧、最后清旧:

这里的真风险不是时间窗,而是同一文档两个版本同时可召回导致混版答案——新旧条款出现在同一个回答里,引用还都成立。所以规则是两条:同一文档同一时间只允许一个版本进默认检索;另一版本只能作为兜底来源存在,且引用必须带版本,事后能判定答案出自哪一版。窗口长度按解析耗时定即可,不必压到极短;新版有缺陷时靠版本标签退回,不靠抢时间。

引用要带版本。答案里指向“第 3 页第 2 条”的引用,文档一改版就可能对不上,所以引用快照固定记录当次的文档版本与内容哈希,供事后核对“当时答的是哪一版”。

六、失败怎么分 ​

解析失败不是一类,是四类,处置完全不同:

类别现象处置
格式不支持引擎无对应解析器明确拒绝并回传原因,转人工或第三方转换后重投
超大 / 超长内存或时间超限分片处理;反复失败进人工队列,不无限重试
内容可疑命中注入模式、异常脚本进隔离区,不参与默认检索,等人工判定(见 03)
依赖抖动embedding 服务不可达、向量库超时可重投,带退避与最大次数,超限进死信队列并告警

分类的价值在于:前三类是文档问题,重投一百次也不会变好;只有第四类值得自动重试。不做分类的队列会退化成一个不断吞资源、始终不动的状态。

七、边界 ​

  • 多模态一期不做:音视频转写、图文混排理解与图表内容抽取均不在本链路承诺,遇到时转人工或单独能力接入。要说清因此无解的题型——会议决议、客服话术、培训录屏往往是口径的唯一记载处,缺了它们表现为“库里有制度却答不上”;将来再入时还要另计转写成本并指定转写块的复审责任人。
  • 上游系统的删除与变更事件(连接器)未就绪时,本链路只能靠每日全量清单比对兜底:比对成本随文档总数线性上涨,删除的可见延迟从秒级退化为一天(后果与兜底见 03、06)。
  • 扫描件 OCR 的正确率依赖具体文档质量,上线前按库抽检口径判,不用“支持 OCR”这句话代替验收。
  • 解析吞吐与并发是容量问题,取值见 05 部署运维与容量,本栏只定判定口径。

把 AI 工程讲到既懂也会用