RAG(五) 向量存储检索器(Retriever)的使用

在基于检索增强生成(RAG)的问答系统中,向量存储检索器(Retriever)是连接原始文档与大语言模型(LLM)的核心桥梁。它负责从海量的向量数据中快速找到与用户问题最相关的信息,为 LLM 提供精准的上下文,从而大幅提升回答的准确性和可靠性。本文将结合实战代码,深入讲解 Retriever 的核心概念、配置方法及在 RAG 流程中的应用。

一、Retriever 的核心作用

Retriever(检索器)是 LangChain 框架中专门用于从向量数据库中检索相关文档的组件,其核心作用可概括为:

  1. 语义匹配:将用户的自然语言问题转换为向量,与向量数据库中存储的文档向量进行语义相似度计算;
  2. 精准筛选:根据预设的规则(如相似度阈值)筛选出最相关的文档片段;
  3. 上下文供给:将筛选后的文档作为上下文传递给 LLM,确保 LLM 仅基于相关信息回答问题。

在 RAG 流程中,Retriever 是承上启下的关键:上接用户问题的向量转换,下接 LLM 的提示词构建,直接决定了最终回答的质量。

二、Retriever 的核心配置与参数

以 FAISS 向量数据库为例,我们基于实战代码讲解 Retriever 的核心配置方式。

1. 基础依赖准备

首先需要完成向量数据库的构建,这是 Retriever 工作的前提:

from langchain_community.document_loaders import PyPDFDirectoryLoader from langchain_community.vectorstores import FAISS from langchain_huggingface import HuggingFaceEmbeddings # 1. 加载PDF文档 loader = PyPDFDirectoryLoader("./pdf1/") docs = loader.load() # 2. 初始化本地嵌入模型 model_name = r'D:\本地模型\BAAI\bge-large-zh-v1___5' embeddings = HuggingFaceEmbeddings(model_name=model_name) # 3. 构建FAISS向量数据库 vectorStoreDB = FAISS.from_documents(docs, embedding=embeddings)

2. Retriever 的创建与关键参数

通过as_retriever()方法可将向量数据库转换为检索器,核心参数如下:

# 创建带相似度阈值的检索器 retriever = vectorStoreDB.as_retriever( search_type="similarity_score_threshold", # 检索类型 search_kwargs={"score_threshold": 0.3} # 检索参数 )
(1)search_type:检索类型

LangChain 支持多种检索策略,常用的有:

  • similarity:默认值,返回相似度最高的前 N 个文档(默认前 4 个);
  • similarity_score_threshold:按相似度阈值筛选,仅返回分数高于阈值的文档;
  • mmr:最大边际相关性检索,平衡相关性和多样性,避免返回重复内容。
(2)search_kwargs:检索参数

根据search_type的不同,需配置对应的参数:

  • search_type="similarity_score_threshold"时:
    • score_threshold:相似度阈值(0-1),值越高要求越严格,本文中设置为 0.3,表示仅返回相似度≥0.3 的文档;
  • search_type="similarity"时:
    • k:返回的文档数量,默认值为 4,可根据需求调整(如{"k": 5});
  • 通用参数:
    • fetch_k:在最终筛选前先获取的文档数量(用于 MMR 等策略),默认值为 20。

三、Retriever 在 RAG 流程中的实战应用

Retriever 的最终价值体现在完整的 RAG 问答链中,结合你提供的代码,完整的流程如下:

1. 完整代码实现

from langchain_core.prompts import ChatPromptTemplate from langchain_core.runnables import RunnableParallel, RunnablePassthrough from langchain_core.output_parsers import StrOutputParser from langchain_openai import ChatOpenAI import os from dotenv import load_dotenv from pydantic import SecretStr # 加载环境变量,初始化LLM load_dotenv() llm = ChatOpenAI( base_url="https://api.deepseek.com/v1", model="deepseek-chat", api_key=SecretStr(os.environ["DEEPSEEK_API_KEY"]), ) # 构建提示词模板 template = """ 只根据以下文档回答问题: {context} 问题:{question} """ prompt = ChatPromptTemplate.from_template(template) outputParser = StrOutputParser() # 构建检索+问答链 setup_and_retrieval = RunnableParallel( { "context": retriever, # 检索器负责获取context "question": RunnablePassthrough() # 透传用户问题 } ) # 完整的RAG链:检索 → 提示词构建 → LLM生成 → 结果解析 chain = setup_and_retrieval | prompt | llm | outputParser # 调用问答链 result = chain.invoke("关于劳动争议?") print(result)

2. Retriever 的执行逻辑

