RAG 实战:构建智能知识库问答系统

RAG(Retrieval-Augmented Generation,检索增强生成)是当前 AI 应用最热门的技术之一。它解决了 LLM 知识截止和幻觉问题,让 AI 能够基于你的私有数据回答问题。

## 什么是 RAG?
RAG = 检索 + 生成:用户问题 → 检索相关文档 → 拼接到 Prompt → LLM 生成回答

**核心优势:**
– 知识实时更新:不需要重新训练模型
– 减少幻觉:基于真实数据回答
– 领域定制:针对特定业务场景
– 数据隐私:数据不离开你的控制

## 核心组件

### 1. 文档加载器
“`python
from langchain.document_loaders import TextLoader, PDFLoader, WebBaseLoader

loader = TextLoader(“docs/intro.md”)
docs = loader.load()
“`

### 2. 文档分割器
“`python
from langchain.text_splitter import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
splits = splitter.split_documents(docs)
“`

### 3. 嵌入模型
“`python
from langchain.embeddings import OpenAIEmbeddings
from langchain.embeddings import HuggingFaceEmbeddings

embeddings = OpenAIEmbeddings()
# 或使用开源 Embeddings
embeddings = HuggingFaceEmbeddings(
model_name=”sentence-transformers/all-MiniLM-L6-v2″
)
“`

### 4. 向量数据库
支持 Chroma、Pinecone、Qdrant、Weaviate、FAISS 等。

## 实战项目:企业知识库问答

### 项目结构
“`
rag-knowledge-base/
├── config.py # 配置
├── document_loader.py # 文档加载
├── document_chunker.py # 文档分割
├── vector_store.py # 向量存储
├── qa_chain.py # 问答链
└── main.py # 主程序
“`

### 完整代码实现

**config.py:**
“`python
import os
from dotenv import load_dotenv
load_dotenv()

LLM_MODEL = os.getenv(“LLM_MODEL”, “gpt-4o”)
OPENAI_API_KEY = os.getenv(“OPENAI_API_KEY”)
EMBEDDING_MODEL = “text-embedding-3-small”
CHROMA_PERSIST_DIR = “./chroma_db”
CHUNK_SIZE = 1000
CHUNK_OVERLAP = 200
TOP_K = 3
“`

**document_processor.py:**
“`python
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings

class DocumentProcessor:
def __init__(self, config):
self.embeddings = OpenAIEmbeddings(model=config.EMBEDDING_MODEL)
self.splitter = RecursiveCharacterTextSplitter(
chunk_size=config.CHUNK_SIZE,
chunk_overlap=config.CHUNK_OVERLAP
)

def process_documents(self, documents):
return self.splitter.split_documents(documents)

def create_vectorstore(self, documents, persist=True):
splits = self.process_documents(documents)
vectorstore = Chroma.from_documents(
documents=splits,
embedding=self.embeddings,
persist_directory=self.config.CHROMA_PERSIST_DIR if persist else None,
collection_name=”knowledge_base”
)
return vectorstore
“`

## 优化技巧
– **混合检索:** 向量检索 + BM25 关键词检索
– **重排序(Rerank):** 使用 CohereRerank 优化结果
– **查询扩展:** 生成多个相关查询提高召回率
– **缓存:** Redis 缓存常见问题

## 部署选项
– 本地部署:Streamlit / Gradio
– 云部署:Vercel + Vercel AI SDK / FastAPI + Docker
– 微服务:文档处理、向量检索、LLM 推理分离

## 成本优化
– 选择合适的 Embedding 模型(OpenAI text-embedding-3-small 最便宜,或使用开源模型)
– 缓存常见问题
– 批量处理减少 API 调用
– 混合检索降低对 LLM 的依赖

RAG 实战:构建智能知识库问答系统

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Scroll to top
Copyright © 2026 Claude Code实战记录. 粤ICP备19017554号