RAG检索增强生成基础
--- title: "RAG检索增强生成基础"
description: "全面介绍RAG系统的原理、组件和实现方法" tags: ["RAG", "检索增强生?, "LLM", "向量检?] category: "llm" icon: "🧠"
RAG检索增强生成基础
什么是RAG
RAG(Retrieval-Augmented Generation)是检索增强生成的缩写,通过结合外部知识检索和大语言模型生成,解决LLM知识过时和幻觉问题?
RAG工作流程
用户提问 ?查询向量??向量检??获取相关文档 ?组合Prompt ?LLM生成回答
简单RAG实现
from openai import OpenAI
import numpy as np
client = OpenAI()
def get_embedding(text):
response = client.embeddings.create(
model="text-embedding-3-small", input=text
)
return response.data[0].embedding
class SimpleRAG:
def __init__(self):
self.documents = []
self.embeddings = []
def add_documents(self, docs):
self.documents.extend(docs)
new_embs = [get_embedding(d) for d in docs]
self.embeddings.extend(new_embs)
def search(self, query, top_k=3):
query_emb = get_embedding(query)
similarities = [np.dot(query_emb, e) for e in self.embeddings]
top_indices = np.argsort(similarities)[-top_k:][::-1]
return [self.documents[i] for i in top_indices]
def answer(self, query):
context = "\n".join(self.search(query))
prompt = f"根据以下信息回答问题:\n{context}\n\n问题:{query}"
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}]
)
return response.choices[0].message.content
rag = SimpleRAG()
rag.add_documents([
"Python是一种广泛使用的编程语言?,
"机器学习需要大量训练数据?,
"深度学习是机器学习的子领域?
])
print(rag.answer("Python是什么?"))
使用LangChain构建RAG
from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
loader = TextLoader("documents.txt")
documents = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(documents)
vectorstore = FAISS.from_documents(chunks, OpenAIEmbeddings())
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
query = "什么是机器学习?
docs = retriever.invoke(query)
for doc in docs:
print(doc.page_content[:100])
RAG优化策略
- 文档分块:选择合适的chunk size和overlap
- *检索优?:使用混合检索、重排序
- 提示优化:设计更好的检索增强提?
- 评估:使用RAGAS等工具评估效?
总结
RAG是解决LLM知识局限性的有效方案,通过检索外部知识增强生成质量,是构建企业级AI应用的核心技术?