企业级RAG系统构建是一个复杂且充满挑战的领域。本文基于作者在制药、金融、法律等监管严格的中型企业中构建10多个RAG系统的实战经验,对处理20K+文档的经验教训进行了深入总结。

如果您正面临处理大量企业文档存储库的RAG实施问题,这篇文章提供了极具价值的实战指导和关键总结。强烈推荐阅读和收藏!

在过去一年中,我一直致力于为受监管行业(员工规模在100-1000人)的中型企业构建检索增强生成(RAG)系统。坦白地说,这项工作远比任何在线教程所展示的要困难得多。目前,我们已经与十多个客户合作,涵盖制药公司、银行、律师事务所和咨询机构。我想分享一些真正重要的经验,这些经验超越了网上所有基础信息。

背景概览

大多数客户公司拥有10K到50K以上的文档,这些文档自2005年以来一直存储在SharePoint或文档管理系统中。它们不是干净的数据集,也不是精心策划的知识库,而是几十年来积累的、需要以某种方式进行搜索的业务文档。

1. 鲜少有人谈及的关键:文件质量检测

老实说,这是我最大的顿悟。大多数教程都假定您的PDF文件是完美的,但现实是:企业文档的质量绝对参差不齐。
我有一个制药客户,他们的文档混合了1995年研究论文的扫描打字页(OCR几乎无效)和超过500页的包含嵌入式表格和图表的现代临床试验报告。尝试对这两种文档应用相同的分块策略,系统返回的将是完全的无稽之谈。
在花费数周时间调试为什么有些文档返回糟糕结果而其他文档工作正常后,我终于意识到,在处理之前,需要对文档质量进行评分
我们构建了一个简单的评分系统,用于检查文本提取质量、OCR伪影和格式一致性。根据分数,文档被路由到不同的处理管道:

  • 干净的PDF(文本提取完美):完整的分层处理

  • 尚可的文档(存在少量OCR伪影):带有清理的基本块

  • 垃圾文档(扫描手写笔记):简单的固定块手动审查标志

这一单一的改变,修复的检索问题比任何嵌入模型升级都要多。

2. 为什么固定尺寸的分块大多是错误的

每个教程都会说:“将所有内容分割成512个重叠的token即可!”。但现实是:文件是有结构的。研究论文的方法论部分与其结论不同;财务报告有执行摘要和详细表格。忽略结构会导致块在句子中间被截断,或结合不相关的概念。
我们必须构建保留文档结构的分层块

  • 文档级别:(标题、作者、日期、类型)

  • 部分级别:(摘要、方法、结果)

  • 段落级别:(200-400个token)

  • 句子级别:针对精确查询

关键见解:查询复杂性应决定检索级别。广泛的问题停留在段落层面,而精确的问题,如“表3中的确切剂量是多少?”,则需要句子级别的精确度。我们使用简单的关键字检测(如“精确”、“特定”、“表”等)来触发精确模式,如果置信度低,系统会自动深入到更精确的块。

3. 元数据架构比嵌入模型更重要

我将40%的开发时间投入到元数据上,其投资回报率是我构建过的任何东西中最高的。大多数人将元数据视为事后补救,但企业查询具有疯狂的上下文依赖性。例如,询问“儿科研究”的制药研究人员所需的文件,与询问“成人人群”的人所需的文件完全不同。
我们构建了特定于域的元数据模式

  • 对于制药文档:文件类型、药物分类、患者人口统计(儿科、成人、老年)、监管类别(FDA、EMA)、治疗领域

  • 对于财务文件:时间段、财务指标(收入、息税折旧摊销前利润)、业务部门、地理区域

我们避免使用LLM进行元数据提取,因为它们非常不一致。简单的关键词匹配效果更好。查询中包含“FDA”?则应用监管类别的过滤器“FDA”。我们从每个领域的100-200个核心术语开始,并根据不匹配的查询进行扩展。

4. 纯语义搜索失败时(剧透:经常失败)

