找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4263

积分

1

好友

592

主题
发表于 1 小时前 | 查看: 2| 回复: 0

写在前面

春节前后事情扎堆,工作和生活都忙得不可开交。好不容易喘口气,我就动手折腾了一个与 RAG 相关的小项目。

项目规模不大,但完整走一遍流程之后,我对 RAG 的理解确实清晰了不少。所以想写几篇文章,试着用大白话把 RAG 这件事讲清楚。

如果你对这个词感到好奇,或者想深入了解它如何运作,希望这个系列能给你带来一些实实在在的启发。

本篇是系列的上篇,主要聚焦于 RAG 是什么、为什么需要它,以及其最核心的基础——离线数据处理的关键步骤。下篇则会详细拆解在线检索与生成的环节。


01 先认清现实:大模型的能力边界

在深入探讨 RAG 之前,我们有必要先达成一个共识:以 ChatGPT、文心一言等为代表的大语言模型,并非全知全能的神仙。

它们至少存在三个明显的短板:

问题类型 具体表现
不知道私有信息 你们公司的内部制度、未公开的产品规格文档,模型在训练时从未见过,自然无法给出准确回答。
会产生“幻觉” 模型可能会“一本正经地胡说八道”,生成看似合理但事实错误的答案,这是目前大模型公认的技术难题。
垂直领域深度不足 面对医学、法律、金融等高度专业化的问题时,其回答可能停留在科普层面,缺乏专业深度和准确性。

那么,如何弥补这些缺陷呢?思路很直接:给模型“开小灶”,为它提供相关的“参考资料”。这种“先检索资料,再基于资料生成答案”的技术框架,就是 检索增强生成(RAG)


02 RAG 到底是什么?一句话讲清

RAG,全称 Retrieval-Augmented Generation,中文译为“检索增强生成”。这个名词听起来有些高大上,但核心思想一句话就能说清:

让大模型先查资料,再回答问题。

整个 RAG 的工作流程通常分为两个相对独立的阶段:

阶段 核心任务 通俗比喻
离线数据处理 提前将各类文档资料进行整理、处理,构建成结构化的“知识库”。 相当于把常见问题与答案汇编成一本《标准答案手册》。
在线检索匹配 当用户提问时,系统先从知识库中检索出最相关的资料片段,再将这些片段连同问题一起交给大模型生成最终答案。 如同客服接到问题后,先翻阅手册找到依据,再组织语言回复客户。

本文将重点解析 离线数据处理 这一阶段,即如何将你手中的原始资料,转化为大模型能够高效利用的“知识库”。


03 场景代入:一个客服的“效率革命”

为了更直观地理解,让我们代入一个具体的场景。

🎬 场景设定:你是一名客服专员

假设你是公司的客服人员,每天需要处理大量客户咨询。很快你发现,许多问题其实是重复的:

  • “产品怎么退货?”
  • “保修期是多久?”
  • “如何申请开发票?”

于是,你做了一个聪明的决定:将常见问题及其标准答案整理成一个 Excel 表格。以后再遇到同类问题,直接复制粘贴,效率大大提升。

😫 遇到的新问题

然而,随着时间推移,新的烦恼出现了:

  • 表格越来越长,每天在浩瀚的行列中搜寻答案,视觉疲劳严重。
  • 客户的提问方式五花八门,明明答案就在表里,却因为关键词不匹配而搜不到。
  • 维护成本变高,每次产品更新,都需要手动同步多个地方的答案。

这时你可能会想:要是能有个 AI 助手,能自动理解问题、精准查找表格并生成回复,该多好?

🎉 RAG 登场!

此时,RAG 技术恰好能完美地解决你的痛点。它正是为了实现“基于专属资料库的智能问答”而设计的。那么,具体如何利用 RAG 来改造工作流呢?关键在于第一步:把散乱的资料变成 AI 能理解的“知识库”。


04 离线数据处理:打造专属知识库的四步法

第一步:收集原材料

首先,你需要汇集所有可能用到的资料,这些就是知识库的“原材料”。通常包括:

  • 你积累的《常见问题 & 标准答案》Excel 表格。
  • 公司产品的官方说明书、技术文档(PDF、Word格式)。
  • 产品图片、宣传册等其他相关材料。

第二步:文档解析——让机器“读懂”资料

收集来的资料格式各异,机器需要统一“理解”它们。这一步主要是格式转换:

文件类型 典型处理方式
图片(扫描件、截图) 使用 OCR(光学字符识别)技术,提取图片中的文字信息。
PDF / Word / 网页 将其内容转换为 Markdown 或纯文本格式。

