← 返回首页
🧠

RAG检索增强生成基础

📂 llm ⏱ 1 min 177 words

--- 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优化策略

  1. 文档分块:选择合适的chunk size和overlap
  2. *检索优?:使用混合检索、重排序
  3. 提示优化:设计更好的检索增强提?
  4. 评估:使用RAGAS等工具评估效?

总结

RAG是解决LLM知识局限性的有效方案,通过检索外部知识增强生成质量,是构建企业级AI应用的核心技术?