金融RAG架构天花板!「离线解析」+「在线问答」双链路,这才是专业级玩法!

开篇

在AI产品的落地中,RAG是知识库的标配,且是Agent应用中的核心组件。尤其是在金融、保险等专业领域,多栏排版、扫描件模糊、跨页表格,以及用户模糊的提问意图,这些非结构化数据带来的挑战,是每一个AI产品经理和技术团队必须攻克的深水区。

这篇文章,是复盘自一套真实的金融RAG实战项目。跳出代码细节,从「离线解析(数据入库)」与「在线问答(实时检索)」这两条核心链路出发,拆解构建RAG系统的底层逻辑。

对于AI产品经理而言,拥有系统性的优化思维至关重要:知道了数据在管道中是如何流动的,才能在产品出现Bad Case时,精准定位是解析出了问题呢,还是检索走了神。

希望这份关于RAG流程的实战梳理,能给正在探索真实项目的你带来一些启发~☺️

(ps.尝试了一下公众号的一键排版,这样在手机上会不会更易读一点呢)


一、全链路架构

做一个RAG产品,首先要建立上帝视角,不能只停留在前端的对话框,还要看透后端的「双流」架构。

RAG系统本质上由两条异步的流水线组成:

1、离线处理流程(数据入库)

👉 这是系统的消化系统。

  • 提取:从PDF、PPT、TXT等异构数据源中提取内容。
  • 向量化:通过Embedding模型将文本转化为向量。
  • 存储:将文本和向量存入向量数据库(如Milvus/ElasticSearch)和关系型数据库(如PostgreSQL)。

2、在线查询流程(实时问答)

👉 这是系统的大脑。

  • 查询处理:对用户Query进行编码、重写和意图识别。
  • 检索:通过语义检索和关键词检索获取相关片段。
  • 生成:LLM基于增强的上下文生成最终回答。

🌟 注意一下~

离线阶段是提前做好知识库的解析;当用户来问问题的时候,就是第二阶段,在线检索。通过这两步操作,最终将用户的问题扩充为:检索回来的精确文本块+用户的原始问题,再一起送给LLM作为user prompt。


二、离线解析:精细化治理

RAG领域的名言Garbage In, Garbage Out,在金融研报这种专业领域体现的淋漓尽致,解析质量直接决定了系统的上限。

可以从「解析、分块、层级结构」这三个维度进行优化:

1、深度解析:从「看到」到「看懂」

在金融RAG中,PDF解析不能是单纯的文字提取,需要对文档结构进行逆向工程,集成OCR、深度学习布局识别和机器学习文本合并的复杂流水线。👇

(1)视觉化与OCR(让机器“看”到)

金融研报中大量存在扫描件或图片格式的图表。解析的第一步是将PDF页面转化为高分辨率图像。

👉 使用 pdfplumber 将页面转为图像,同时提取原始字符坐标。

如果检测到是扫描件(非电子原生PDF),系统会启动OCR引擎(如Tesseract),识别图像中的文字并生成新的文本框,与原始信息融合。

(2)布局识别(让机器“分类”)

系统需要知道哪块是正文,哪块是页眉,哪块是图表。

👉 调用 LayoutRecognizer(基于深度学习的目标检测模型),对页面进行区域划分。

如上图所示,模型会给不同区域打上标签(Title, Text, Table, Figure等),这解决了多栏排版读乱序的问题:因为这里是按区域读取,而不是按行读取。

(3)表格结构还原

金融数据都在表格里。因此不仅要提取表格里的字,还要还原行列关系。

👉 TableStructureRecognizer会裁剪出表格区域,识别单元格边界,将图片中的表格重构为HTML或结构化数据,确保「表头-数值」对应关系不丢失。

(4)智能文本合并(让机器“连贯”)

这是最体现技术深度的环节。OCR出来的往往是破碎的单字或单行,需要把它们拼成完整的段落。👇

  • 横向合并:将同一行内距离极近的文本框拼接。
  • 纵向合并:基于行距和对齐方式,将同一自然段的多行文本拼接。
  • 基于XGBoost的上下文合并:这是一个高级特性。可以训练一个XGBoost模型,根据文本特征(如是否以句号结尾、行间距、字体大小变化)来预测“下一行是否属于当前段落”。这比写死的规则要准确得多。

2、智能切块:数据入库前的精修

切分不是简单的「每500字切一刀」。错误的切分会斩断语义,导致检索失效。并且在RAG系统中,文档切块是最容易被忽视的,但它却是直接决定检索效果的环节。

