RAG 企业应用实战
# RAG 企业应用实战 - 构建企业知识库问答系统
---
一、RAG 原理
什么是 RAG
RAG = Retrieval + Augmented + Generation
1. 检索:从知识库中检索相关文档 2. 增强:将检索结果作为上下文 3. 生成:基于上下文生成回答
为什么需要 RAG
- 解决大模型知识时效性问题
- 保护企业私有数据
- 减少 AI 幻觉
- 降低 Token 成本
二、技术架构
核心组件
文档 → 切分 → 向量化 → 向量数据库
↓
用户提问 → 向量化 → 相似度检索 → 上下文组装 → LLM → 回答
技术选型
| 组件 | 推荐方案 | |------|----------| | Embedding | OpenAI / BGE / M3E | | 向量数据库 | Chroma / FAISS / Milvus | | 框架 | LangChain / LlamaIndex | | LLM | GPT-4 / Claude / DeepSeek |
---
三、代码实现
安装依赖
pip install langchain langchain-openai chromadb
加载文档
from langchain.document_loaders import TextLoader, PDFLoader# 加载文本文件 loader = TextLoader('company_policy.txt') documents = loader.load()
# 加载 PDF loader = PDFLoader('employee_handbook.pdf') documents.extend(loader.load())
文档切分
from langchain.text_splitter import RecursiveCharacterTextSplittertext_splitter = RecursiveCharacterTextSplitter( chunk_size=500, chunk_overlap=50 )
chunks = text_splitter.split_documents(documents) print(f"切分后共 {len(chunks)} 个文本块")
向量化存储
from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chromaembeddings = OpenAIEmbeddings() vectorstore = Chroma.from_documents( chunks, embeddings, persist_directory='./chroma_db' )
检索问答
from langchain.chains import RetrievalQA from langchain.chat_models import ChatOpenAIllm = ChatOpenAI(model='gpt-4o-mini') qa_chain = RetrievalQA.from_chain_type( llm=llm, chain_type='stuff', retriever=vectorstore.as_retriever(search_kwargs={'k': 3}) )
# 提问 question = "公司的年假政策是什么?" answer = qa_chain.run(question) print(answer)
---
四、优化技巧
1. 合理设置 Chunk 大小
- 太小:信息碎片化
- 太大:检索精度下降
- 推荐:300-800 字符
2. 使用重排序
from langchain.retrievers import ContextualCompressionRetriever from langchain.retrievers.document_compressors import CohereRerankcompressor = CohereRerank() compression_retriever = ContextualCompressionRetriever( base_compressor=compressor, base_retriever=vectorstore.as_retriever() )
3. 添加元数据过滤
retriever = vectorstore.as_retriever(
search_kwargs={
'k': 5,
'filter': {'department': 'HR'}
}
)
---
五、企业部署
API 服务
from fastapi import FastAPIapp = FastAPI()
@app.post('/ask') async def ask(question: str): answer = qa_chain.run(question) return {'answer': answer}
Docker 部署
FROM python:3.11 WORKDIR /app COPY . . RUN pip install -r requirements.txt CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
---
六、常见问题
Q1:检索结果不准确?
- 检查 Embedding 模型是否适合中文
- 调整 chunk_size 和 overlap
- 使用重排序模型
Q2:回答有幻觉?
- 在提示词中明确要求"只根据提供的信息回答"
- 降低 temperature 参数
- 添加引用来源
作者:廖万里
本文链接:https://www.kkkliao.cn/?id=669 转载需授权!
版权声明:本文由廖万里的博客发布,如需转载请注明出处。



手机流量卡
免费领卡
号卡合伙人
产品服务
关于本站
