【一起来学AI大模型】RAG系统流程:查询→向量化→检索→生成
RAG系统通过四步流程实现知识增强:1)用户查询输入;2)使用嵌入模型将查询向量化;3)从向量数据库中检索最相关的文本片段;4)结合上下文生成最终答案。关键优势在于动态获取最新知识、答案可溯源及成本可控。典型技术栈包括LangChain、ChromaDB和LLM(如GPT-4),通过精准控制各环节,RAG在知识密集型任务中表现优于纯LLM方案。主要挑战包括向量化失真、检索相关性和生成幻觉等问题。
RAG(Retrieval-Augmented Generation)系统核心流程非常精准:
查询 → 向量化 → 检索 → 生成
这是 RAG 实现“知识增强”的关键路径。下面我们结合具体组件(如 ChromaDB、LangChain 检索器)详细拆解每个步骤,并补充关键细节:
1. 查询(Query)
-
用户输入:自然语言问题或指令(例如:
“量子计算的主要挑战是什么?”)。 -
核心任务:系统接收原始查询,准备进行语义理解。
-
潜在预处理:
-
拼写校正、敏感词过滤(可选)
-
意图识别(高级场景)
-
2. 向量化(Embedding)
-
目标:将文本查询转化为机器可理解的高维向量(Embedding)。
-
技术核心:
-
嵌入模型(Embedding Model):如 OpenAI
text-embedding-3-small、BAAI/bge-base-en-v1.5等。 -
同一模型原则:必须使用与构建知识库时相同的嵌入模型,保证向量空间一致性。
-
-
输出:
query_vector = embed_model.encode("量子计算的主要挑战是什么?") # 例如 [0.23, -0.87, ..., 0.45] (维度通常为 384~1536)
3. 检索(Retrieval)
-
目标:从知识库中找出与
query_vector最相关的文本片段(Context)。 -
核心组件协作:
组件 作用 示例(LangChain + ChromaDB) 向量数据库 存储知识库向量,执行高效相似性搜索 ChromaDB,Pinecone,Weaviate检索器 (Retriever) 封装搜索逻辑,返回 Document对象列表vectorstore.as_retriever(search_kwargs={"k": 5})搜索算法 计算相似度(余弦/L2距离),应用 HNSW 等近似最近邻算法加速 search_type="mmr"(兼顾相关性与多样性)元数据过滤 按来源/日期等条件筛选结果 filter={"source": "arxiv"} -
关键输出:
[ Document(page_content="量子比特的退相干问题是...", metadata={"source": "paper_2023.pdf"}), Document(page_content="错误校正需要大量物理量子比特...", metadata={"source": "tech_blog.md"}), ... # 返回 top-k 个相关片段 ]
4. 生成(Generation)
-
目标:将 原始查询 + 检索到的上下文 组合成 Prompt,输入大语言模型(LLM)生成最终答案。
-
技术流程:
-
Prompt 构造:
prompt_template = """ 基于以下上下文回答问题: {context} 问题:{question} """ prompt = prompt_template.format(context=retrieved_docs, question=user_query) -
LLM 推理:
-
模型:
GPT-4,Llama 3,Claude 3等。 -
关键参数:
temperature=0(减少随机性),max_tokens=500(控制长度)。
-
-
输出解析:提取结构化答案(如 JSON)或纯文本。
-
-
生成示例:
用户问题:量子计算的主要挑战是什么?
LLM 输出:
量子计算面临的核心挑战包括:-
量子退相干:量子比特极易受环境干扰导致信息丢失;
-
错误校正难题:需数千物理量子比特实现1个逻辑比特的容错;
-
低温要求:量子处理器需接近绝对零度的运行环境。
(来源:paper_2023.pdf, tech_blog.md)
-
关键优化点 & 常见挑战
| 环节 | 优化策略 | 挑战与风险 |
|---|---|---|
| 向量化 | 选用更强嵌入模型 领域微调 embedding |
长文本表征失真 多语言支持不足 |
| 检索 | 混合检索(关键词+向量) 重排序(Cohere Rerank) 元数据动态过滤 |
低相关性片段混入 知识库覆盖不全 |
| 生成 | 提示工程优化 上下文压缩(避免 token 超限) 让 LLM 引用来源 |
幻觉(Hallucination) 上下文理解偏差 |
完整技术栈示例(LangChain + ChromaDB)
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import OpenAIEmbeddings
from langchain_openai import ChatOpenAI
from langchain.chains import RetrievalQA
# 1. 加载向量数据库
embedding = OpenAIEmbeddings()
vectorstore = Chroma(persist_directory="./chroma_db", embedding_function=embedding)
# 2. 创建检索器(融合元数据过滤)
retriever = vectorstore.as_retriever(
search_kwargs={"k": 3, "filter": {"publish_year": {"$gte": 2022}}}
)
# 3. 构建 RAG 链
qa_chain = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-4-turbo"),
chain_type="stuff", # 简单拼接上下文
retriever=retriever,
return_source_documents=True
)
# 4. 执行全流程
query = "量子计算在药物研发中的最新进展?"
result = qa_chain.invoke({"query": query})
print(result["result"]) # 生成答案
print(result["source_documents"]) # 检索来源
为什么这个流程有效?
-
知识实时性:检索动态获取最新数据(无需重新训练 LLM)。
-
可信度提升:答案基于检索到的证据(可溯源)。
-
成本可控:避免将海量知识预注入 LLM 参数。
通过精准控制 查询→向量化→检索→生成 的每个环节,RAG 系统在知识密集型任务中显著优于纯 LLM 生成,成为企业级 AI 应用的核心架构。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)