RAG 原理
TIP
RAG(Retrieval-Augmented Generation)检索增强生成,通过检索外部知识库增强 LLM 的回答质量。
为什么需要 RAG?
直接问 LLM 的问题,如果知识不在训练数据中,回答可能不准确。 RAG 通过外部知识库提供上下文。
核心流程
用户问题 -> 检索知识库 -> 组合提示 -> LLM 生成 -> 最终回答基本实现
python
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import FAISS
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 加载和分割
with open("knowledge.txt", "r") as f:
text = f.read()
chunks = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50).split_text(text)
# 向量化存储
vectorstore = FAISS.from_texts(chunks, OpenAIEmbeddings())
# 检索 + 生成
retriever = vectorstore.as_retriever(k=3)
llm = ChatOpenAI(model="gpt-4")
def rag_query(question: str) -> str:
docs = retriever.get_relevant_documents(question)
context = "\n".join([d.page_content for d in docs])
prompt = f"""基于以下信息回答问题:
{context}
问题: {question}"""
return llm.invoke(prompt)RAG 的优势
- 知识更新:只需更新知识库
- 减少幻觉:基于事实检索
- 可溯源:答案可追溯到具体文档