news 2026/10/31 14:51:17

传统 RAG 项目技术解析:从架构到落地实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
传统 RAG 项目技术解析:从架构到落地实践

1. 什么是传统 RAG

检索增强生成(Retrieval-Augmented Generation,简称 RAG)是一种将信息检索与大语言模型生成相结合的技术范式。它的核心思想是:在模型回答用户问题之前,先从外部知识库中检索出与问题最相关的文档片段,再将这些片段作为上下文注入提示词(Prompt),引导大语言模型基于“查到的资料”生成答案。

传统的 RAG,通常指的是Naive RAG(朴素 RAG)这一经典实现路线。它的整体流程相对直接:索引构建、向量检索、上下文拼接、答案生成。虽然近年来出现了 GraphRAG、Agentic RAG、Self-RAG 等更复杂的演进形态,但传统 RAG 依然是理解这一领域的最佳起点,也是很多中小规模知识问答系统落地时的首选方案。

传统 RAG 缓解了大语言模型的三个核心痛点:

  • 知识时效性问题:模型训练数据存在截止时间,RAG 通过检索最新文档补足外部知识。
  • 幻觉问题:让模型基于检索到的真实资料作答,而非仅凭参数记忆“编造”答案。
  • 私有知识利用问题:企业内部的制度、手册、专有文档无法直接参与模型训练,RAG 提供了一种低成本接入方式。

2. 传统 RAG 的整体架构

传统 RAG 项目通常由离线与在线两条链路组成,整体架构可以抽象为“准备知识”和“回答提问”两个阶段。

文档库

文档切分

文本向量化

向量数据库索引

用户提问

问题向量化

向量相似度检索

Top-K 文档片段

拼接 Prompt

大语言模型生成答案

返回用户

上图可以分为两个部分:

  1. 离线索引阶段(上半部分):对文档进行预处理、切分、向量化,并写入向量数据库。
  2. 在线检索阶段(下半部分):将用户问题向量化,从向量库中召回相关片段,再交给 LLM 生成答案。

这种“检索 + 生成”的解耦设计,使得知识库可以随时更新,而无需重新训练模型,这也是 RAG 相比微调(Fine-tuning)的最大优势之一。

3. 核心工作流程

3.1 文档加载与解析

传统 RAG 项目通常从多种来源采集文档,常见的类型包括:

  • 纯文本文件(TXT、Markdown)
  • PDF 文档
  • Word 文档
  • HTML 网页
  • 结构化数据(数据库导出内容)

在实际项目中,文档解析需要处理表格、图片、页眉页脚等噪声信息。对于扫描版 PDF 或图片文档,还需预先进行 OCR 识别,将图片中的文字提取为可用文本。

3.2 文档切分(Chunking)

文档切分是将长文档拆解为适合检索和 LLM 上下文窗口的小片段。切分策略直接影响检索质量,常见方案包括:

  • 固定长度切分:按固定字符数或 Token 数切分,实现简单但可能切断语义。
  • 按段落或标题切分:利用文档结构切分,保留更完整的语义单元。
  • 重叠切分:在相邻片段之间保留一定重叠,避免关键信息被截断在边界处。

一个典型的切分示例为:每段 500 字符,相邻片段重叠 50 字符。切分后的片段被称为 Chunk,是后续向量化和检索的最小单元。

3.3 文本向量化(Embedding)

文本向量化的作用是:将自然语言文本映射为高维空间中的向量,使语义相近的文本在向量空间中距离更近。

传统 RAG 项目通常使用预训练的 Embedding 模型完成这一转换,主流选择包括:

  • OpenAI 的text-embedding-ada-002
  • 开源模型 BGE、M3E
  • 中文场景常用的bge-large-zh等

向量化的对象包括两个方面:

  1. 索引阶段:对每个文档 Chunk 生成向量,存入向量数据库。
  2. 查询阶段:对用户问题生成向量,用于后续相似度检索。

3.4 向量检索

向量检索是 RAG 引擎的核心能力之一。系统将问题向量与向量库中的文档向量进行相似度计算,返回最相近的 Top-K 个片段。

常用的相似度度量方式包括:

  • 余弦相似度(Cosine Similarity)
  • 欧氏距离(Euclidean Distance)
  • 内积(Inner Product)

在工程实现中,向量检索通常由专门的向量数据库承担,例如:

方案特点
FaissMeta 开源的高性能向量检索库,适合本地部署
Milvus分布式向量数据库,支持大规模数据
Chroma轻量级,适合原型开发
Pinecone云托管向量数据库,开箱即用
Elasticsearch + 向量插件适合已有 ES 体系的企业

3.5 Prompt 拼接与答案生成

检索完成后,系统将 Top-K 文档片段与用户问题一起组装成最终 Prompt,再调用大语言模型生成答案。一个典型的 Prompt 模板如下:

你是一个知识库问答助手。请严格依据以下参考资料回答用户问题, 如果资料中没有相关信息,请明确回答“暂无相关信息”,不要编造内容。 参考资料: {context} 用户问题:{question} 你的回答:

这种模板设计有两个关键目的:

  1. 明确要求模型“依据资料作答”,以降低幻觉概率。
  2. 为无法回答的场景预留退出路径,避免模型强行编造。

4. 传统 RAG 的技术栈

