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

记录些LangChain相关的知识

RAG的输出准确率

RAG的输出准确率 = 向量信息保留率 * 语义搜索准确率 * LLM准确率

RAG的输出准确率由三个因素共同决定:向量信息保留率、语义搜索准确率以及LLM准确率。这三个因素是依次作用的,因此准确率实际上是它们的乘积。这意味着,任何一个环节的不完美都会影响到整体的准确率。

目前,针对RAG的优化工作主要集中在以下三个方面:

  1. 通过COT等方法提高LLM对问题的理解程度。
  2. 使用sentence window retrive、rerank等技术来提高语义搜索的准确率。
  3. 通过精心选择和优化embedding算法,以最大程度保留原始数据的信息。

然而,由于最终准确率是这三个因素准确率的乘积,即使我们将每个环节的准确率都优化到90%,最终的准确率也只能达到72%。因此,提高RAG的输出准确率需要我们在每一个环节都进行深入优化,以实现整体的提升。

RAG高级检索策略

图片

依赖于嵌入的余弦相似性进行检索的方法效果有限。许多人在LangChain中实现了更高级的检索策略,这些策略在LangChain中被广泛采用和记录。

然而,我们发现最常用的检索策略并非LangChain内置的,而是用户自定义的策略。这反映出在LangChain中实现自定义检索策略是相对简单的,同时也说明为了达到最优性能,往往需要开发特定的逻辑。

此外,我们还注意到了一些熟悉的策略名称:

  • Self Query:从用户的问题中提取元数据过滤器。
  • Hybrid Search:主要通过Supabase和Pinecone等提供商的集成来实现。
  • Contextual Compression:对基本检索结果进行后处理。
  • Multi Query:将单个查询拆分为多个查询,并检索所有查询的结果。
  • TimeWeighted VectorStore:为最近的文档赋予更高的优先级。

这些策略的出现表明,为了提高检索效果,人们正在不断地探索和实施创新的解决方案。

LangGraph协作

主要控制状态转换的因素是「路由器」,但它是一个基于规则的路由器,因此相当简单。基本上,在每次LLM调用之后,它会查看输出。如果调用了工具,则调用该工具。如果没有调用工具且LLM响应“最终答案”,则返回给用户。否则(如果没有调用工具且LLM未响应“最终答案”),则转到另一个LLM。

在LangGraph协作中,控制状态转换的关键组件是「路由器」,它基于规则进行操作,因此设计相对简单。其工作流程大致如下:每次语言模型(LLM)被调用后,路由器会检查其输出内容。如果LLM指示需要调用某个工具,那么路由器就会执行这一工具调用。如果LLM的输出是一个“最终答案”且没有指示调用工具,那么这个答案就会被返回给用户。如果LLM的输出既没有指示调用工具,也没有提供“最终答案”,那么路由器会将任务转发给另一个LLM进行进一步处理。

Neo4j-图数据库AI助手

在业界,利用语言模型(LLMs)生成Cypher查询语句已经变得非常普遍。这种方法显著增加了数据提取的灵活性。然而,经验表明,直接依赖LLMs生成Cypher语句可能会遇到稳定性和准确性方面的问题。

为了解决这些挑战,我们探索了一种新的策略,旨在确保操作的稳定性和高度一致性。我们提出的方法是让LLM不再直接创建Cypher语句,而是根据用户的指令,从提供的信息中识别和提取参数。接着,这些参数被用来填充预定义的函数或现有的Cypher模板,以生成准确的查询。

Agents自省

基础自省

在Agents自省的场景中,我们采用了基础自省的方法,涉及到两个语言模型的互动:一个是生成器,另一个是自省者。生成器的角色是直接回答用户的查询,而自省者则承担起指导者的责任,对生成器的初步回答提供有益的评估和指导。

这一互动过程会经历几个循环,直至最终提供一个经过优化的答案。

图片

Reflexion

