记录些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)对长上下文文本的研究兴趣日益浓厚。在这类模型的研究中,一种广泛采用的方法是将一个事实(被称为“针”)嵌入到大量的上下文信息(被称为“干草堆”)中,随后测试模型是否能够在这些上下文中定位并回答与该事实相关的问题。这种测试方法使我们能够评估并洞察模型在处理长文本和信息检索方面的能力极限。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小学科学期刊投稿邮箱论文发表

《小学科学》是由国家新闻出版总署批准的教育理论类半月刊,由长春出版传媒集团有限责任公司主管主办,旨在为广大一线科学教师、教研员和其他教育工作者提供一个展示传播、交流、研讨科学教育及教研成果的平台,促进小学科学教育工作者的沟通与…

【微服务-网关】SpringCloud GateWay核心技术

在前面的文章中我们介绍了微服务网关的基础知识,了解了什么是网关,网关有什么作用,以及市面上有哪些成熟的网关产品,最后了解了网关的配置技巧。通过上篇文章,大家应该可以在微服务架构中完成网关的基本配置。 但是&am…

君正X2100 RTOS JPEG硬件编码

一、配置 进入SDK的tools/iconfigtool/IConfigToolApp目录,执行./IConfigTool指令,进入配置界面: Config.in 是生成配置界面的文件,Config是需要修改的配置文件,选择之后点击Open。 选择 xburst2系列CPU->X2000系列…

Matter - nordic OTA(3)

Nordic Semiconductor 开发平台示例下,提供了两套进行空中 (OTA) 设备固件升级 (DFU)的方式: 1.基于 Matter OTA 更新协议规范下使用 Matter 网络查询和下载新的固件映像,需要 OTBR。 2. nordic 基于低功耗蓝牙(Bluetooth LE)实现的简单管理协…

golang学习随便记15

golang测试 go test 命令 go test 命令是一个按照一定的约定和组织来测试代码的程序。我们需要了解有哪些约定和组织:在包目录内,所有后缀为 _test.go 的源文件不会被 go build 构建命令构建成包的一部分,相反,它们会被 go test…

java常用IO流功能——字符流和缓冲流概述

前言: 整理下学习笔记,打好基础,daydayup! 之前说了下了IO流的概念,并整理了字节流,有需要的可以看这篇 java常用应用程序编程接口(API)——IO流概述及字节流的使用 字符流 FileReader(文件字…

鸿蒙TypeScript入门学习第一天【简单介绍】

1.TypeScript 教程 TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准()。 TypeScript 由微软开发的自由和开源的编程语言。 TypeScript 设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 …

BIM插件定制,你的功能由你说了算!python开发 | 图形引擎 | 几何引擎

各位CSDN的宝宝们~ 如果你对插件开发或BIM技术兴趣十足 有着无限的想法和创意 想解决日常使用BIM软件的难题,打破桎梏 却愁于没有实现的机会 现在,机会来了! BIMBase插件命题征集活动已经开启! (没错就是征集&am…

AI时代-普通人的AI绘画工具对比(Midjouney与Stable Diffusion)

AI时代-普通人的AI绘画工具对比(Midjouney与Stable Diffusion) 前言1、基础对比Stable Diffusion(SD)SD界面安装与使用SD Midjouney(MJ) 2、硬件与运行要求对比Stable Diffusion硬件要求内存硬盘显卡 Midjo…

647. 回文子串

#动态规划法 class Solution:def countSubstrings(self, s: str) -> int:n len(s)#dp[i][j] [i,j]是否为回文串dp [[False]*n for _ in range(n)]res 0#dp[i][j]依赖于dp[i1][j-1],所以i要从下往上遍历for i in range(n-1,-1,-1):for j in range(i,n):if s[i]…

基于java+springboot+vue实现的超市管理系统(文末源码+Lw+ppt)23-354

摘 要 系统根据现有的管理模块进行开发和扩展,采用面向对象的开发的思想和结构化的开发方法对超市管理的现状进行系统调查。采用结构化的分析设计,该方法要求结合一定的图表,在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”…

神经网络代码实现(用手写数字识别数据集实验)

目录 一、前言 二、神经网络架构 三、算法实现 1、导入包 2、实现类 3、训练函数 4、权重参数矩阵初始化 5、参数矩阵变换向量 6、向量变换权重参数矩阵 7、进行梯度下降 7.1、损失函数 7.1.1、前向传播 7.2、反向传播 8、预测函数 四、完整代码 五、手写数字识别 一、前言 …

创建数组的时候,数组大小是确定数值和变量的不同情况

概要: 1、创将数组的时候,如果数组大小是确定数值 (1)数组所有元素默认是0 (2)可以通过大括号对元素进行赋值 int arr[3]{1,2,3}; int arr[10]{1}; //只将第一个元素赋值为1,其他元素依然是0 2、…

istio 设置 istio-proxy sidecar 的 resource 的 limit 和 request

方式一 修改 configmap 查看当前 sidecar 的 cpu 和 memory 的配额 在 istio-sidecar-injector 中查找,修改后重启 pod 可以生效(下面那个 proxy_init 配置不管,不知道是干嘛的) 方式二 如果是通过 iop 安装的 istio,可以修改 iop 文件中的配置 spec:values:global:…

静态住宅IP VS 动态住宅IP,怎么选择?

在进行海外 IP 代理时,了解动态住宅 IP 和静态住宅 IP 的区别以及如何选择合适的类型非常重要。本文将介绍精态住宅 IP 特点和,并提供选择建议,帮助您根据需求做出明智的决策。 静态住宅 IP 的特点 静态住宅 IP 是指 IP 地址在一段时间内保…

【Java程序设计】【C00360】基于Springboot的考研互助交流平台(有论文)

基于Springboot的考研互助交流平台(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 项目获取 🍅文末点击卡片获取源码🍅 开发环境 运行环境:推荐jdk1.8; 开发工具:eclipse以及i…

Cadence——生成Gerber制板文件

软件版本:Cadence SPB OrCAD Allegro 16.6 打开Allegro PCB Designer 选择如下选项👇 点击 File–>Open,找到对应的.brd文件 电气错误的检查:点击 Display–>Status,全为绿色则没有错误 按照不同的项目来进…

【SQL】1517. 查找拥有有效邮箱的用户(正则表达式regexp)

前述 sql-正则表达式SQL学习笔记 – REGEXP 题目描述 leetcode 题目:1517. 查找拥有有效邮箱的用户 Code select * from Users where mail regexp ^[a-zA-Z][a-zA-Z0-9_.-]*leetcode\\.com$图片引用自 MySQL正则表达式

C++中的内存分区

栈:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限 堆:就是那些由 new分配的内…