一个完整的传统 RAG 项目通常涉及以下技术组件:

  • 文档解析:PyMuPDF、pdfplumber、python-docx、BeautifulSoup
  • 文档切分:LangChain 的RecursiveCharacterTextSplitter、LlamaIndex 的SentenceSplitter
  • 向量化:OpenAI Embedding API、sentence-transformers
  • 向量存储:Chroma、FAISS、Milvus
  • 大模型接口:OpenAI API、通义千问、文心一言或本地部署模型
  • 编排框架:LangChain、LlamaIndex,或自行编写的轻量编排逻辑

以 Python 为例,一个最小化的传统 RAG 项目示例代码结构如下:

# 1. 文档加载与切分fromlangchain.text_splitterimportRecursiveCharacterTextSplitter chunks=RecursiveCharacterTextSplitter(chunk_size=500,chunk_overlap=50).split_documents(documents)# 2. 向量化并写入向量库fromlangchain.vectorstoresimportChromafromlangchain.embeddingsimportOpenAIEmbeddings vectorstore=Chroma.from_documents(documents=chunks,embedding=OpenAIEmbeddings())# 3. 检索相关片段retriever=vectorstore.as_retriever(search_kwargs={"k":4})docs=retriever.get_relevant_documents(user_question)# 4. 拼接 Prompt 并生成答案context="\n\n".join([d.page_contentfordindocs])prompt=build_prompt(context,user_question)answer=llm.generate(prompt)

5. 传统 RAG 的适用场景

传统 RAG 在以下场景中表现良好,适合作为第一版落地实现:

  • 企业内部知识库问答:规章制度、操作手册、FAQ 的智能问答。
  • 客服辅助系统:从产品文档中检索答案,辅助人工客服回复。
  • 文档摘要与信息查询:从大量报告中快速查找关键信息。
  • 学习辅助工具:基于教材、讲义进行知识点答疑。

对于知识结构相对扁平、答案集中在少量文档片段中的任务,传统 RAG 通常能以较低成本获得不错的回答质量。

6. 传统 RAG 的局限与不足

尽管传统 RAG 实现简单、见效快,但它也存在一些公认的短板:

6.1 检索质量受限

传统 RAG 本质上依赖单个问题向量与文档片段向量的相似度检索。当问题表述与文档用词不一致,或问题需要跨多个片段进行推理时,检索召回率会明显下降。

6.2 缺乏多跳推理能力

对于“A 公司去年的营收是多少?相比 B 公司有何差距?”这类需要跨文档比较、聚合的问题,传统 RAG 很难通过单轮检索直接获取完整答案。

6.3 知识库规模越大,检索精度越低

当知识库规模增大、文档片段数量增多时,如何从海量候选中精准召回 Top-K 片段成为主要瓶颈,容易出现“召回不相关片段”或“遗漏关键片段”的情况。

6.4 无法利用结构化关系

传统 RAG 将所有知识扁平化为文本片段,忽略了实体之间的关系、文档的层级结构等结构化信息。这也是后续 GraphRAG 等方案兴起的重要动因。

7. 从传统 RAG 到进阶 RAG

为了弥补传统 RAG 的不足,学术界和工业界发展出了一系列改进方案:

  • HyDE(假设性文档嵌入):先用 LLM 根据问题生成一段假设答案,再拿假设答案去检索,缓解问题与文档表述不一致的问题。
  • Rerank(重排序):先粗召回较多候选片段,再用交叉编码器进行精排,提升 Top-K 片段的相关性。
  • Self-RAG:让模型在生成过程中自行判断是否需要检索,并对检索结果进行反思与筛选。
  • GraphRAG:构建知识图谱,利用实体和关系进行结构化检索,提升多跳推理能力。

8. 总结

传统 RAG 是大语言模型应用工程化的重要起点。它以“文档切分 + 向量检索 + Prompt 增强生成”的清晰链路,用较低成本缓解了模型的私有知识接入与幻觉抑制问题,适合作为知识问答类项目的第一版实现。

理解传统 RAG 的工作流程和局限,是进一步学习 Rerank、Self-RAG、GraphRAG、Agentic RAG 等进阶技术的基础。对于大多数初期项目而言,传统 RAG 依然是一个务实且高效的选型方向。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/31 14:51:15

评论区线索的回复草稿:AI拟稿加人工改的流程

获客助手是一款Windows电脑软件,帮小商家在小红书和抖音评论区找意向客户。先说结论:找到人只是一半,头一句回复写得像真人在接话、先回应对方的问题,比一上来介绍产品更容易聊下去。我的做法是让软件先拟草稿,我改成自…

作者头像 李华
网站建设 2026/10/31 14:20:07

芯片烧录ISP、ICP、IAP区别详解:从原理到实战避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/31 14:16:38

微信聊天记录恢复全攻略:从应急处理到深度修复

1. 微信聊天记录恢复的常见场景与痛点分析微信作为国民级社交应用,聊天记录承载着大量重要信息。但数据丢失的情况时有发生——误删对话框、更换设备、系统崩溃都可能让珍贵记录瞬间消失。根据2026年第三方调研数据,78%的用户至少经历过一次聊天记录意外…

作者头像 李华
网站建设 2026/10/31 14:14:16

技能盘点实战:从模糊认知到清晰清单的完整拆解方法

1. 从“skills”这个词说起:为什么我决定认真拆解它“skills”这个词,乍一看太普通了。普通到你在任何一个招聘网站、任何一份简历模板、任何一次绩效面谈里都能看到它。它不像“Docker”“Kubernetes”“React”那样自带技术光环,也不像“副…

作者头像 李华