在Agents自省的领域,Shinn等人开发的Reflexion框架通过口头反馈和自我反思来促进学习。该框架中,执行者负责对每次生成的响应进行深入分析,并利用外部数据提供支持。执行者被要求提供引文作为证据,并明确指出响应中的重复内容和缺失信息,这样的自省过程不仅具有建设性,还能指导生成器根据反馈进行相应的改进。

在我们的示例中,我们在达到一定步骤后停止了自省过程。然而,你也可以选择让自省语言模型自行决定何时结束这一过程。

代理循环的概述如下:

图片

执行者概述

在每一步的执行过程中,回答者的任务是提供答案,并执行一系列的搜索查询作为补充操作。紧接着,审稿者需要对当前的情况进行反思和评估。这一逻辑可以通过LangGraph框架来定义。

语言代理树搜索

在Agents自省的领域,Zhou等人研发的语言代理树搜索(LATS)是一种创新算法,它整合了自省评估和搜索架构,尤其是蒙特卡洛树搜索。该算法基于标准的强化学习(RL)任务框架,并采用语言模型来替代传统RL代理、价值函数和优化器,这样做显著提升了处理复杂任务的能力,并有效避免了陷入重复的行为模式。

搜索过程分为以下四个主要步骤:

图片

  1. 选择:基于后续步骤产生的综合奖励,挑选出最佳行动方案。当找到解决方案或达到最大搜索深度时,会直接给出响应;若没有,则继续搜寻。
  2. 扩展和模拟:预设生成 N 个可能采取的行动(本例中为 5 个),并同时执行这些行动。
  3. 反思和评价:观察这些行动产生的结果,并依据反思(也可能包含外部反馈)对其做出评价。
  4. 反向传播:根据行动结果更新初始轨迹的评分。

如果智能体拥有一个有效的反馈环,基于环境奖励或可靠的自省得分,那么它就可以确切区分不同的行动轨迹,并选择更佳路径。最终选定的路径可以保存在外部记忆中,或者用于模型的微调,提升未来的性能表现。

“选择”步骤会选择具有最高上限置信区间(UCT)的节点,该步骤平衡了预期奖励与探索新途径的动机。

通过查阅代码,可以了解具体实现方式。在 LangGraph 的实现中,我们将生成和自省步骤归于同一节点,并且每一次循环时都会检查任务状态,以判断任务是否已被成功解决。

LATS 将诸如 Reflexion、思想树和计划执行等其他代理架构中的推理、规划、自省组件结合起来。通过对自省和环境反馈的逆向传播,LATS 优化了搜索流程。尽管它对奖励分数可能较为敏感,但总体来说,这个算法可以灵活地应用于多种任务。

图片

与其他代理架构的对比图

RAG数据抽取服务

明确抽取需求

为了确保语言模型(LLM)有效地抽取信息,我们需要清楚地指导它我们想要什么。明确需求包括三个核心部分:

  1. 描述你希望抽取的数据结构的模式(Schema)。
  2. 提供包含抽取背景和指示的命令(Prompt)。
  3. 展示文本信息抽取的实例样本(Reference examples)。

实现过程

理解了这些组成部分后,我们需要了解如何使它们协同工作。我们将分享两个简单但有效的方法。

  • 首先,确保LLM以正确的格式回应至关重要。仅仅在命令中指示LLM输出JSON格式可能不足以确保一致性。因此,采用函数调用已经成为一种新的、相对可靠的方法来确保LLM严格按照特定格式输出。我们建议使用这种方法来提高性能。

可以查阅结构化输出文档,其中LangChain API的高级视图展示了不同LLM如何调用工具和函数。

  • 另一个提高性能的方法是使用参考样本。尽管可以不使用样本来设置抽取问题,但我们发现,在实际应用中,提供输入和相应输出的样本通常非常有帮助。有时,这些样本比指令本身更能有效地指导LLM处理特定情况。

LangChain 数据抽取文档:https://python.langchain.com/docs/use_cases/extraction

信息检索的能力边界

