链载Ai

标题: RAG系统全景:架构详解与落地实践指南 [打印本页]

作者: 链载Ai    时间: 前天 19:23
标题: RAG系统全景:架构详解与落地实践指南

一、为什么需要RAG

在大模型实际落地的时候,存在一些问题,主要集中在以下方面:

RAG的出现,标志着LLMs从静态知识库向动态、自适应系统转变的关键一步。LLMs在处理知识密集型任务时,其固有的静态知识限制(如幻觉和知识过时)促使业界寻求一种能够注入实时、外部和可验证信息的方法。RAG正是这种需求的直接产物,它作为一项重要的架构创新,弥合了预训练的静态知识与不断演进的现实世界信息之间的鸿沟。这种能力使得LLMs能够更好地应对不断变化的信息环境,并提供更可靠的响应。

24年的ChatGLM的一次调研:

RAG的核心思想

二、RAG核心组成与通用设计

一个完整的RAG系统通常包含两个核心流程:数据准备(离线)和推理检索(在线)

RAG的核心接口,RAAS,(Rag As a Service)提供的接口,当然平台能力更强的可以支持自定义模型、自定义分片等。但是核心就是构建和召回;

三、一些优化RAG系统的方法

构建:Parsing解析

“垃圾进,垃圾出 (Garbage In, Garbage Out)

如果从一开始就无法准确、完整地从原始文件中提取信息并进行清洗,那么后续所有的努力(分块、嵌入、检索)都建立在一个摇摇欲坠的基础上。

这个阶段的任务不是简单地把文件里的字“抠”出来,而是要模拟人类阅读文档的方式,理解其结构、清理无关信息,并处理非文本内容。

解决方案:使用能够理解文档视觉布局和文档对象模型 (DOM) 的现代解析工具。核心工具推荐:

这里也可以训练一些文档布局模型,参考:https://www.textin.com/

类别 (Category)技巧/策略 (Technique/Strategy)核心问题 (Core Problem)解决方案与核心操作 (Solution & Key Action)
按文件类型加载处理 PDF 文件
PDF 可能是扫描件,纯文本提取会失败或为空。
区分文本型与扫描型
。对扫描件必须使用OCR (光学字符识别)引擎来提取文字。
处理 HTML/网页
网页包含大量导航栏、广告等无关噪声,会干扰核心内容。
**去除样板代码 (Boilerplate Removal)**。专注于提取<main>,<article>等核心内容标签,剔除噪声。

处理结构化数据 (CSV/JSON)
原始数据行(如Laptop,999)对语言模型不友好,缺乏语义。
转化为自然语言
。将每行数据转换成一个完整的句子(例如:"产品是 Laptop,价格是 999")。

通用预处理精细化文本清洗
提取出的文本存在格式错误、乱码或 OCR 识别错误。
规范化文本
。去除多余空白/换行;修复编码问题;修正常见的 OCR 错误(如 '1' vs 'l')。
表格转化
语言模型无法直接理解表格的二维结构关系。
转化为 Markdown 格式
。将表格数据转换为 LLM 在训练中熟悉的 Markdown 语法,以保留其结构。

图像/图表处理
图表、流程图中的关键信息是视觉的,无法被文本模型检索。
**图像转文本 (Image-to-Text)**。使用多模态模型 (如 GPT-4V) 为图片生成详细的文字描述,并将其注入到文本流中。

元数据绑定
孤立的文本块缺乏上下文,导致无法追溯来源和进行有效过滤。
为每个块附加“身份证”
。绑定来源信息(文件名、页码)、结构信息(章节)、时间信息(创建日期)等元数据。

构建:Chunk切分

