【大模型从入门到精通28】开源库框架LangChain 语义搜索:高级检索策略2

news2024/11/15 15:52:17

这里写目录标题

    • 利用元数据与自我查询检索器
      • 元数据作为上下文信息
      • 初始化环境并定义元数据
        • 导入必要的模块
        • 定义元数据属性
      • 配置自我查询检索器
      • 执行带有自动元数据推断的查询
      • 实现上下文压缩
      • 设置环境
        • 导入必要的类
      • 初始化压缩工具
      • 创建上下文压缩检索器
      • 检索压缩文档

在这里插入图片描述

利用元数据与自我查询检索器

元数据作为上下文信息

元数据作为上下文信息,可以显著地细化搜索结果。当与自我查询检索器的能力相结合时,可以从单一输入查询自动提取查询字符串和相关的元数据过滤器。这种方法消除了手动指定元数据的需求,使搜索过程既高效又直观。

初始化环境并定义元数据

在我们可以执行基于元数据的搜索之前,我们需要设置环境并定义我们打算使用的元数据属性。

导入必要的模块
# 导入 langchain 库中的必要模块
from langchain.llms import OpenAI
from langchain.retrievers.self_query.base import SelfQueryRetriever
from langchain.chains.query_constructor.base import AttributeInfo
定义元数据属性
# 定义元数据属性及其详细描述
metadata_attributes = [
    AttributeInfo(
        name="source",
        description="指定讲座文档,限于 `docs/cs229_lectures` 目录中的特定文件。",
        type="string",
    ),
    AttributeInfo(
        name="page",
        description="讲座文档中的页码。",
        type="integer",
    ),
]

# 注意:由于先前默认模型的废弃,现在转向使用 OpenAI 的 gpt-3.5-turbo-instruct 模型。
document_content_description = "详细的讲座笔记"
language_model = OpenAI(model='gpt-3.5-turbo-instruct', temperature=0)

配置自我查询检索器

下一步涉及使用语言模型、向量数据库和定义的元数据属性来配置自我查询检索器。

# 初始化自我查询检索器,使用语言模型、向量数据库和元数据属性
self_query_retriever = SelfQueryRetriever.from_llm(
    language_model,
    vector_database,
    document_content_description,
    metadata_attributes,
    verbose=True
)

执行带有自动元数据推断的查询

现在,让我们执行一个搜索,该搜索能从查询本身自动推断出相关的元数据。

# 定义一个指定查询上下文的查询
specific_query = "第三讲中提供了哪些关于回归分析的见解?"

# 注意:首次执行可能会触发 `predict_and_parse` 的废弃警告,可以忽略。
# 根据特定查询检索相关文档,利用推断的元数据提高精确度
relevant_documents = self_query_retriever.get_relevant_documents(specific_query)

# 显示检索到的文档的元数据,以证明搜索的特定性
for document in relevant_documents:
    print(document.metadata)

实现上下文压缩

上下文压缩通过提取文档中最相关的段落来工作。这种方法不仅减少了对语言模型的计算负担,而且还通过专注于最相关的信息提高了响应的质量。

设置环境

在深入上下文压缩的具体细节之前,请确保您的环境已经使用了必要的库进行了适当的配置。

导入必要的类
# 导入用于上下文压缩和文档检索的必要类
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import LLMChainExtractor
from langchain.llms import OpenAI

初始化压缩工具

下一步涉及使用预训练的语言模型初始化压缩机制,该模型将用于识别和提取文档的相关部分。

# 使用特定配置初始化语言模型以确保确定性行为
language_model = OpenAI(temperature=0, model="gpt-3.5-turbo-instruct")

# 使用语言模型创建一个压缩器来提取相关文本段落
document_compressor = LLMChainExtractor.from_llm(language_model)

创建上下文压缩检索器

有了压缩器之后,我们现在可以设置一个集成上下文压缩的检索器。

# 结合文档压缩器与现有的向量数据库检索器
compression_retriever = ContextualCompressionRetriever(
    base_compressor=document_compressor,
    base_retriever=vector_database.as_retriever()
)

