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

Python LangChain RAG从入门到项目实战09.:LangChain 中的 Retriever(检索器)

LangChain 中的 Retriever(检索器)

相关文章:

Python LangChain RAG从入门到项目实战10.:质量评价指标体系

在 LangChain 中,Retriever(检索器) 是一个核心组件,专门负责从知识库中检索与用户查询相关的信息。它的主要作用是根据输入的问题或查询,从大量文档中找到最相关的片段,为后续的问答或生成任务提供上下文。

在这里插入图片描述

1.Retriever 的主要功能

  1. 相似性检索:基于语义相似度找到与查询最相关的文档片段
  2. 关键字检索:基于关键词匹配找到相关文档
  3. 混合检索:结合多种检索策略提高检索质量
  4. 过滤与排序:对检索结果进行筛选和排序,返回最相关的内容

2.Retriever 的工作原理

典型的 Retriever 工作流程:

  1. 接收用户查询/问题
  2. 将查询转换为向量表示(使用嵌入模型)
  3. 在向量数据库中搜索相似向量
  4. 返回最相关的文档片段

3.Retriever 的类型

LangChain 支持多种类型的 Retriever:

  1. 向量存储检索器(VectorStore Retriever)

    • 基于向量相似度进行检索
    • 示例:Chroma、FAISS、Pinecone 等向量数据库
  2. 关键字检索器(Keyword-Based Retriever)

    • 基于传统关键词匹配
    • 示例:TF-IDF、BM25
  3. 集成检索器(Ensemble Retriever)

    • 结合多种检索方法的结果
    • 提高检索的召回率和准确率
  4. 上下文压缩检索器(Contextual Compression Retriever)

    • 对检索到的文档进行压缩,只保留相关部分
    • 减少不必要信息的传输

4.在代码中的使用示例

from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import OllamaEmbeddings# 创建向量数据库
vectorstore = Chroma(persist_directory="./chroma_db",embedding_function=OllamaEmbeddings(model="nomic-embed-text")
)# 创建检索器
retriever = vectorstore.as_retriever(search_type="similarity",  # 检索类型:相似度search_kwargs={"k": 3}     # 返回最相关的3个文档
)# 使用检索器
query = "什么是机器学习?"
relevant_docs = retriever.invoke(query)

5.检索器配置参数

常见的检索器配置选项:

  • search_type:检索类型(“similarity”、“mmr”、“similarity_score_threshold”)
  • k:返回的文档数量
  • score_threshold:相似度分数阈值
  • fetch_k:初步检索的文档数量(用于MMR)

6.Retriever 在 RAG 中的应用

在检索增强生成(RAG)系统中,Retriever 扮演着关键角色:

  1. 从大规模知识库中检索相关信息
  2. 为生成模型提供上下文
  3. 提高生成答案的准确性和相关性

7.总结

Retriever 是 LangChain 中连接用户查询与知识库的关键桥梁,它通过高效的检索算法找到最相关的信息,为大语言模型提供准确的上下文,从而生成更高质量的回答。选择合适的 Retriever 类型和配置参数对于构建高效的问答系统至关重要。

http://www.dtcms.com/a/354115.html

相关文章:

  • buuctf——web刷题第5页
  • Vue2 基础用法
  • CVPR深度学习研究指南:特征提取模块仍是论文创新难点
  • 吴恩达机器学习作业二:线性可分逻辑回归
  • CMake构建学习笔记21-通用的CMake构建脚本
  • Liunx内核驱动
  • Java中StringBuilder原理以及使用
  • D4145低功耗GFCI接地故障控制芯片介绍
  • 题目—移除元素
  • 作业帮,途虎养车,得物,途游游戏,三七互娱,汤臣倍健,游卡,快手26届秋招内推
  • JUC多线程个人笔记
  • 【DC工具GUI入门】
  • APP测试全流程以及测试点
  • 【开题答辩全过程】以 基于SpringBoot的流浪动物领养系统的设计与实现 为例,包含答辩的问题和答案
  • 从Java到Go:初遇Go语言的震撼体验
  • 力扣 30 天 JavaScript 挑战 第41天 (第十二题)对异步操作,promise,async/await有了更深理解
  • 【Linux实时内核机制】ww_rt_mutex 的contending_lock异常问题
  • android/java中主线程和子线程的详解
  • Nano Banana揭秘:Google Gemini 2.5 Flash Image正式发布 | AI图像编辑新时代
  • 内网应用如何实现外网访问?外地通过公网地址访问内网服务器的设置方法
  • 动态规划:青蛙跳台阶实践
  • H20 性能表现之 Kimi-K2
  • 【git】:gitee项目管理vs2019
  • 装饰器进阶与设计模式
  • Linux入门教程 第十五章 Linux 系统调优工具
  • 【工具篇】github/huggingface 镜像源总结
  • 嵌入式系统学习Day24(线程)
  • Custom SRP - Shadow Masks
  • Axure:如何将SVG转换为形状
  • leetcode 155 官方golang标准答案错误