当前位置: 首页 > news >正文

RAG 落地实战——从文档解析到向量检索到重排序的代码示例

要构建一个工业级标准的 RAG(检索增强生成)系统,核心链路通常遵循:文档加载 → 文本分块 → 向量检索(粗排) → 重排序(精排) → LLM 生成的流程。下面我将为你提供一个基于 Python 和 LangChain 框架的完整实战代码示例。

核心环境准备与基础配置

首先,我们需要加载必要的库,并配置文本分块和向量检索的参数。合理的分块策略是保证检索质量的第一步。

importosimporttorchfromdotenvimportload_dotenvfromlangchain.text_splitterimportRecursiveCharacterTextSplitterfromlangchain_community.document_loadersimportTextLoaderfromlangchain_community.vectorstoresimportFAISSfromlangchain_community.embeddingsimportHuggingFaceBgeEmbeddings### 加载环境变量load_dotenv()### 全局配置DOC_PATH="./long_document.txt"FAISS_PATH="./faiss_rag_rerank_db"分块配置(滑动窗口),保证上下文连贯 CHUNK_SIZE=800CHUNK_OVERLAP=300检索配置 TOP_K_COARSE=20# 粗检索召回20条TOP_K_FINE=5# 重排序后保留5条重排序模型 RERANK_MODEL="BAAI/bge-reranker-v2-m3"

文档解析与向量库构建

将原始文档进行分块,并使用 Embedding 模型将其转化为向量存入 FAISS 向量数据库中。

defbuild_vector_db():loader=TextLoader(DOC_PATH,encoding="utf-8")docs=loader.load()# 文本分块splitter=RecursiveCharacterTextSplitter(chunk_size=CHUNK_SIZE,chunk_overlap=CHUNK_OVERLAP)chunks=splitter.split_documents(docs)# 加载 BGE 嵌入模型并构建向量库embedding=HuggingFaceBgeEmbeddings(model_name="BAAI/bge-small-zh-v1.5",model_kwargs={"device":"cuda"iftorch.cuda.is_available()else"cpu"},encode_kwargs={"normalize_embeddings":True})db=FAISS.from_documents(chunks,embedding)db.save_local(FAISS_PATH)print("✅ 向量库构建完成")returndb

多路召回与重排序(核心优化)

为了提升检索精度,生产环境中通常会采用“混合检索”(向量检索 + BM25 关键词检索),随后引入重排序模型(如 BGE-Reranker)对候选结果进行精细打分。

fromlangchain.retrieversimportBM25Retriever,EnsembleRetrieverfromlangchain_community.cross_encodersimportHuggingFaceCrossEncoderfromlangchain.retrieversimportContextualCompressionRetrieverfromlangchain.retrievers.document_compressorsimportCrossEncoderRerankdefget_reranked_retriever(split_docs):# 1. 初始化 BM25 稀疏召回bm25_retriever=BM25Retriever.from_documents(split_docs)bm25_retriever.k=10# 2. 初始化稠密向量召回vector_retriever=vector_db.as_retriever(search_kwargs={"k":10})# 3. 融合两路召回结果(混合检索)ensemble_retriever=EnsembleRetriever(retrievers=[bm25_retriever,vector_retriever],weights=[0.4,0.6])# 4. 加载 BGE 重排序模型,筛选最相关的 Top-Nrerank_model=HuggingFaceCrossEncoder(model_name=RERANK_MODEL)compressor=CrossEncoderRerank(model=rerank_model,top_n=TOP_K_FINE)# 5. 组合成带重排序的检索器compression_retriever=ContextualCompressionRetriever(base_retriever=ensemble_retriever,base_compressor=compressor)returncompression_retriever

LLM 生成与防幻觉控制

最后,将重排序后的高质量上下文与用户问题结合,通过精心设计的 Prompt 让大模型生成答案,并严格限制其“幻觉”。