随着人工智能模型处理能力的提升,它们能够有效处理的上下文信息量也在不断增加,现在已能处理达到百万级别的词汇量。这种能力使得大型语言模型(LLMs)对长上下文文本的研究兴趣日益浓厚。在这类模型的研究中,一种广泛采用的方法是将一个事实(被称为“针”)嵌入到大量的上下文信息(被称为“干草堆”)中,随后测试模型是否能够在这些上下文中定位并回答与该事实相关的问题。这种测试方法使我们能够评估并洞察模型在处理长文本和信息检索方面的能力极限。

相关文章:

记录些LangChain相关的知识

RAG的输出准确率 RAG的输出准确率 向量信息保留率 * 语义搜索准确率 * LLM准确率RAG的输出准确率由三个因素共同决定:向量信息保留率、语义搜索准确率以及LLM准确率。这三个因素是依次作用的,因此准确率实际上是它们的乘积。这意味着,任何一…...

C语言例4-7:格式字符f的使用例子

%f&#xff0c;实型&#xff0c;小数部分为6位 代码如下&#xff1a; //格式字符f的使用例子 #include<stdio.h> int main(void) {float f 123.456;double d1, d2;d11111111111111.111111111;d22222222222222.222222222;printf("%f,%12f,%12.2f,%-12.2f,%.2f\n&qu…...

[蓝桥杯 2019 省 A] 修改数组

题目链接 [蓝桥杯 2019 省 A] 修改数组 题目描述 给定一个长度为 N N N 的数组 A [ A 1 , A 2 , A 3 , . . . , A N ] A [A_1, A_2, A_3, ...,A_N] A[A1​,A2​,A3​,...,AN​]&#xff0c;数组中有可能有重复出现的整数。 现在小明要按以下方法将其修改为没有重复整数的…...

Git基础(25):Cherry Pick合并指定commit id的提交

文章目录 前言指定commit id合并使用TortoiseGit执行cherry-pick命令 前言 开发中&#xff0c;我们会存在多个分支开发的情况&#xff0c;比如dev&#xff0c;test, prod分支&#xff0c;dev分支在开发新功能&#xff0c;prod作为生产分支已发布。如果某个时候&#xff0c;我们…...

C语言结构体之位段

位段&#xff08;节约内存&#xff09;&#xff0c;和王者段位联想记忆 位段是为了节约内存的。刚好和结构体相反。 那么什么是位段呢&#xff1f;我们现引入情景&#xff1a;我么如果要记录一个人是男是女&#xff0c;用数字0 1表示。我们发现只要一个bit内存就可以完成我们想…...

2016年认证杯SPSSPRO杯数学建模D题(第二阶段)NBA是否有必要设立四分线全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 D题 NBA是否有必要设立四分线 原题再现&#xff1a; NBA 联盟从 1946 年成立到今天&#xff0c;一路上经历过无数次规则上的变迁。有顺应民意、皆大欢喜的&#xff0c;比如 1973 年在技术统计中增加了抢断和盖帽数据&#xff1b;有应运而生、力…...

登录校验解决方案JWT

目录 &#x1f397;️1.JWT介绍 &#x1f39e;️2.应用场景 &#x1f39f;️3.结构组成 &#x1f3ab;4.JWT优点 &#x1f3a0;5.封装成通用方法 &#x1f6dd;6.JWT自动刷新 1.JWT介绍 官网&#xff1a;JWT官网 JSON Web Token (JWT) 是一个开放标准&#xff0c;它…...

Flutter开发进阶之瞧瞧BuildOwner

Flutter开发进阶之瞧瞧BuildOwner 上回说到关于Element Tree的构建还缺最后一块拼图&#xff0c;build的重要过程中会调用_element!.markNeedsBuild();&#xff0c;而markNeedsBuild会调用owner!.scheduleBuildFor(this);。 在Flutter框架中&#xff0c;BuildOwner负责管理构建…...

大量免费工具使用(提供api接口)

标题: 免费工具集使用 - 简化你的任务 介绍&#xff1a; 在数字化时代&#xff0c;我们经常需要使用各种工具来完成各种任务。本文将介绍一个免费工具集&#xff0c;它提供了多种实用工具&#xff0c;帮助简化你的任务。这些工具可以在网站 https://tool.kertennet.com 上找到…...