检索压缩文档

让我们执行一个查询并观察上下文压缩检索器如何返回一个更集中的文档集。

# 定义一个查询,寻找相关文档段落
query_text = "有关数据分析工具的见解有哪些?"

# 根据查询检索相关文档,自动压缩以提高相关性
compressed_documents = compression_retriever.get_relevant_documents(query_text)

# 函数用于以美观的方式格式化并打印压缩文档的内容
def pretty_print_documents(documents):
    print(f"\n{'-' * 100}\n".join([f"文档 {index + 1}:\n\n" + doc.page_content for index, doc in enumerate(documents)]))

# 显示压缩后的文档
pretty_print_documents(compressed_documents)

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

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

相关文章

Nginx--日志

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、Nginx日志介绍 nginx 有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志, 所需日志模块 ngx_http_log_module 的…

别等GPT-4o啦,国产「开源版」GPT-4o 来了!支持全模态、无障碍交流

夕小瑶科技说 原创 作者 | 谢年年 腾讯最近的多模态进展有点子“一路高歌”,先是腾讯元宝升级了一波多模态能力,就差把GPT-4o从榜一拉下来了。 最近,又搞了一个和GPT-4o对标的交互式多模态模型——VITA,而且率先开源了。 每次…

算法-IMM

trajectory-prediction程序的imm.cc中的以下代码的对应的算法原理在后面 void IMM_UKF::InputInteract() {if (std::isnan(model_pro_(0)) || std::isnan(model_pro_(1)) || std::isnan(model_pro_(2)))std::abort();if (model_pro_.sum() ! 0)model_pro_ / model_pro_.sum();…

模组卡死?五步排查法助你快速定位并解决问题!

直线模组是许多机械设备中不可或缺的组件,在使用过程中可能会遇到各种故障,卡死是模组运行过程中最常出现的现象。以下是一些常见的直线模组卡死解决方法: 1、模组内部可能积聚了灰尘、杂质等,这些物质在模组运行过程中可能进入关…

Windows系统下两个不同版本的java切换

前言:在电脑中,已经安装好了两个不同版本的java,为了使用CMD随意切换两个不同版本的java,我们通过创建批处理文件来达到目的。 假设目前电脑中存在的两个java版本分别是java8和java21。 首先,创建java8的批处理文件“j…

minio下载镜像地址及启动脚本

MinIO下载 | 中国镜像下载加速站https://dl.minio.org.cn/server/minio/release/linux-amd64/archive/ MinIO下载 | 中国镜像下载加速站https://dl.minio.org.cn/client/mc/release/linux-amd64/ 文档: 单节点单硬盘部署MinIO — MinIO中文文档 | MinIO Linux中文文档 启动脚…

leetcode刷题-动态规划part01

代码随想录动态规划part01|动态规划理论基础、 509. 斐波那契数、 70. 爬楼梯 、746. 使用最小花费爬楼梯 动态规划基础509. 斐波那契数70.爬楼梯746. 使用最小花费爬楼梯 动态规划基础 动规五部曲: dp数组以及下标的含义:dp[i][j] dp[i]递推公式dp数组…

大模型格局变天:Llama3.1诞生

一、Llama3.1的背景 北美时间7月23日,Meta公司(原Facebook)宣布了一项重大突破:开源模型Llama 3.1的正式发布。这一举措预示着AI技术的又一次飞跃,Llama 3.1有望成为迄今为止最强大的开源大型语言模型(LLM&…

Startup-SBOM:一款针对RPM和APT数据库的逆向安全工具

关于Startup-SBOM Startup-SBOM是一款针对RPM和APT数据库的逆向分析与安全检测工具,该工具本质上是一个简单的 SBOM 实用程序,旨在提供正在执行的包的内部视图,可以帮助广大研究人员枚举所有软件包以及可执行文件、服务和版本。 该工具的流程…

Docker 部署loki日志 用于微服务

因为每次去查看日志都去登录服务器去查询相关日志文件,还有不同的微服务,不同日期的文件夹,超级麻烦,因为之前用过ELK,原本打算用ELK,在做技术调研的时候发现了一个轻量级的日志系统Loki,果断采…

【大模型从入门到精通29】开源库框架LangChain 语义搜索:高级检索策略3

这里写目录标题 实现上下文压缩与 MMR 的文档检索设置基于压缩的检索器与 MMR探索替代文档检索方法加载和准备文档实现 TF-IDF 和 SVM 检索器最佳实践结论理论问题实践问题 实现上下文压缩与 MMR 的文档检索 设置基于压缩的检索器与 MMR 上下文压缩的目标是通过关注与查询最相…

tomcat的初实现与memcache

文章目录 1. tomcat实现多虚拟机2. tomcat定制访问日志格式3. tomcat实现MSM集群4. JVM垃圾回收算法和分代5. memcache使用,安装和MSM原理 1. tomcat实现多虚拟机 一键安装tomcat并启动,使用openjdk #!/bin/bash version10.1.28 usertomcat grouptomcat…

【C++初阶】:C++入门篇(一)

文章目录 前言一、C命名空间1.1 命名空间的定义1.2 命名空间的使用 二、C的输入和输出2.1 cin和cout的使用 三、缺省参数3.1 缺省参数的分类 四、函数重载4.1 函数重载概念及其条件4.2 C支持函数重载原理 -- 名字修饰 前言 C是在C语言的基础之上,增加了一些面向对象…

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——6.vector

1.杨辉三角 . - 力扣&#xff08;LeetCode&#xff09; 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 class Solution { public:vector<vector<int>> generate(int numRows) {vector<vector<int>> arr;int i 0;int j 0;for (i…

Git入门 -- 区域详解

Git入门 – 区域详解 1.Git 1.1 Git与SVN的区别 Git不仅仅是版本控制系统&#xff0c;同时也是内容管理系统。以下是Git与SVN的区别&#xff1a; 分布式&#xff1a;Git是分布式但SVN不是&#xff0c;这是Git与其他系统的核心区别。存储方式为元数据&#xff1a;Git在存储数…

Python 如何使用正则表达式进行复杂文本处理

正则表达式&#xff08;Regular Expressions&#xff0c;简称 regex 或 RE&#xff09;是一种强大的工具&#xff0c;用于在文本中执行模式匹配和搜索操作。通过正则表达式&#xff0c;你可以轻松地查找、替换和提取文本中的特定模式。Python 提供了一个内置的 re 模块&#xf…

数据结构--树(笔记)

文章目录 1. 含义及术语2. 应用3. 常见二叉树种类① 二叉树(Binary tree)一般树和二叉树的区别 ② 完美二叉树(Perfect Binary tree)③ 完全二叉树(Complete Binary tree)④ 满二叉树(Full Binary tree)完美二叉树、完全二叉树和满二叉树 ⑤ 平衡二叉树(Balanced Binary tree)二…

基于STM32开发的智能门锁系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化密码输入与验证门锁控制与状态指示Wi-Fi通信与远程监控应用场景 家庭智能门锁办公室智能门禁系统常见问题及解决方案 常见问题解决方案结论 1. 引言 智能门锁系统通过集成键盘模块…

自学编程从哪个语言入手比较好?

自学编程时选择哪个语言作为起点&#xff0c;仍然取决于你的个人兴趣、学习目标和职业规划。希望以下建议可以帮到你。 Python&#xff1a; 如果你对数据分析、机器学习、人工智能、Web 开发或自动化脚本编写等领域感兴趣&#xff0c;Python 是一个非常好的起点。它的语法简洁…

java如何通过jdbc操作数据库

1. 安装JDBC 官网地址&#xff1a;官网地址选择 下载后&#xff0c;解压缩&#xff0c;然后将mysql-connector-j-9.0.0.jar文件放到项目目录下 编写操作数据库代码 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql…