当前位置: 首页 > news >正文

RAG:让大模型“既懂又查”的智能系统

RAG:让大模型“既懂又查”的智能系统

一、RAG 是什么?

RAG(Retrieval-Augmented Generation)全称 检索增强生成,是近年来最受关注的大模型增强技术之一。
它的核心思想很简单:

“让大模型在生成答案前,先去知识库里查一查,再回答。”

传统的大语言模型(LLM)虽然强大,但它的知识是静态的,只包含训练截止时的数据。
如果我们想让模型回答公司内部文档、私有知识、或最新数据的问题,就会遇到两个问题:

  • 模型不知道这些信息

  • 即使知道,也可能记错或幻觉

RAG 正是为了解决这两个问题而诞生的。


二、RAG 的核心思想

RAG 把 LLM 的生成过程拆成了两步:

  1. Retrieval(检索)
    从外部知识库中找到与问题最相关的文档片段(如知识库、PDF、网页、数据库等)。

  2. Generation(生成)
    把检索到的内容与用户问题一起输入大模型,由模型基于这些上下文生成回答。

这相当于给模型“实时查资料”的能力,让它不必完全依赖自己的记忆,而是能“边查边答”。


三、RAG 的系统架构

一个典型的 RAG 系统由以下模块组成:

            ┌────────────────────────┐│        用户问题        │└──────────┬─────────────┘│▼┌────────────────────────┐│   向量化与语义检索层   │ ← 使用 Embedding + 向量数据库└──────────┬─────────────┘│  检索到相关文档片段▼┌────────────────────────┐│      大模型生成层      │ ← 使用 GPT / Llama / Qwen 等└──────────┬─────────────┘│  生成基于检索内容的回答▼┌────────────────────────┐│        输出答案        │└────────────────────────┘

核心组件说明:

模块功能常用工具
文本切片将长文档分成小块(chunk)LangChain TextSplitter、LlamaIndex NodeParser
向量化将文本转为语义向量OpenAI Embeddings、BGE、E5、MiniLM
向量数据库存储和检索相似文本FAISS、Milvus、Chroma、Weaviate
检索器根据问题找相关片段BM25、Dense Retriever、Hybrid Search
生成器结合上下文生成答案GPT-4、Qwen2、Llama3、Mistral
提示模板构造模型输入格式LangChain PromptTemplate

四、RAG 的关键技术细节

1️⃣ 文本切片与索引

大多数知识库文件都很长(例如一本技术手册),直接存储会导致检索不精确。
因此需要切片(chunking)

from langchain.text_splitter import RecursiveCharacterTextSplittersplitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
docs = splitter.split_text(long_text)

小技巧:chunk_size 400~800 通常效果较好,overlap 保留上下文连续性。


2️⃣ 向量化与存储

使用 Embedding 模型将文本转换为向量:

from langchain.embeddings import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()doc_vectors = [embeddings.embed_query(d) for d in docs]

然后将向量存入数据库(如 FAISS):

from langchain.vectorstores import FAISS
vector_db = FAISS.from_texts(docs, embeddings)

3️⃣ 检索增强生成流程

RAG 的核心查询流程如下:

from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAIllm = ChatOpenAI(model_name="gpt-4-turbo")
qa_chain = RetrievalQA.from_chain_type(llm=llm,retriever=vector_db.as_retriever(search_kwargs={"k": 3})
)query = "请解释RAG系统的检索机制"
result = qa_chain.run(query)
print(result)

模型在回答时会基于检索到的内容生成答案,从而显著减少“胡编乱造”。


五、RAG 的优势与局限

优势局限
知识实时更新,无需重新训练模型检索结果质量决定最终答案
可接入私有知识库大模型仍可能忽略部分上下文
减少幻觉,答案可溯源多文档整合时可能信息冲突
成本低、部署快检索速度取决于数据库性能

六、RAG 的改进方向

目前业界已经提出多种 RAG 改进方案:

  • HyDE(Hypothetical Document Embeddings):先让模型生成假设答案,再以其为查询进行检索。

  • Re-Ranking:使用 Cross-Encoder 对检索结果进行重排序。

  • Context Compression:对检索内容做摘要,节省上下文长度。

  • Agent-RAG:引入智能体(Agent),能根据任务动态选择检索策略。

  • Graph-RAG:结合知识图谱结构,增强检索逻辑关系。


七、实际应用场景

场景说明
📚 企业知识问答公司内部知识库检索,如政策、流程、文档
🧠 医学/法律咨询利用专业文献数据库生成解释性回答
💼 客服机器人自动回答客户常见问题
💾 数据报告分析结合检索与生成解释业务指标
🧩 教育问答系统从教材中检索知识并讲解

八、一个完整的最小可用RAG Demo

from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA# Step 1. 构建知识库
text = open("company_guide.txt", "r", encoding="utf-8").read()
splitter = RecursiveCharacterTextSplitter(chunk_size=600, chunk_overlap=100)
docs = splitter.split_text(text)embeddings = OpenAIEmbeddings()
vector_db = FAISS.from_texts(docs, embeddings)# Step 2. 构建 RAG 问答系统
llm = ChatOpenAI(model="gpt-4o-mini")
qa_chain = RetrievalQA.from_chain_type(llm=llm,retriever=vector_db.as_retriever(),chain_type="stuff"
)# Step 3. 查询
query = "公司员工请假制度是怎样的?"
print(qa_chain.run(query))

九、总结

要点内容
RAG 核心目标把外部知识引入生成流程
关键组成检索 + 向量数据库 + 大模型生成
典型框架LangChain、LlamaIndex、Haystack
优势实时知识、低成本、强扩展性
未来趋势Graph-RAG、Agent-RAG、自适应检索

http://www.dtcms.com/a/520036.html

相关文章:

  • cms网站建设的优缺点wordpress两个站合并
  • 数据结构——B树及其基本操作
  • java.text.MessageFormat的用法
  • 公司网站怎么做分录平面设计怎么网上接单
  • Java爬虫性能优化:以喜马拉雅音频元数据抓取为例
  • 使用 Java 对 PDF 添加水印:提升文档安全与版权保护
  • CRMEB-PHP订单改价模块详解
  • 丽水 网站建设注册163免费邮箱
  • 网站建设微信开发怎么做订阅号
  • TypeScript Array(数组)
  • E160系列全国产超外差无线射频模块技术解析与应用指南
  • 20251023在Ubuntu20.04.6上编译AIO-3576Q38开发板的Android14
  • 故障后数据备份
  • C++(23):lambda可以模版参数
  • 全平台Ansible一键安装脚本:Ubuntu/Debian/RHEL全支持
  • leetcode 23 合并K个升序链表
  • Element Plus组件v-loading在el-dialog组件上使用无效
  • 广州骏域网站阿里云可以建设多个网站
  • 青海网站建设与制作网站做多长时间才会有流量
  • 金坛建设局网站网站建设的主要功能有哪些
  • UTB(Ultra-Thin Body)技术:原理、制造与未来展望
  • 【咨询】安卓开发语言选择分析(202510)
  • 兵团住房和城乡建设局网站做性的视频网站
  • 经典路径求解问题——路径之谜
  • AI大模型微调简介
  • Cesium绘制线:从基础到高级技巧
  • uniapp 实现网络测速小功能
  • RK Android14 添加了从产品配置中删除特定APK的功能
  • 恢复 git push -force 覆盖的提交记录
  • 自己做的网站怎么删除建设网站 无法显示图片