纯语义搜索的失败率比人们承认的要高得多。在制药和法律等专业领域,我观察到的失败率高达15-20%,而非普遍假设的5%。
主要故障模式包括:

  • 首字母缩写混淆:“CAR”在肿瘤学中是“嵌合抗原受体”,但在成像论文中是“计算机辅助放射学”,相同的嵌入,完全不同的含义。

  • 精确的技术查询:语义搜索发现概念上相似的内容,但错过了像“表3中的确切剂量是多少?”这样的特定表格引用。

  • 交叉参考链:文档不断引用其他文档,语义搜索完全错过了这些关系网络。

解决方案:构建混合方法。在处理过程中,图形层跟踪文档关系。在语义搜索后,系统检查检索到的文档是否有具有更好答案的相关文档。对于首字母缩写词,我们使用特定于领域的首字母缩写词数据库进行上下文感知扩展。对于精确查询,关键字触发器切换到特定数据点的基于规则的检索。

5. 开源模型的选择(特别是Qwen)

大多数人认为GPT-4o或o3-mini总是更优。但企业客户有独特的限制:

  • 成本:超过5万个文档和数千个每日查询的API成本会爆炸性增长

  • 数据主权:制药和金融不能将敏感数据发送到外部API

  • 领域术语:一般模型在未接受过培训的专业术语上容易产生幻觉

在特定领域的微调后,Qwen QWQ-32B最终表现得非常好:

  • 大批量处理比GPT-4o便宜85%

  • 一切都保留在客户基础设施上

  • 可以针对医疗/金融术语进行微调

  • 一致的响应时间,没有API速率限制

微调方法很简单——通过有领域问答对的监督培训。关键在于拥有干净的训练数据。

6. 表格处理:隐藏的噩梦

企业文档充满了复杂的表格——财务模型、临床试验数据、合规性矩阵。标准RAG要么忽略表格,要么将其提取为非结构化文本,从而丢失所有关系信息。表格包含一些最关键的信息。
我们的方法是将表视为具有自身处理管道的独立实体

  • 使用启发式方法进行表格检测

  • 对于简单的表格:转换为CSV

  • 对于复杂的表格:在元数据中保留分层关系

  • 采用双重嵌入策略:同时嵌入结构化数据和语义描述

7. 生产基础设施现状检查

教程假设资源无限、正常运行时间完美。生产环境意味着并发用户、GPU内存管理、一致的响应时间和正常运行时间保证。

  • 大多数企业客户已经拥有GPU基础设施。

  • 通常部署2-3个模型:复杂查询的主生成模型(Qwen 32B)、用于元数据提取的轻量级模型、专门的嵌入模型。

  • 我们使用量化版本,例如Qwen QWQ-32B量化为4位后只需要24GB的VRAM。

  • 最大的挑战是防止资源争用。使用信号灯来限制并发模型调用和适当的队列管理。

关键经验教训

  1. 文档质量检测优先:必须在处理之前建立质量评估。

  2. 元数据 > 嵌入:将时间投入到特定领域的模式上,因为糟糕的元数据意味着检索不佳。

  3. 混合检索是必须的:在专业领域,需要基于规则的回退和文档关系映射。

  4. 表格至关重要:必须正确处理表格数据,否则将错失大量的企业价值。

  5. 基础设施决定成功:客户更关心可靠性。资源管理和正常运行时间比模型的复杂性更重要。

总结

企业级RAG更多的是工程问题,而非机器学习问题。大多数失败并非源于糟糕的模型,而是源于低估了文档处理的挑战、元数据复杂性和生产基础设施的需求。虽然这项工作比教程看起来要困难得多,但当系统正常工作时,投资回报率是惊人的——团队将文档搜索时间从几小时缩短到几分钟。


接下来,我也为读者朋友们准备了一份 “完整版” 大模型资源,里面包含了论文、书籍、面试题、项目源码和课程等。如果你想快速学会大模型,只需在GONGZHONGHAO【小灰熊大模型】后台对我发出接头暗号:【111】 ,我就会把完整资料包发送给你。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