一、RAG技术背景与核心价值
1.1 大模型的「阿喀琉斯之踵」
- 知识截止:ChatGPT等大模型知识停留在2023年10月,无法处理2024年的实时数据
- 幻觉问题:在专业领域(医疗/法律)容易生成错误信息,如虚构「Googly Retriever」犬种
- 数据壁垒:企业私域数据无法安全注入通用大模型
1.2 RAG技术应运而生
2020年Facebook AI提出RAG(Retrieval-Augmented Generation),通过「检索外部知识+增强模型生成」解决上述问题。
核心公式: RAG = 向量检索系统 + LLM提示增强
举一个实际的例子,当我们向 LLM 提出一个问题,RAG 从各种数据源检索相关的信息,并将检索到的信息和问题注入到 LLM 提示中,LLM 最后综合这些信息给出最终答案。
有两个最著名的基于 LLM 的管道和应用程序的开源库——LangChain 和 LlamaIndex,受 ChatGPT 发布的启发,它们在 2022 年 10 月和 11 月创立,并在 2023 年获得大量采用。
1.3 RAG是什么
RAG(Retrieval-Augmented Generation,检索增强生成) 是一种结合检索技术与生成模型的技术架构,旨在通过动态引入外部知识库增强大语言模型(LLM)的生成能力。其核心思想是通过检索系统从外部数据源(如企业知识库、实时文档等)获取相关信息,并将检索结果作为上下文输入生成模型,以提高生成答案的准确性、时效性和专业性
1.4 RAG vs 模型微调
特性 | RAG | 模型微调 |
---|---|---|
知识更新 | 实时更新检索库 | 需重新训练模型 |
数据安全 | 私域数据本地化 | 需上传训练数据 |
响应速度 | 依赖检索效率 | 依赖模型推理速度 |
成本 | 低计算资源消耗 | 高训练成本 |
二、RAG核心技术原理与流程
2.1 核心技术组件
- Query(查询):用户输入的问题或请求,是整个流程的起点。
- LLM(大语言模型):对用户查询进行初步处理,利用自身预训练知识生成初步理解。
- Internal Knowledge(内部知识):大语言模型本身内置的固有知识。
- External Knowledge(外部知识):存储在外部的知识(如文档、数据库等),需通过检索获取。
- Retrieval(检索):从外部知识源中检索与用户查询相关信息的模块。
- Knowledge Integration(知识整合):将内部知识与检索到的外部知识进行融合处理。
- Answer(答案):经过整合处理后,输出给用户的最终回答。
2.1 RAG流程图
graph TD
A[用户查询] --> B(检索模块)
B --> C{向量数据库}
C --> D[相关文档块]
D --> E(生成模块)
E --> F[增强Prompt]
F --> G[LLM]
G --> H[最终答案]
I[知识库] --> J[索引模块]
J --> C
2.2 索引构建:让知识库「可搜索」
嵌入模型选择:
- 通用场景:BGE-large(中文)、text-embedding-ada-002(英文)
- 垂类场景:微调后的行业专用模型(如医疗领域MedBERT-Embedding)
向量数据库对比:
数据库 | 优势 | 适用场景 |
---|---|---|
Chroma | 轻量级本地部署 | 中小规模知识库 |
Milvus | 分布式检索 | 亿级向量规模 |
FAISS | 高效近似搜索 | 科研快速验证 |
- 数据加载
- 支持PDF/Word/HTML等格式,使用LangChain的
PyPDFLoader
、UnstructuredWordDocumentLoader
from langchain.document_loaders import PyPDFLoader
loader = PyPDFLoader("data.pdf")
documents = loader.load()
- 文本分块
- 固定大小分块(推荐256-512Token),保留20-50Token重叠
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=512, chunk_overlap=50
)
chunks = splitter.split_documents(documents)
- 文本嵌入
- 常用模型:BGE(中文首选)、OpenAI Embedding、M3E
- 向量化示例(HuggingFace BGE模型):
from langchain.embeddings import HuggingFaceBgeEmbeddings
embedder = HuggingFaceBgeEmbeddings(model_name="BAAI/bge-large-en-v1.5")
embeddings = embedder.embed_documents([chunk.page_content for chunk in chunks])
- 向量存储
- 常用数据库:Chroma(轻量本地)、Milvus(分布式)、Pinecone(云端)
import chromadb
client = chromadb.Client()
collection = client.create_collection("rag_demo")
collection.add(ids=ids, embeddings=embeddings, metadatas=metadatas)
2.3 智能检索:从千万级数据中精准召回
- 向量检索算法
- 余弦相似度(最常用)、欧式距离、HNSW近邻搜索
- 混合检索(向量检索+BM25关键词检索)提升召回率,结合向量检索(语义匹配)与关键词检索(精确匹配),通过α参数平衡权重
# LangChain混合检索配置
retriever = vectorstore.as_retriever(
search_kwargs={"k": 5, "alpha": 0.8} # α=1纯向量检索,α=0纯关键词检索
)
- 智能优化技术
- HyDE:让LLM生成假设答案再检索,如查询「量子计算优势」时,先生成「量子计算相比经典计算的优势包括…」再向量化
- RRF重排序:融合多个检索结果排名,提升相关性
2.4 增强生成:让LLM「站在知识肩膀上」
- Prompt模板设计三要素
- 知识约束:请仅基于提供的上下文回答问题`
- 格式要求:使用Markdown列表呈现答案
- 示例引导(少样本学习):
用户问题:狗的寿命有多长?
参考上下文:...(文档片段)
正确回答:小型犬平均12-15年,大型犬平均8-12年
- Prompt模板设计
template = """
【问题】{question}
【参考资料】{context}
请基于以上资料回答问题,若资料中无相关信息,请说明"知识库无答案"。
"""
- 生成策略
- 单轮生成:适合简单问答
- 多轮检索生成:复杂问题先拆解子查询,如「比较LangChain和LlamaIndex」拆分为两个子问题分别检索
- 上下文压缩技术
- 长文本截断:超过LLM上下文窗口(如4096 tokens)时,优先保留高相关度片段
- 摘要生成:通过T5模型对长文档生成摘要,压缩至有效信息密度≥80%
三、RAG系统优化实战技巧
3.1 分块策略优化
- 动态分块:根据文档结构(标题/段落)智能分割,避免语义断裂
- ChunkViz可视化:通过
pip install chunkviz
可视化分块效果,调整chunk_size
和overlap
参数
3.2 检索增强技术
- 分层索引
- 第一层:文档摘要向量索引(快速过滤无关文档)
- 第二层:段落细节向量索引(精准定位内容)
- 语义路由
- 根据用户意图自动选择数据源,如「2024年GDP数据」路由到统计局API,「产品手册问题」路由到企业知识库
3.3 生成质量优化
- 忠实度检查:在Prompt中添加「请确保答案来自提供的资料」指令
- 多模型融合:同时调用GPT-4和Claude,通过投票机制提升答案准确性
四、RAG系统评估体系
4.1 六大核心指标
指标 | 定义 | 评估方法 |
---|---|---|
上下文相关性 | 检索结果与问题的语义匹配度 | 人工标注+余弦相似度 |
答案忠实度 | 答案是否严格基于检索内容 | RAGAS工具自动化检测 |
答案正确性 | 答案事实准确性 | 对比真实数据/专家评分 |
上下文召回率 | 关键信息的检索完整度 | 召回率@K评估 |
响应延迟 | 端到端响应时间 | LangSmith性能监控 |
成本效率 | 单次查询的计算成本 | 向量数据库QPS监控 |
4.2 自动化评估工具
- LangSmith:全流程跟踪,支持自定义评估指标
- RAGAS:专注RAG三元组评估(问题-上下文-答案)
- Trulens:可视化检索链,快速定位检索漏洞
五、RAG实战:搭建企业知识库问答系统
5.1 技术栈选型
- LLM:智谱GLM-4(中文优化)
- 向量库:Chroma(本地部署)
- 框架:LangChain(快速集成)
5.2 核心代码实现
- 数据预处理
# 加载并分块
loader = PyPDFLoader("company_manual.pdf")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=512)
chunks = splitter.split_documents(docs)
# 生成嵌入并存储
embeddings = ZhipuAIEmbeddings()
vectordb = Chroma.from_documents(chunks, embeddings, persist_directory="db")
- 问答链构建
from langchain.chains import RetrievalQA
llm = ChatZhipuAI(model_name="glm-4-0520")
qa_chain = RetrievalQA.from_chain_type(
llm,
chain_type="stuff",
retriever=vectordb.as_retriever()
)
# 提问示例
question = "公司报销流程需要哪些材料?"
result = qa_chain.run(question)
5.3 部署优化
- 缓存机制:对高频问题缓存检索结果,降低向量库压力
- 流式输出:使用
stream=True
实现答案的实时流式返回,提升用户体验
六、RAG评估体系:如何量化系统性能
6.1 核心评估指标
维度 | 指标 | 评估方法 |
---|---|---|
检索质量 | 上下文相关度 | 人工标注+BM25/余弦相似度计算 |
生成质量 | 答案忠实度 | RAGAS评分(检查答案是否基于输入) |
整体效果 | 端到端准确率 | 对比人工答案与模型输出的F1分数 |
6.2 自动化评估工具
- RAGAS:专注RAG场景的多维度评估框架,支持自动生成评估报告
- LangSmith:与LangChain深度集成,可视化检索路径与生成过程
那么,如何系统的去学习大模型LLM?
作为一名从业五年的资深大模型算法工程师,我经常会收到一些评论和私信,我是小白,学习大模型该从哪里入手呢?我自学没有方向怎么办?这个地方我不会啊。如果你也有类似的经历,一定要继续看下去!这些问题啊,也不是三言两语啊就能讲明白的。
所以我综合了大模型的所有知识点,给大家带来一套全网最全最细的大模型零基础教程。在做这套教程之前呢,我就曾放空大脑,以一个大模型小白的角度去重新解析它,采用基础知识和实战项目相结合的教学方式,历时3个月,终于完成了这样的课程,让你真正体会到什么是每一秒都在疯狂输出知识点。
由于篇幅有限,⚡️ 朋友们如果有需要全套 《2025全新制作的大模型全套资料》,扫码获取~
👉大模型学习指南+路线汇总👈
我们这套大模型资料呢,会从基础篇、进阶篇和项目实战篇等三大方面来讲解。
👉①.基础篇👈
基础篇里面包括了Python快速入门、AI开发环境搭建及提示词工程,带你学习大模型核心原理、prompt使用技巧、Transformer架构和预训练、SFT、RLHF等一些基础概念,用最易懂的方式带你入门大模型。
👉②.进阶篇👈
接下来是进阶篇,你将掌握RAG、Agent、Langchain、大模型微调和私有化部署,学习如何构建外挂知识库并和自己的企业相结合,学习如何使用langchain框架提高开发效率和代码质量、学习如何选择合适的基座模型并进行数据集的收集预处理以及具体的模型微调等等。
👉③.实战篇👈
实战篇会手把手带着大家练习企业级的落地项目(已脱敏),比如RAG医疗问答系统、Agent智能电商客服系统、数字人项目实战、教育行业智能助教等等,从而帮助大家更好的应对大模型时代的挑战。
👉④.福利篇👈
最后呢,会给大家一个小福利,课程视频中的所有素材,有搭建AI开发环境资料包,还有学习计划表,几十上百G素材、电子书和课件等等,只要你能想到的素材,我这里几乎都有。我已经全部上传到CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
相信我,这套大模型系统教程将会是全网最齐全 最易懂的小白专用课!!