RAG实战案例
本文档提供了多个RAG系统的实际应用案例, 帮助您理解如何在不同场景中应用RAG技术。
案例1:企业知识库问答系统
项目背景
某科技公司需要构建一个内部知识库问答系统,帮助员工快速查找技术文档、产品说明和流程指南。
技术方案
1. 架构设计
# 系统架构
rag_system = {
"文档处理": {
"格式支持": ["PDF", "Word", "Markdown", "HTML"],
"分块策略": "语义分块,chunk_size=1000, overlap=200",
"元数据提取": "自动提取标题、作者、日期等信息"
},
"向量化": {
"模型": "text-embedding-ada-002",
"维度": 1536,
"数据库": "Pinecone"
},
"检索": {
"方法": "混合检索(向量+BM25)",
"top_k": 5,
"重排序": "Cross-encoder重排序"
},
"生成": {
"模型": "GPT-4",
"温度": 0.7,
"最大长度": 1000
}
}
2. 核心代码实现
from langchain.vectorstores import Pinecone
from langchain.embeddings import OpenAIEmbeddings
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
# 初始化向量数据库
embeddings = OpenAIEmbeddings()
vectorstore = Pinecone.from_documents(
documents=chunks,
embedding=embeddings,
index_name="company-knowledge-base"
)
# 创建检索链
qa_chain = RetrievalQA.from_chain_type(
llm=OpenAI(temperature=0.7),
chain_type="stuff",
retriever=vectorstore.as_retriever(
search_kwargs={"k": 5}
),
return_source_documents=True
)
# 查询
result = qa_chain({"query": "如何配置CI/CD流程?"})
print(result["result"])
print(f"来源文档: {result['source_documents']}")
实施效果
- ✅ 检索准确率:85%+
- ✅ 响应时间:少于2秒
- ✅ 用户满意度:90%+
- ✅ 减少人工查询时间:70%
案例2:法律文档智能检索系统
项目背景
律师事务所需要快速检索大量法律文档和判例,提高律师工作效率。
技术方案
1. 特殊处理
# 法律文档特殊处理
legal_doc_processor = {
"文档分类": {
"判例": "按法院级别、案件类型分类",
"法条": "按法律层级、章节分类",
"合同": "按合同类型、行业分类"
},
"分块策略": {
"判例": "按段落分块,保留完整案例",
"法条": "按条款分块,保留上下文",
"合同": "按章节分块,保留结构"
},
"检索优化": {
"法条引用": "识别和链接相关法条",
"案例关联": "建立案例之间的关联关系",
"时效性": "考虑法律条文的时效性"
}
}
2. 实现代码
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import FAISS
# 法律文档分块器
legal_splitter = RecursiveCharacterTextSplitter(
chunk_size=800,
chunk_overlap=150,
separators=["\n\n", "\n", "。", ";", " "]
)
# 处理法律文档
def process_legal_document(doc_path: str, doc_type: str):
"""处理法律文档"""
# 读取文档
content = read_document(doc_path)
# 提取元数据
metadata = extract_legal_metadata(content, doc_type)
# 分块
chunks = legal_splitter.create_documents(
[content],
metadatas=[metadata]
)
# 向量化
vectorstore = FAISS.from_documents(chunks, embeddings)
return vectorstore
# 智能检索
def legal_search(query: str, doc_type: str = None):
"""法律文档智能检索"""
# 查询扩展(添加法律术语)
expanded_query = expand_legal_query(query)
# 检索
results = vectorstore.similarity_search(
expanded_query,
k=5,
filter={"doc_type": doc_type} if doc_type else {}
)
# 重排序(考虑时效性)
ranked_results = rerank_by_relevance_and_recency(results, query)
return ranked_results
实施效果
- ✅ 检索准确率:90%+
- ✅ 响应时间:少于1.5秒
- ✅ 律师工作效率提升:60%+
- ✅ 案例查找时间减少:80%
案例3:医疗知识问答助手
项目背景
医院需要构建一个医疗知识问答系统,帮助医生快速查找疾病信息、用药指南和诊疗规范。
技术方案
1. 安全考虑
# 医疗系统安全配置
medical_rag_config = {
"数据安全": {
"加密": "端到端加密",
"访问控制": "基于角色的访问控制",
"审计日志": "完整的操作日志"
},
"准确性": {
"来源验证": "只使用权威医学资料",
"版本管理": "跟踪知识库版本",
"免责声明": "明确AI辅助性质"
},
"合规性": {
"HIPAA合规": "符合医疗数据保护要求",
"数据脱敏": "患者信息脱敏处理"
}
}
2. 实现代码
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory
# 医疗知识库检索
medical_retriever = medical_vectorstore.as_retriever(
search_type="mmr",
search_kwargs={
"k": 5,
"fetch_k": 10,
"lambda_mult": 0.5 # 多样性参数
}
)
# 对话记忆
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True,
output_key="answer"
)
# 医疗问答链
medical_qa_chain = ConversationalRetrievalChain.from_llm(
llm=OpenAI(temperature=0.3), # 低温度保证准确性
retriever=medical_retriever,
memory=memory,
return_source_documents=True,
verbose=True
)
# 安全查询处理
def safe_medical_query(query: str, user_role: str):
"""安全的医疗查询"""
# 检查权限
if not check_medical_access(user_role):
return {"error": "权限不足"}
# 添加免责声明
disclaimer = "本回答仅供参考,不能替代专业医疗建议。"
# 执行查询
result = medical_qa_chain({"question": query})
# 添加来源和免责声明
result["answer"] = f"{result['answer']}\n\n{disclaimer}"
result["sources"] = result["source_documents"]
return result
实施效果
- ✅ 知识检索准确率:88%+
- ✅ 医生查询效率提升:50%+
- ✅ 符合医疗合规要求
- ✅ 用户满意度:85%+
案例4:电商产品问答系统
项目背景
电商平台需要构建产品问答系统,帮助客户了解产品特性、使用方法和购买建议。
技术方案
1. 多模态支持
# 电商RAG系统配置
ecommerce_rag = {
"数据源": {
"产品描述": "文本数据",
"产品图片": "图像数据",
"用户评价": "文本数据",
"视频介绍": "视频数据"
},
"多模态处理": {
"图像理解": "使用CLIP模型",
"文本处理": "标准RAG流程",
"融合策略": "多模态特征融合"
},
"个性化": {
"用户画像": "基于历史行为",
"推荐策略": "协同过滤+内容推荐"
}
}
2. 实现代码
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
# 产品问答模板
product_qa_template = """基于以下产品信息回答问题:
产品名称:{product_name}
产品描述:{product_description}
产品规格:{specifications}
用户评价摘要:{reviews_summary}
问题:{question}
要求:
1. 基于产品信息回答
2. 如果信息不足,请说明
3. 提供购买建议(如适用)
回答:"""
# 创建问答链
product_qa_prompt = PromptTemplate(
template=product_qa_template,
input_variables=["product_name", "product_description",
"specifications", "reviews_summary", "question"]
)
product_qa_chain = LLMChain(
llm=OpenAI(temperature=0.7),
prompt=product_qa_prompt
)
# 产品检索和问答
def product_qa(product_id: str, question: str):
"""产品问答"""
# 检索产品信息
product_info = retrieve_product_info(product_id)
# 检索相关评价
reviews = retrieve_relevant_reviews(product_id, question)
# 生成回答
answer = product_qa_chain.run(
product_name=product_info["name"],
product_description=product_info["description"],
specifications=product_info["specs"],
reviews_summary=summarize_reviews(reviews),
question=question
)
return {
"answer": answer,
"product_info": product_info,
"related_products": find_similar_products(product_id)
}
实施效果
- ✅ 问答准确率:82%+
- ✅ 客户满意度:88%+
- ✅ 转化率提升:15%+
- ✅ 客服工作量减少:40%