fromlangchain.promptsimportPromptTemplatefromlangchain_openaiimportChatOpenAIdefgenerate_answer(query,context_docs):# 私有知识库专属 Prompt 模板template="""你是一个专业的企业内部助手,你需要根据提供的上下文信息回答用户的问题。 如果你不知道答案,就直接说你不知道,绝对不要编造答案。 上下文信息如下: {context} 用户问题: {question} 回答:"""prompt=PromptTemplate.from_template(template)# 拼接上下文context="nn".join([doc.page_contentfordocincontext_docs])formatted_prompt=prompt.format(context=context,question=query)# 调用大模型生成(设置低 temperature 降低随机性)llm=ChatOpenAI(model="gpt-3.5-turbo",temperature=0.1)response=llm.invoke(formatted_prompt)returnresponse.content

💡 生产环境避坑与优化建议防幻觉与溯源:在 Prompt 中必须强调“只根据资料回答”,并在返回答案时附带来源文档信息(如来源:《员工报销制度》第 2 条),这能大幅提升用户信任度并便于排查错误。。
缓存策略:对于“营业时间”、“报销流程”等高频问题,建议使用 Redis 等对检索结果或最终答案进行缓存,以降低响应延迟和 API 调用成本。
模型选择:重排序模型(Reranker)是提升准确率的关键。实测中,BGE-Reranker-v2-m3 的效果通常优于通用的 Cross-Encoder,生产环境建议优先采用。

http://www.jsqmd.com/news/1158373/

相关文章:

  • Coze与Dify实战指南:从零构建AI智能体与工作流
  • ABot-M0.5:面向移动操作的对齐感知世界动作模型
  • 菲涅尔透镜 3 焦点设计误区:忽略环带厚度对光斑均匀性的影响分析
  • 芝柏中国官方售后服务中心|地址与24小时客服电话权威信息公告(2026年7月更新) - 亨得利官方服务中心
  • 2026选购高端电视千万别踩这5个大坑!参数只是及格线,这3款才是真旗舰
  • 技术博客标题合规性与实操性判定标准
  • 2026年河北化肥染料品牌选择:专业公司电话与选型指南 - 品牌鉴赏官2026
  • Colab上部署K-Wave GPU加速声场仿真全指南
  • Skyvern:AI视觉驱动浏览器自动化,告别传统DOM定位
  • Linux部署BepInEx完整指南:从Wine配置到Docker容器化
  • 2026年7月芜湖凿岩机连接套/安徽凿岩机连接套优质制造商推荐_芜湖皖拓机械科技有限公司 - 品牌宣传支持者
  • 乱点软件下面的“市场”会扣钱吗,福汇 电脑版 MT4 常见误区有哪些?
  • OxyPlot终极指南:如何用.NET图表库打造专业级数据可视化应用
  • 利用开源大模型搭建私有化代码生成助手:绕过OpenAI依赖的实战指南
  • Qwen3.5+ncnn:轻量化多模态模型边缘部署实战指南
  • PyTorch 2.2.1 离线安装:Windows 10/11 环境 9 个依赖包手动安装顺序详解
  • Codex安全框架:沙箱、审批、网络策略与原生遥测四维协同
  • 深度观察:如何建立家庭药房与药品冷链系统?
  • 30分钟掌握Codex核心功能:AI编程实战指南
  • 2026职场人写总结报告,选哪款AI软件的免费额度够用不踩雷
  • Logisim CPU设计:指令周期4个时钟节拍与状态标志(OV/SG/CA/ZO)实现详解
  • ComfyUI手残版安装教程:零基础Windows一键部署指南
  • 运维手册:阿里云服务器安装thinkphp8配置出现错误解决方案
  • MySQL基础入门:从零理解数据库与SQL
  • STM32G070RB驱动压电蜂鸣器实现智能警报系统
  • 51单片机LCD1602 4线驱动实战:节省4个IO口,Proteus 8.15仿真实测
  • 嵌入式Qt远程调试七层地狱:SSH/gdbserver/eglfs全链路排错
  • TDSQL 与 TDSQL-C MySQL 版 binlog 策略对比:备份、清理与回档的 4 点核心差异
  • 布局性能分析:DevEco Studio 的布局检查器与鸿蒙 HarmonyOS ArkTS 原生学习
  • 2026秦皇岛正规漏水检测维修权威推荐-卫生间漏水免砸砖维修/厨房阳台墙面暗管漏水检测/屋顶外墙堵漏维修-防水补漏公司实测口碑榜推荐 - 即刻修防水