分段方式工作原理比喻
固定长度 (Fixed-Size)
按固定字符数(如1000个字符)切分,一刀切。
一个蒙着眼睛的工人,用一把尺子量长度,到地方就用剪刀剪开,不管剪到的是什么。
递归字符 (Recursive)
优先按段落、再按句子、最后按单词切分,试图保持句子完整。
一个有基本规则的工人,他会优先沿着段落的缝隙剪,如果不行再沿着句号剪。
Agentic Chunking
一个LLM Agent顺序阅读文本,每读一小段就自己判断:“这段话的意思说完了吗?它是一个独立完整的知识点吗?” 然后再决定是继续读下去,还是在这里切一刀。
一位学识渊博的图书管理员
,他会完整阅读一个章节或段落,理解其核心思想后,用一张书签精准地标记出一个独立、完整的知识单元。每做一个切分决策,都需要调用一次LLM API,成本和耗时都太高;

线上主流还是递归分段为主,保持段落的长度256~1024 个字符,看场景:线上一般也会配合Context Expand。

可以自己跑评估脚本,在相同的Context长度下,什么字符扩大几个窗口可以达到最好的效果。比如context总长度在10000的时候,chunk多少合适,expand几个窗口合适。

实验表明,512的块大小在忠实度(Faithfulness)和相关性(Relevancy)上表现最佳。在嵌入模型选择上,LLM-Embedder在性能上与更大的bge-large相当,但模型尺寸小得多,是性能和效率的绝佳平衡点。

https://arxiv.org/pdf/2407.01219#page=9.46

构建:嵌入模型

所有涉及到模型的肯定都要考虑下性能RT、效果:

如何选择一个Embeding模型:https://weaviate.io/blog/how-to-choose-an-embedding-model

决策因素 (Decision Factor)核心问题 (Key Question)推荐做法 (Recommended Action)
1. 性能与准确率
(Performance & Accuracy)
模型能否精准理解语义,找到最相关的信息?
查阅MTEB排行榜
。重点关注与RAG最相关的“检索(Retrieval)”任务得分,选择排名靠前的模型。
2. 成本
(Cost)
我的预算是多少?是选择一次性硬件投入还是持续性API支出?
快速验证/原型阶段
:使用API模型(如OpenAI, Cohere)。生产环境/长期项目:优先考虑开源模型(如BGE)以控制总成本。
3. 领域适应性
(Domain Specificity)
我的知识库是否包含大量专业术语(如医疗、法律、金融)?
优先选择可微调的开源模型
。对模型进行领域微调(Fine-tuning)是解决专业领域问题的最有效方法。
4. 语言支持
(Language Support)
我的应用需要支持哪些语言?是否需要跨语言搜索?
单一语言应用
:选择该语言的顶尖模型(如中文选BGE-zh)。多语言/跨语言应用:选择专门的多语言模型。
5. 速度与延迟
(Speed & Latency)
用户查询的实时响应速度要求有多高?
在满足性能要求的前提下,选择能提供可接受延迟的模型。可以在性能和速度间做权衡(如largevs.small模型)。
6. 隐私与控制权
(Privacy & Control)
我的数据是否敏感?能否发送给第三方服务商处理?
处理敏感数据
(如个人信息、企业机密、政府文件)时,必须选择可自托管的开源模型

Embeding模型选择的路径:

为什么近期大厂都在做Embedding模型?

如果说大型语言模型(LLM)是AI时代的“大脑”,那么Embedding模型就是连接这个“大脑”与现实世界海量信息的“神经网络”和“感官系统”。大厂们意识到,谁掌握了最高效、最精准的Embedding技术,谁就控制了AI应用落地的“咽喉要道”。

大厂们集体下场“卷”Embedding模型,是一场围绕AI时代核心基础设施的“圈地运动”。它们不仅仅是在竞争一个技术工具,更是在争夺未来十年AI生态的主导权、话语权和商业入口。而“刷榜”则是这场激烈竞争中,最耀眼的“广告牌”和最直接的“战报”。

  1. 战略层面:抢占AI生态的“入口”和“基础设施”:Embedding是构建几乎所有高级AI应用的第一步。一旦开发者习惯了你的Embedding模型,极大概率会继续使用你生态中的LLM、向量数据库和云服务,形成强大的生态锁定。它正在成为AI原生时代的基础设施,控制了它,就等于控制了信息的表示和流动方式。






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5