ESC
输入关键词搜索文章标题、摘要和内容
图灵派对 图灵派对
-- -- --
← 返回首页

RAG 实战:从零搭建企业知识库问答系统

RAG(Retrieval-Augmented Generation,检索增强生成)是目前让大模型落地企业场景最实用的技术方案之一。本文将带你从零开始,构建一套生产级的 RAG 知识库问答系统。

为什么需要 RAG?

大模型虽然强大,但存在几个核心问题:

  • 知识截止:训练数据有时间限制,无法获取最新信息
  • 幻觉问题:模型可能"一本正经地胡说八道"
  • 私有数据:企业内部知识不在模型训练集中

RAG 通过先检索、再生成的方式,让大模型基于真实文档来回答问题,有效解决以上问题。

整体架构

一个标准的 RAG 系统包含以下流程:

  1. 文档加载:读取 PDF、Word、网页等多种格式
  2. 文本分块:将长文档切分为合适大小的 Chunk
  3. 向量化:使用 Embedding 模型将文本转为向量
  4. 索引存储:存入向量数据库(ChromaDB / Milvus / Pinecone)
  5. 检索:根据用户 Query 检索最相关的 Chunk
  6. 生成:将检索结果作为上下文,交给 LLM 生成答案

代码实战

环境准备

pip install langchain chromadb openai tiktoken

文档加载与分块

from langchain.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

# 加载文档
loader = DirectoryLoader("./docs", glob="**/*.md")
documents = loader.load()

# 分块
splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50,
    separators=["\n\n", "\n", "。", "!", "?", ".", " "]
)
chunks = splitter.split_documents(documents)
print(f"共生成 {len(chunks)} 个文本块")

向量化与存储

from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma

embedding = OpenAIEmbeddings(model="text-embedding-3-small")
vectordb = Chroma.from_documents(
    documents=chunks,
    embedding=embedding,
    persist_directory="./chroma_db"
)

检索与问答

from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA

llm = ChatOpenAI(model="gpt-4o", temperature=0)
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vectordb.as_retriever(search_kwargs={"k": 4}),
    return_source_documents=True
)

result = qa_chain({"query": "我们的退款政策是什么?"})
print(result["result"])

优化策略

基础 RAG 搭建完后,以下是几个关键优化方向:

  • 混合检索:结合关键词检索(BM25)和向量检索
  • 重排序:使用 Cross-Encoder 对检索结果二次排序
  • Query 改写:用 LLM 对用户问题进行扩展和改写
  • 分块策略:根据文档类型选择合适的分块大小和重叠

RAG 的效果 80% 取决于检索质量,而不是生成模型的能力。把精力花在检索优化上。

总结

RAG 是目前让大模型安全、准确落地企业场景的最佳路径之一。从简单的文档问答开始,逐步添加混合检索、重排序等优化,你就能构建出一套可靠的企业知识库系统。