切得太碎,模型看不懂上下文;😵

切得太长,检索噪音大且浪费Token。🤯

需要一种从宏观到微观再回归宏观的处理策略。如下图所示,原始文档变成机器可读的向量,需要经历三个关键阶段:

第一步:格式识别与初步解析

系统首先充当一个分拣员🤏,根据文件后缀(.pdf, .docx, .txt等)调用不同的解析器(如PdfParser,DocxParser)。

这一步将文档拆解为自然的段落 (图片中的Sections)。比如一个Word文档中的一个自然段,或者表格中的一个单元格区域。

第二步:碎片化拆分

为了保证后续合并的灵活性,不能直接用段落当Chunk(因为有的段落长达几千字,有的只有几个字)。 因此,我们需要先打碎。利用分隔符(如换行符\n、句号。、感叹号!等)将Section进一步拆解为更小的文本碎片。

这一步的产物是一堆细粒度的句子或短语(如上图绿色部分的“句子1”、“句子2”)。

第三步:基于Token预算的动态合并

这是最核心的一步。我们像装箱子一样,设定一个标准箱子大小(例如 128 Tokens),然后将刚才打碎的句子一个个装进去。

👇 这时就涉及到了一个核心算法:naive_merge。

它的目标是在保持语义连贯性(不把一句话切断)的前提下,最大化利用每个Chunk的容量。

(1)初始化:创建一个空的Chunk容器,设定阈值(例如chunk_token_num = 128)。

(2)循环填装:遍历文本碎片列表,依次拿出碎片。

计算当前Chunk已有的Token数+新碎片的Token数。

  • If ≤ 阈值:装入。将新碎片拼接到当前Chunk中。
  • Else (> 阈值):封箱。当前Chunk已满,将其保存。然后创建一个新Chunk,将这个新碎片作为新Chunk的第一个元素放入。

(3)最终输出:生成最终的Chunks列表。

💡 举个例子:

假设阈值是128。当前Chunk里已经装了120个Token的内容。下一个句子有15个Token。 120 + 15 = 135 > 128。 于是,系统会把这120个Token打包成 Chunk A,然后开启 Chunk B,把这15个Token的句子放进去。

👇 最终交付物

经过上述处理,我们得到的不仅仅是一段段文本字符串,而是一个结构化的对象列表。每个最终的 Chunk 都包含以下关键信息,为后续环节服务:

  • Content:文本块的字符串内容(用于给大模型阅读)。
  • Tokens:分词后的Token列表(用于计算成本和上下文窗口)。
  • Metadata:位置信息(如页码、在原文中的偏移量)。这对于产品界面上展示引用来源至关重要。

❓这时可能会有疑惑:“为什么不直接按字符数切分?或者直接按段落切分呢?”

直接切字符:可能会把「人工智能」切成「人工」和「智能」在两个Chunk里,导致语义崩坏。

直接切段落:有的段落极短,导致生成的向量过于稀疏,检索匹配不到;有的段落极长,超过了Embedding模型的窗口限制。

👉 naive_merge的方案是一种动态平衡:它先利用标点符号保护了句子级的语义完整性,再利用Token计数控制了Chunk的大小颗粒度。这是在工程落地中高性价比的一种方案。

3、重建层级结构与元数据 单纯的文本切片是孤立的,我们需要为每个切片找回它的坐标。 比如,当模型检索到“第3条:赔付金额为50万”这个切片时,如果丢失了它所属的“一级标题:重大疾病险”,模型可能会张冠李戴,把它当成意外险的条款。 👇 解决方案:元数据(Metadata)增强。 在解析时维护一个层级栈,给每一个Chunk打上标签: code-snippet__js { "source": "理赔手册.pdf", "page": 5, "section_path": "总则/第二章/第三条", "type": "text" } 那么在线问答检索时,就可以让LLM利用这些元数据进行精准过滤(例如:“只看第二章的内容”),或者在回答时准确引用出处。

三、在线检索:组合优化

有了高质量的数据,下一步是让系统「听懂人话」,并精准找到答案。这需要一套复杂的检索与优化策略。

1、Query理解与优化

用户的问题往往是模糊的(如:“怎么报销?”)。直接检索效果会比较差。

意图识别:判断用户是在查流程、查数据还是闲聊。可通过规则匹配(关键词)或BERT分类模型实现。

Query重写:将口语化的“怎么报销保险费用?”改写为规范的“保险费用报销流程是什么?”,去除冗余词,补全上下文。