为什么偏爱 Markdown? 因为 Markdown 的标题、列表、代码块等语法自带清晰的结构信息,能帮助大模型更好地理解文档的层次和重点,有利于后续的检索与理解。

第三步:文档清洗——去除杂质与噪音

解析出来的文本往往包含一些“杂质”,影响后续处理质量,需要进行清洗:

  • 冗余格式:多余的空格、无意义的换行符。
  • 识别错误:OCR 过程可能产生的错别字(如“已”识别成“己”)。
  • 无关内容:文档的页眉、页脚、广告等与核心业务无关的信息。
  • 乱码与特殊符号:转换过程中产生的无法识别的字符。

清洗的目的在于获得干净、规整的文本数据,减少检索时的干扰,提升准确性。

第四步:文档分块——决定成败的关键步骤

这是离线处理中最重要、最需要技巧的一环。分块策略的好坏,直接决定了后续检索效果的上限。

为什么要分块?
  1. 提升检索精准度:如果直接将一整篇长达数十页的文档存入知识库,当用户提问一个具体细节时,检索系统相当于在“大海捞针”,很难精准定位到包含答案的特定段落。将文档切成语义连贯的小块后,检索目标更明确,命中率更高。
  2. 适配模型上下文限制:大模型有固定的“上下文窗口”(即一次能处理的最大文本长度)。将超长的文档直接送入模型,它可能“顾头不顾尾”,无法有效利用全部信息。将信息分块输入,确保每次提供给模型的上下文都在其能力范围内。
分块有哪些实用技巧?
核心原则 具体解释 举例说明
保证语义完整性 尽量确保一个“块”包含一个相对完整的语义单元或主题。 ✅ 正确:将“退货政策”整个小节作为一块。
❌ 避免:把“退货需在商品签收后7天内提出……”这句话从中间切断分到两个块。
使用重叠窗口 相邻的块之间可以保留一小部分重叠内容(如前一块的后两句作为下一块的开头),这有助于模型理解上下文之间的关联,防止信息割裂。 块1结尾:“……以上是会员等级说明。”
块2开头:“会员等级说明。不同等级享受的权益如下:……”
特殊内容整体保留 对于代码片段、表格、数学公式等具有严密结构的内容,应尽量保持其完整性,单独成块。 ✅ 正确:将一段完整的函数定义和实现代码放在一起。
❌ 避免:把函数声明和函数体分割到两个不同的块中。
重要提醒:分块没有“标准答案”

⚠️ 必须认识到,不存在一个适用于所有场景的“黄金分块规则”。业务类型、文档性质、问答形式的不同,都会影响最佳的分块大小和策略。

例如,技术API文档可能适合按函数/接口分块,而一篇分析报告可能适合按章节分块。这是一个需要结合业务实际进行反复试验和调优的过程。多尝试不同的分块大小、重叠策略和切分依据(按段落、按标题、按句子),并通过实际的问答效果来评估和选择最优方案。在构建复杂系统时,可能会借助 LangChain 等框架提供的多种文本分割器来实验。


05 小结回顾

我们来梳理一下本篇的核心内容:

  1. 正视局限:大语言模型存在知识盲区(私有信息)、幻觉问题和垂直领域深度不足的短板。
  2. 理解 RAG:RAG 是一种“检索+生成”的框架,通过先检索相关资料再生成答案,来弥补大模型的上述不足。其流程分为离线的知识库构建和在线的检索生成两大部分。
  3. 掌握离线处理四步法:这是构建 RAG 系统的基石。
    • 收集:汇集所有相关的原始资料。
    • 解析:通过 OCR、格式转换等方式,让机器可读。
    • 清洗:去除文本中的噪音和无关信息,保证数据质量。
    • 分块:将长文档切分为语义完整的片段,这是影响后续检索效果最关键的一步,需根据业务场景精心设计和调试。

06 下篇预告

本篇详细讲解了如何“磨刀”——即离线准备知识库数据。这是整个 RAG 系统能够高效、准确运行的基石。

在下一篇中,我们将深入“砍柴”的环节——在线检索与生成。届时将探讨:当用户提出一个问题时,系统如何从知识库的海量文本块中快速找到最相关的内容?又如何将这些内容巧妙地组合并交给大模型,最终生成一个准确、流畅的答复?

如果你在构建自己的知识库过程中遇到了具体问题,或想了解更多实战技巧,欢迎在 云栈社区技术文档 板块与更多开发者交流讨论。敬请期待下一篇章。




上一篇:做题家爱情困境剖析:在北京上海,为何爱神总眷顾“浪费者”?
下一篇:ToC公司微服务与高并发场景下的Java生态技术栈解析
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-11 04:12 , Processed in 0.419966 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表