前言
在大语言模型(LLM, Large Language Model)技术飞速发展的时代,我们常常惊叹于它们的语言生成能力。然而,模型的知识截止点和幻觉问题(Hallucination)仍然制约着其在专业领域的应用。如何让语言模型“学会”理解并利用外部知识,成为了一个关键问题。
RAG(Retrieval-Augmented Generation,检索增强生成) 正是解决这一挑战的重要技术。它结合了 信息检索(Retrieval) 与 生成模型(Generation) 的优势,通过在生成之前检索相关文档,显著提升回答的准确性与可解释性。
本文将以 LangChain + ChatGLM 为例,详细解析 RAG 的实现原理与技术细节,带你全面理解一个高效的知识问答系统是如何运作的。
1 RAG 原理解析
1.1 什么是 RAG?
RAG,全称 Retrieval-Augmented Generation(检索增强生成),是一种融合检索与生成的自然语言处理框架。
它的核心思想是:
“在生成答案前,先检索相关知识,再让模型基于检索结果进行生成。”
换句话说,RAG 并不是让语言模型“凭空回答”,而是让它先从外部知识库中找到与问题最相关的信息,再据此生成回答。这种方式显著提升了系统的可信度和领域适应性。
RAG 典型流程可分为两个阶段:
- Retrieval(检索阶段):从外部知识库中检索与问题最相关的内容。
- Generation(生成阶段):将检索到的内容与问题一起输入语言模型,生成回答。

1.2 为什么需要 RAG?
传统大语言模型(如 GPT、ChatGLM)虽然拥有庞大的训练语料,但仍存在:
- 知识过时:无法更新到最新事件。
- 领域知识缺乏:在专业领域表现不佳。
- 幻觉问题:可能生成逻辑合理但事实错误的回答。
RAG 则通过外部知识增强模型能力,实现以下优势:
- ✅ 回答可追溯(基于具体来源)
- ✅ 知识可更新(无需重新训练模型)
- ✅ 成本低、效率高(仅需维护知识库)
- ✅ 显著降低幻觉率
2 LangChain + ChatGLM 的整体架构
LangChain 是实现 RAG 思想的最佳工具之一。它为 LLM 应用提供了结构化、模块化的开发框架,使得“检索 + 生成”的流程可以清晰拆分并灵活组合。
结合 ChatGLM,本系统的流程如图所示,完整体现了一个典型的 RAG 管线。

| 步骤编号 | 模块名称 | 功能说明 |
|---|---|---|
| 1 | Local Documents | 本地文档输入,提供知识源。 |
| 2 | Unstructured Loader | 加载非结构化文档并提取文本。 |
| 3 | Text Splitter | 将长文本分割成小块。 |
| 4 | Text Chunks | 形成可处理的语义单元。 |
| 5 | Embedding | 将文本块转换为语义向量。 |
| 6 | VectorStore | 存储文本向量,形成知识库。 |
| 7 | Vector Similarity | 用于相似度匹配。 |
| 8 | Query | 用户输入问题。 |
| 9 | Query Embedding | 将问题转化为向量。 |
| 10 | Query Vector | 查询向量表示。 |
| 11 | Related Text Chunks | 检索到的相关知识内容。 |
| 12 | Prompt Template | 构建提示模板。 |
| 13 | Prompt | 将检索内容与问题拼接。 |
| 14 | LLM (ChatGLM) | 生成回答。 |
| 15 | Answer | 输出最终答案。 |
3 RAG 流程分解与实现细节
3.1 数据准备与加载(Retrieval 阶段)
3.1.1 文档加载(Unstructured Loader)
RAG 的第一步是建立知识源。LangChain 提供多种 Document Loader 来解析不同格式的文件:
TextLoader:纯文本。PDFLoader:自动提取 PDF 内容。UnstructuredLoader:支持复杂格式如 Markdown、HTML。
加载后,所有内容被统一转化为可操作的文本数据结构。
3.1.2 文本切分(Text Splitter)
由于 LLM 的输入限制(通常几千 token),长文档需要切分。LangChain 的 RecursiveCharacterTextSplitter 支持按段落或句子切分,保证每个文本块既不太长,又能保持语义完整。
3.2 向量化与知识库构建
3.2.1 文本向量化(Embedding)
在 RAG 中,Embedding(嵌入向量) 是实现语义检索的核心。
这一步通过模型(如 bge-large-zh、text2vec 或 sentence-transformers)将文本转为高维向量,例如:
文本块 → [0.13, 0.55, -0.71, ...]
这些向量可被理解为文本在语义空间中的位置,使得语义相似的内容彼此接近。
3.2.2 向量数据库(Vector Store)
所有向量化文本会被存储到数据库(如 FAISS、Chroma、Milvus)。
向量数据库提供两大能力:
- 高效检索:快速找到最相似的文本块;
- 存储映射:保留原文,方便后续生成参考。
3.3 查询与检索(Retrieval 阶段)
当用户输入问题(Query)后,系统会执行以下步骤:
- 将问题通过同样的 Embedding 模型转为 查询向量(Query Vector);
- 与知识库中所有向量计算相似度;
- 选出前若干条最相似的文本块(Related Text Chunks)。
这一步的结果,就是 RAG 流程中的 检索增强(Retrieval Augmented) 核心部分——让模型获得外部知识支持。
3.4 答案生成(Generation 阶段)
3.4.1 构建提示模板(Prompt Template)
检索到的相关内容会被拼接入提示模板中,例如:
已知以下内容:
{context}
请回答以下问题:
{question}
这样,模型就能基于真实资料生成有依据的答案。
3.4.2 模型生成(ChatGLM)
ChatGLM 作为中文大语言模型,具备良好的指令理解与回答生成能力。
输入模板后,它会结合检索文本与问题上下文进行推理,最终生成自然语言答案。
3.4.3 输出与反馈
最后,系统将生成的回答展示给用户。至此,一个完整的“检索增强生成”过程完成。
4 RAG 与 LangChain 的结合优势
LangChain 将 RAG 流程拆分为独立组件,使每个环节(如 Embedding 模型、数据库类型、LLM)都能灵活替换。例如:
- 向量模型可从
text2vec换为bge-m3 - 数据库可从
Chroma换为Milvus - 模型可从
ChatGLM换为GPT-4
ChatGLM 支持本地部署,无需联网即可运行,保障企业数据隐私与安全。
知识来源明确,用户可查看回答对应的文档片段,且知识库可随时更新,无需重新训练模型。
5 应用场景
LangChain + ChatGLM 的 RAG 架构在多个领域都有实际应用:
- 企业内部知识问答:快速查询内部手册、政策。
- 学术资料助手:基于论文库自动回答研究问题。
- 法律/医疗咨询系统:确保回答基于权威文档。
- 智能客服系统:以FAQ文档为知识源,自动应答。
结语
RAG(检索增强生成)代表了语言模型向“知识增强”方向的关键进化。
它不再依赖模型本身的记忆,而是通过检索外部知识,使语言模型能够:
“带着资料思考,而不是凭印象回答。”
借助 LangChain 的强大生态与 ChatGLM 的中文语言能力,我们能够轻松构建一个高效、可控、可扩展的智能问答系统。
未来,随着 Embedding 模型、向量数据库与本地LLM技术的持续进步,RAG 将成为企业知识智能化的标准架构。

4955

被折叠的 条评论
为什么被折叠?