在上述代码中,Retriever 的执行流程为:

  1. 用户输入问题 “关于劳动争议?”;
  2. RunnableParallel将问题同时传递给 Retriever 和透传组件;
  3. Retriever 将问题转换为向量,在 FAISS 库中检索相似度≥0.3 的文档,作为context
  4. contextquestion一起传入提示词模板,生成包含上下文的完整提示词;
  5. LLM 基于提示词生成回答,最终通过StrOutputParser解析为字符串。

四、Retriever 的调优建议

  1. 相似度阈值调优score_threshold需根据实际场景调整,知识类问答建议设为 0.5-0.7(更严格),通用问答可设为 0.2-0.4(更宽松);
  2. 返回数量控制:使用similarity类型时,合理设置k值(建议 3-5),过多文档会增加 LLM 的上下文负担,过少可能遗漏关键信息;
  3. 检索策略选择:如果需要避免重复内容(如长文档问答),优先使用mmr检索类型;
  4. 嵌入模型匹配:Retriever 的检索效果依赖嵌入模型,建议使用与文档语言匹配的模型(如中文场景优先使用 bge-large-zh 系列)。

五、总结

Retriever 作为 LangChain RAG 体系的核心组件,其核心价值在于精准、高效地从向量数据库中检索相关文档。通过本文的讲解,我们可以明确:

  1. Retriever 的核心是基于向量的语义匹配,配置的关键是search_typesearch_kwargs
  2. similarity_score_threshold类型适合需要严格控制相关性的场景,similarity类型适合追求召回率的场景;
  3. Retriever 的调优需结合业务场景,平衡相关性和召回率,才能最大化 RAG 系统的回答质量。

在实际开发中,Retriever 的配置是 RAG 系统调优的核心环节之一,合理的检索策略能让 LLM 的回答既精准又全面。


总结

  1. 核心定位:Retriever 是 LangChain 中连接向量数据库与 LLM 的关键组件,负责基于语义相似度检索相关文档,为 RAG 提供精准上下文;
  2. 核心配置:通过as_retriever()创建,关键参数包括search_type(检索类型)和search_kwargs(如相似度阈值score_threshold、返回数量k);
  3. 实战要点:需根据业务场景调整检索策略(如严格匹配用similarity_score_threshold,追求召回率用similarity),并结合嵌入模型调优检索效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1120894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用ms-swift训练自己的智能推荐系统模型?