网络探测工具Nmap介绍

1. Nmap简介 Nmap是一款用于网络发现和安全审计的网络安全工具。可用于列举网络主机清单、管理服务升级调度、监控主机、监控主机服务运行状况、检测目标主机是否在线和端口开放情况、侦测运行的服务类型及版本信息、侦测操作系统与设备类型等。 2. 命令大纲 3. 命令详细介绍…...

20240319-2-机器学习基础面试题

⽼板给了你⼀个关于癌症检测的数据集&#xff0c;你构建了⼆分类器然后计算了准确率为 98%&#xff0c; 你是否对这个模型很满意&#xff1f;为什么&#xff1f;如果还不算理想&#xff0c;接下来该怎么做&#xff1f; 首先模型主要是找出患有癌症的患者&#xff0c;模型关注的…...

0202矩阵的运算-矩阵及其运算-线性代数

文章目录 一、矩阵的加法二、数与矩阵相乘三、矩阵与矩阵相乘四、矩阵的转置五、方阵的行列式结语 一、矩阵的加法 定义2 设有两个 m n m\times n mn橘子 A ( a i j ) 和 B ( b i j ) A(a_{ij})和B(b_{ij}) A(aij​)和B(bij​),那么矩阵A与B的和记为AB,规定为 A B ( a 11…...

python中的__dict__

类的__dict__返回的是&#xff1a;类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类的__dict__里的&#xff0c; 而实例化对象的&#xff1a;__dict__中存储了一些类中__init__的一些属性值。 import的py文件 __dict__返回的是&#xff1a;__init__的…...

数学分析复习:无穷乘积

文章目录 无穷乘积定义&#xff1a;无穷乘积的收敛性命题&#xff1a;无穷乘积的Cauchy收敛准则正项级数和无穷乘积的联系 本篇文章适合个人复习翻阅&#xff0c;不建议新手入门使用 无穷乘积 设复数列 { a n } n ≥ 1 \{a_n\}_{n\geq 1} {an​}n≥1​&#xff0c;设对任意 …...

02 React 组件使用

import React, { useState } from react;// 定义一个简单的函数式组件 function Counter() {// 使用 useState hook 来创建一个状态变量 count&#xff0c;并提供修改该状态的函数 setCountconst [count, setCount] useState(0);// 在点击按钮时增加计数器的值const increment…...

你就是上帝

你就是上帝&#xff1a;Jv程序员&#xff0c;请你站在上帝或神的角度 1.万物皆有裂缝 按照西方文化&#xff08;宗教神话&#xff0c;古希腊、古罗马等&#xff09;&#xff0c;上帝创建了人&#xff1b; 创建人之前&#xff0c;还创建了人的居所或地盘/栖息地&#xff08;伊…...

Spring Cloud: openFegin使用

文章目录 一、OpenFeign简介二、Springboot集成OpenFeign1、引入依赖2、EnableFeignClients注解&#xff08;1&#xff09;应用&#xff08;2&#xff09;属性解析 3、 FeignClient&#xff08;1&#xff09;应用&#xff08;2&#xff09;属性解析&#xff08;3&#xff09;向…...

流畅的 Python 第二版(GPT 重译)(二)

第三章&#xff1a;字典和集合 Python 基本上是用大量语法糖包装的字典。 Lalo Martins&#xff0c;早期数字游牧民和 Pythonista 我们在所有的 Python 程序中都使用字典。即使不是直接在我们的代码中&#xff0c;也是间接的&#xff0c;因为dict类型是 Python 实现的基本部分。…...

Flutter 旋转动画 线性变化的旋转动画

直接上代码 图片自己添加一张就好了 import dart:math;import package:flutter/material.dart;import package:flutter/animation.dart;void main() > runApp(MyApp()); //旋转动画 class MyApp extends StatelessWidget {overrideWidget build(BuildContext context) {re…...

【Web应用技术基础】HTML(5)——案例1:展示简历信息

样式&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>展示简历信息…...

ethers.js:wallet(创建钱包,导入助记词,导入私钥)

Wallet Wallet类继承了Signer,可以使用私钥作为外部拥有帐户(EOA)的标准对交易和消息进行签名。 npm install ethers@5.4.0// 引入 import {ethers } from ethers创建新钱包 this.provider = new ethers.providers.Web3Provider(window...

面试笔记——Java集合篇

Java集合框架体系 重点&#xff1a;单列集合——ArrayList、LinkedList&#xff1b;双列集合——HashMap、ConcurrentHashMap。 List相关 数组&#xff08;Array&#xff09; 是一种用连续的内存空间存储相同数据类型数据的线性数据结构。 数组获取其他元素&#xff1a; 为什…...

在 IntelliJ IDEA 中使用 Terminal 执行 git log 命令后的退出方法

前言 IntelliJ IDEA 是一款广受欢迎的集成开发环境&#xff0c;它内置了强大的终端工具&#xff0c;使得开发者无需离开IDE就能便捷地执行各种命令行操作&#xff0c;包括使用 Git 进行版本控制。在 IDEA 的 Terminal 中执行 git log 命令时&#xff0c;由于该命令会显示项目的…...

架构整洁之道-读书总结

1 概述 1.1 关于本书 《架构整洁之道》&#xff08;Clean Architecture: A Craftsman’s Guide to Software Structure and Design&#xff09;是由著名的软件工程师Robert C. Martin&#xff08;又称为Uncle Bob&#xff09;所著。这本书提供了软件开发和架构设计的指导原则…...

蓝桥杯学习笔记(贪心)

在很久很久以前&#xff0c;有几个部落居住在平原上&#xff0c;依次编号为1到n。第之个部落的人数为 t 有一年发生了灾荒&#xff0c;年轻的政治家小蓝想要说服所有部落一同应对灾荒&#xff0c;他能通过谈判来说服部落进行联台。 每次谈判&#xff0c;小蓝只能邀请两个部落参…...

【无标题】如何使用 MuLogin 设置代理

如何使用 MuLogin 设置代理 使用 MuLogin 浏览器设置我们的代理&#xff0c;轻松管理多个社交媒体或电子商务帐户。 什么是MuLogin&#xff1f; MuLogin 是一款虚拟反检测浏览器&#xff0c;使用户能够管理多个电子商务、社交媒体和广告帐户&#xff0c;而无需验证码或 IP 禁…...

芒果YOLOv8改进135:主干篇GCNet,统一为全局上下文建模global context结构,即插即用,助力小目标检测,轻量化的同时精度性能涨点

该专栏完整目录链接: 芒果YOLOv8深度改进教程 芒果专栏 基于 GCNet 的改进结构,改进源码教程 | 详情如下🥇 💡本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 即插即用 结构。博客 包括改进所需的 核心结构代码 文件 论文:https://arxiv.org/a…...

全面:vue.config.js 的完整配置

vue.config.js是Vue项目的配置文件&#xff0c;用于配置项目的构建、打包和开发环境等。 在Vue CLI 3.0之后&#xff0c;项目的配置文件从原来的build和config目录下的多个配置文件&#xff0c;合并成了一个vue.config.js文件。这个文件可以放在项目的根目录下&#xff0c;用于…...

海量数据处理项目-账号微服务注册Nacos+配置文件增加

海量数据处理项目-账号微服务注册Nacos配置文件增加 导入生成好的代码 model (为啥不放common项目&#xff0c;如果是确定每个服务都用到的依赖或者类才放到common项目) mapper 类接口拷贝 resource/mapper文件夹 xml脚本拷贝 controller service 不拷贝 Mybatis plus配置控制…...

DNS 服务 Unbound 部署最佳实践

文章目录 安装unbound-control配置启动服务测试 参考&#xff1a; 官网地址&#xff1a;https://nlnetlabs.nl/projects/unbound/about/ 详细文档&#xff1a;https://unbound.docs.nlnetlabs.nl/en/latest/index.html DNS服务Unbound部署于使用 https://cloud.tencent.com/…...