什么是 RAG RAG(Retrieval-Augmented Generation,检索增强生成)是让大模型"阅读"你的私有文档并回答问题的技术方案。它的工作流程是:
用户提问 → 在文档中检索相关内容 → 把检索结果和问题一起发给 LLM → LLM 生成答案 RAG 解决了大模型的两个核心问题:知识截止日期和私有数据访问。
技术栈选型 组件 推荐方案 替代方案 LLM Claude API / DeepSeek OpenAI GPT-4o 框架 LangChain LlamaIndex 向量数据库 Chroma(轻量) Pinecone, Milvus, Weaviate Embedding 模型 text-embedding-3-small bge-large-zh(中文) 文档解析 Unstructured / PyPDF LangChain 内置 loader 第一步:环境搭建 pip install langchain langchain-community chromadb openai unstructured 第二步:加载和切分文档 from langchain.document_loaders import DirectoryLoader, TextLoader from langchain.text_splitter import RecursiveCharacterTextSplitter # 加载文档 loader = DirectoryLoader('./docs/', glob="**/*.txt", loader_cls=TextLoader) documents = loader.load() # 切分文档(每个 chunk 约 500 字,重叠 50 字) text_splitter = RecursiveCharacterTextSplitter( chunk_size=500, chunk_overlap=50, separators=["\n\n", "\n", "。", ",", " ", ""] ) chunks = text_splitter.split_documents(documents) print(f"共加载 {len(documents)} 个文档,切分为 {len(chunks)} 个片段") 第三步:向量化存储 from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma embeddings = OpenAIEmbeddings(model="text-embedding-3-small") vectorstore = Chroma.from_documents( documents=chunks, embedding=embeddings, persist_directory="./chroma_db" ) 第四步:构建问答链 from langchain.chains import RetrievalQA from langchain.chat_models import ChatOpenAI llm = ChatOpenAI(model="gpt-4o", temperature=0) qa_chain = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", retriever=vectorstore.as_retriever(search_kwargs={"k": 3}) ) # 提问 answer = qa_chain.run("公司年假政策是什么?") print(answer) 第五步:优化检索质量 基础 RAG 的检索质量通常不够好,三个优化技巧:
...