如何用 ms-swift 训练自己的智能推荐系统模型? 在电商、短视频、社交平台日益依赖“千人千面”推荐的今天,传统基于协同过滤或浅层模型的推荐系统正面临天花板:用户兴趣捕捉不精准、冷启动问题严重、内容多样性差。而大语言模型(L…

货币政策影响模拟与预测

货币政策影响模拟与预测:基于 ms-swift 框架的大模型工程化实践 在中央银行每一次利率调整的背后,都牵动着万亿级资本的流动、企业投资决策的转向以及普通家庭资产负债表的重估。如何精准预判“加息25个基点”对房地产、消费与通胀的连锁反应&#xff1…

RAG(六) 文本分割器的使用

我们上一节将外部数据源加载为 Document 对象。然而,这些文档通常太长,无法直接放入模型的上下文窗口。例如,一个几十页的 PDF 文档转换成文本后,会远远超出大多数模型的 4k、8k 或甚至 128k token 的限制。为了解决这个问题&…

GraphQL-Go自定义标量类型完整实现指南

GraphQL-Go自定义标量类型完整实现指南 【免费下载链接】graphql-go GraphQL server with a focus on ease of use 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-go GraphQL作为现代API开发的核心技术,其强大的类型系统为开发者提供了极大的灵活性。…

STM32 USB大容量存储驱动实现图解说明

让STM32变身U盘:深入拆解USB大容量存储驱动实现全流程 你有没有遇到过这样的场景? 设备在现场运行了一周,日志数据堆满了Flash,但导出却要靠串口专用工具,还得连上电脑跑脚本解析二进制文件——繁琐、低效、用户抱怨…

反检测浏览器终极实战指南:从零搭建到高效部署

反检测浏览器终极实战指南:从零搭建到高效部署 【免费下载链接】camoufox 🦊 Anti-detect browser 项目地址: https://gitcode.com/gh_mirrors/ca/camoufox 在当今严格的网络反爬虫环境下,传统的浏览器自动化工具已经难以应对复杂的检…

ms-swift助力企业构建私有化大模型平台

ms-swift助力企业构建私有化大模型平台 在当前AI技术加速落地的浪潮中,越来越多企业意识到:拥有一个自主可控、高效稳定的大模型能力平台,已不再是“锦上添花”,而是决定智能化竞争力的关键基础设施。然而现实却充满挑战——从选型…

终极小说阅读方案:OwlLook如何彻底解决你的找书烦恼?

终极小说阅读方案:OwlLook如何彻底解决你的找书烦恼? 【免费下载链接】owllook owllook-小说搜索引擎 项目地址: https://gitcode.com/gh_mirrors/ow/owllook 还在为找一本心仪的小说而辗转多个平台吗?OwlLook小说搜索引擎就是你的救星…

Ulysses与Ring-Attention序列并行技术详解

Ulysses与Ring-Attention序列并行技术详解 在大模型训练的工程实践中,一个日益棘手的问题正不断挑战硬件极限:如何高效处理超长序列输入? 随着Qwen3、Llama4等模型支持32k甚至131k上下文,多模态场景中一张高分辨率图像也能轻易生成…

高效M3U8下载神器:Fluent M3U8极速上手指南

高效M3U8下载神器:Fluent M3U8极速上手指南 【免费下载链接】Fluent-M3U8 A cross-platform m3u8/mpd downloader based on PySide6 and QFluentWidgets. 项目地址: https://gitcode.com/gh_mirrors/fl/Fluent-M3U8 Fluent M3U8是一款功能强大的跨平台流媒体…

如何快速搭建专业量化交易系统:终极安装配置指南

如何快速搭建专业量化交易系统:终极安装配置指南 【免费下载链接】vnpy 基于Python的开源量化交易平台开发框架 项目地址: https://gitcode.com/vnpy/vnpy 在当今数字化交易时代,拥有一个稳定可靠的量化交易框架已成为专业投资者的标配。作为国内…

艾尔登法环存档编辑器终极指南:3步掌握游戏数据修改

艾尔登法环存档编辑器终极指南:3步掌握游戏数据修改 【免费下载链接】ER-Save-Editor Elden Ring Save Editor. Compatible with PC and Playstation saves. 项目地址: https://gitcode.com/GitHub_Trending/er/ER-Save-Editor 还在为艾尔登法环中反复刷装备…

WeTTY浏览器终端完整部署指南:5分钟搭建专业Web终端环境

WeTTY浏览器终端完整部署指南:5分钟搭建专业Web终端环境 【免费下载链接】wetty Terminal in browser over http/https. (Ajaxterm/Anyterm alternative, but much better) 项目地址: https://gitcode.com/gh_mirrors/we/wetty 想要在任何地方通过浏览器访问…

SGLang引擎集成实战:ms-swift推理延迟降低50%

SGLang引擎集成实战:ms-swift推理延迟降低50% 在大模型应用日益普及的今天,用户对响应速度的要求已经从“能出结果”转向“秒级甚至毫秒级反馈”。尤其是在智能客服、实时创作助手和多轮对话系统中,哪怕几百毫秒的延迟差异,都可能…

Qwen3Guard-Gen-0.6B:颠覆性轻量级AI安全检测解决方案

Qwen3Guard-Gen-0.6B:颠覆性轻量级AI安全检测解决方案 【免费下载链接】Qwen3Guard-Gen-0.6B 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3Guard-Gen-0.6B 在生成式AI技术迅猛发展的当下,内容安全风险已成为制约行业规模化应用的关键…

Calibre电子书转换终极指南:5分钟搞定所有格式兼容问题

Calibre电子书转换终极指南:5分钟搞定所有格式兼容问题 【免费下载链接】calibre The official source code repository for the calibre ebook manager 项目地址: https://gitcode.com/gh_mirrors/ca/calibre 还在为不同设备上的电子书格式不兼容而头疼吗&a…

Positron数据科学IDE终极实战指南:3步解决你的数据混乱问题

Positron数据科学IDE终极实战指南:3步解决你的数据混乱问题 【免费下载链接】positron Positron, a next-generation data science IDE 项目地址: https://gitcode.com/gh_mirrors/po/positron 还在为数据科学项目中的环境配置、代码调试和结果可视化而烦恼吗…

Itsycal菜单栏日历终极指南:简单快捷的Mac日程管理神器

Itsycal菜单栏日历终极指南:简单快捷的Mac日程管理神器 【免费下载链接】Itsycal Itsycal is a tiny calendar for your Macs menu bar. http://www.mowglii.com/itsycal 项目地址: https://gitcode.com/gh_mirrors/it/Itsycal 还在为查看日历而频繁切换应用…

5分钟上手Lively:让你的Windows桌面“活“起来

5分钟上手Lively:让你的Windows桌面"活"起来 【免费下载链接】lively Free and open-source software that allows users to set animated desktop wallpapers and screensavers powered by WinUI 3. 项目地址: https://gitcode.com/gh_mirrors/li/live…

HandBrake终极教程:3天从零到精通视频转码

HandBrake终极教程:3天从零到精通视频转码 【免费下载链接】HandBrake HandBrakes main development repository 项目地址: https://gitcode.com/gh_mirrors/ha/HandBrake 还在为视频格式兼容性问题困扰吗?想要快速将高清视频转换为适合各种设备…