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 應用的核心架構。