Query扩写:引入同义词。比如用户搜“理赔”,系统自动扩展搜索“索赔”、“赔付”,扩大召回范围。

HyDE(假设文档嵌入):对于复杂问题,先让LLM生成一个“假设答案”,再用这个假设答案去检索真实文档,这能显著提升长尾问题的召回率。

2、混合检索

单一的检索方式在金融场景下往往捉襟见肘。😕

向量检索:擅长语义匹配(如“推销”匹配“销售”),但对专有名词(如“A款产品”)不够敏感。

关键词检索(BM25):擅长精确匹配,但无法理解语义。

👉 解决方案:BM25 + 向量检索并行。将两者的得分进行归一化和加权融合(例如:0.6 * 向量分 + 0.4 * BM25分),取长补短。

3、领域微调

通用的Embedding模型(如BGE)可能不懂“保单现金价值”是什么。

策略:使用金融领域的私有数据(问答对、专业术语)对Embedding模型进行微调,拉近专业术语在向量空间中的距离,显著提升召回准确率。

4、重排序(Reranking):精度的最后一道防线

初步检索为了不漏掉信息,通常会召回Top 50甚至Top 100个片段,但这其中包含大量噪声。

Cross-Encoder重排:引入一个更精细的模型,将“用户Query”和“候选文档”拼在一起进行深度打分。

👉 它能识别细微的语义差异。例如查询“最新车险流程”,初步检索可能混入了“2020年旧流程”,重排模型能精准识别出“2023年修订版”更相关,将其排在第一位。

总结来看,检索是一个漏斗模型:

Query优化(扩充漏斗口)-> 混合检索(粗筛)-> 重排序(精选)-> LLM生成。

需要关注每个环节的转化率。通过建立评估指标(如MRR、NDCG、Precision@K),就可以量化出:“引入重排后,Top 3召回率提升了15%”。


四、最后

  • 离线解析的颗粒度,决定了知识库的纯度

  • 在线检索的重排策略,决定了用户体验的精度

那么,如何系统的去学习大模型LLM?

作为一名深耕行业的资深大模型算法工程师,我经常会收到一些评论和私信,我是小白,学习大模型该从哪里入手呢?我自学没有方向怎么办?这个地方我不会啊。如果你也有类似的经历,一定要继续看下去!这些问题啊,也不是三言两语啊就能讲明白的。

所以我综合了大模型的所有知识点,给大家带来一套全网最全最细的大模型零基础教程。在做这套教程之前呢,我就曾放空大脑,以一个大模型小白的角度去重新解析它,采用基础知识和实战项目相结合的教学方式,历时3个月,终于完成了这样的课程,让你真正体会到什么是每一秒都在疯狂输出知识点。

由于篇幅有限,⚡️ 朋友们如果有需要全套 《2025全新制作的大模型全套资料》,扫码获取~
在这里插入图片描述

👉大模型学习指南+路线汇总👈

我们这套大模型资料呢,会从基础篇、进阶篇和项目实战篇等三大方面来讲解。
在这里插入图片描述
在这里插入图片描述

👉①.基础篇👈

基础篇里面包括了Python快速入门、AI开发环境搭建及提示词工程,带你学习大模型核心原理、prompt使用技巧、Transformer架构和预训练、SFT、RLHF等一些基础概念,用最易懂的方式带你入门大模型。
在这里插入图片描述

👉②.进阶篇👈

接下来是进阶篇,你将掌握RAG、Agent、Langchain、大模型微调和私有化部署,学习如何构建外挂知识库并和自己的企业相结合,学习如何使用langchain框架提高开发效率和代码质量、学习如何选择合适的基座模型并进行数据集的收集预处理以及具体的模型微调等等。
在这里插入图片描述

👉③.实战篇👈

实战篇会手把手带着大家练习企业级的落地项目(已脱敏),比如RAG医疗问答系统、Agent智能电商客服系统、数字人项目实战、教育行业智能助教等等,从而帮助大家更好的应对大模型时代的挑战。
在这里插入图片描述

👉④.福利篇👈

最后呢,会给大家一个小福利,课程视频中的所有素材,有搭建AI开发环境资料包,还有学习计划表,几十上百G素材、电子书和课件等等,只要你能想到的素材,我这里几乎都有。我已经全部上传到优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】
在这里插入图片描述
相信我,这套大模型系统教程将会是全网最齐全 最易懂的小白专用课!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值