LangChain核心概念与组件

news2024/11/17 20:47:45

图片

Chains

Chains可以让你按照一定的顺序和逻辑来执行不同的任务。Chains有以下四种类型:

类型作用
LLMChain用于在语言模型周围添加一些功能的简单Chain,它由一个PromptTemplate和一个语言模型(LLM或chat model)组成,它可以使用输入键值和内存键值(如果有的话)来格式化PromptTemplate,然后将格式化后的字符串传递给语言模型,并返回语言模型的输出
RouterChain用于创建一个动态选择下一个要使用的Chain的Chain的范式,它由两个组件组成:RouterChain本身(负责选择下一个要调用的Chain)和destination_chains(RouterChain可以路由到的Chain)
SequentialChain用于将多个Chain连接起来,形成一个执行一些特定场景的管道的Chain,它允许将一个调用的输出作为另一个调用的输入
TransformChain用于创建一个通用的转换Chain,它可以对输入进行一些预处理或后处理,然后将其传递给另一个Chain

Agents

通过Agents,可以让语言模型具有主动性和智能性。LangChain基于对AI应用开发的总结抽象,主要提供以下六种代理类型:

类型作用
Zero-shot ReAct用于根据工具的描述来决定使用哪个工具的Agent,它可以使用任意数量的工具,但要求每个工具都有一个描述
Structured input ReAct用于使用多输入工具的Agent,它可以根据工具的参数模式来创建一个结构化的动作输入,这对于更复杂的工具使用,如在浏览器中精确地导航,很有用
OpenAI Functions用于与一些特定的OpenAI模型(如gpt-3.5-turbo-0613和gpt-4-0613)协作的Agent,这些模型已经被显式地微调过,以便检测何时应该调用一个函数,并返回应该传递给函数的输入
Conversational用于在对话场景中使用的Agent,它的提示被设计成使Agent有助于和对话,它使用ReAct框架来决定使用哪个工具,并使用内存来记住之前的对话交互
Self-ask with search用于利用一个名为Intermediate Answer的工具的Agent,这个工具应该能够查找问题的事实答案,这个Agent相当于原始的自问自答与搜索论文,其中提供了一个Google搜索API作为工具
ReAct document store用于与文档存储交互的Agent,它使用ReAct框架,并且必须提供两个工具:一个Search工具和一个Lookup工具(它们必须被准确地命名为这样),Search工具应该搜索一个文档,而Lookup工具应该在最近找到的文档中查找一个术语,这个Agent相当于原始的ReAct论文,特别是Wikipedia示例

Agents是LangChain工程化封装与能力复用核心手段,可以动态的帮我们选择和调用 Chain 或者已有的工具,实现面向多种应用场景的智能适配。

Callbacks

LangChain中Callbacks是用于在链中插入自定义逻辑的组件,它可以让你对语言模型的行为进行控制和调整和调整。同样在LangChain中,它可以在链中的任何位置执行你定义的函数或代码。LangChain基于对AI应用开发的总结抽象,主要提供以下七种回调类型:

类型作用
Async callbacks用于在异步模式下执行回调函数的类,它可以让您在不阻塞主线程的情况下,监听和处理LLM应用的各个阶段的事件
Custom callback handlers用于自定义回调函数的类,它可以让您实现一些特定的逻辑,如验证,过滤,转换等,以及定义回调函数在哪些事件上被触发
Callbacks for custom chains用于为自定义的Chain添加回调函数的类,它可以让您在Chain的开始,结束,或每个组件的调用之前或之后执行一些操作
Logging to file用于将LLM应用的日志记录到文件中的类,它可以让您指定日志文件的路径,格式,级别等,并在每次LLM应用运行时自动写入日志信息
Multiple callback handlers用于同时使用多个回调函数的类,它可以让您将不同类型或功能的回调函数组合起来,并按照一定的顺序执行
Tags用于给回调函数添加标签的类,它可以让您根据标签来筛选或分组回调函数,并在一些特定的场景中使用它们
Token counting用于统计LLM应用使用的令牌数量的类,它可以让您监控和控制LLM应用的消耗,并在每次LLM应用运行时自动更新令牌计数

Callbacks是LangChain中实现自定义逻辑插入的入口,它可以让你的任务链达到合适场景时执行你自定义的功能和效果。

Model I/O

LangChain提供的:Model I/O,直接与模型进行交互,而不需要关心IO的细节。Model I/O有三种类型:

类型作用
Prompts用于向语言模型提供输入的模板,它们可以定义输入变量,输出格式,部分变量等,以便生成符合用户需求的文本
Language models用于人工智能模型的参数自定义,它们可以根据不同的参数(如温度,最大长度,前缀等)产生不同风格和内容的文本
Output parsers用于将语言模型的输出解析为更结构化的信息的类如JSON、XML

Model I/O的核心思想是利用AI大模型强大的自然语言理解和生成能力,将任何形式的输入转换为自然语言,然后将自然语言输入到模型中,得到自然语言的输出,再将自然语言转换为任何形式的输出。

Retrieval

LangChain提供的:Retrieval,即定义好数据源以及加载方式后,直接从模型中检索(Retrieve)所需的信息,而不需要关心查询的细节。你可以把它想象成语言模型使用搜索引擎来查找相关内容。可以将Retrieval的能力划分为以下几个部分:

能力作用
Document loaders从不同的来源加载文档,支持多种文档类型和位置
Document transformers对文档进行变换,提取相关的部分,分割成小块
Text embedding models为文档创建语义嵌入,实现快速有效的相似度搜索
Vector stores存储和检索嵌入向量,支持多种数据库类型和接口
Retrievers从数据库中检索数据,支持多种检索算法和优化方法

Retrieval是LangChain中最重要的组件之一,它可以让语言模型拥有更丰富和更准确的上下文。Retrieval通过利用AI大模型强大的知识库和语义理解能力,能够将任何形式的查询转换为自然语言,然后将自然语言输入到模型中,得到自然语言的答案,再将自然语言转换为任何形式的输出。

Memory

LangChain提供的:Memory,即直接利用模型的记忆(Memory)能力。Memory是LangChain中用于存储和更新上下文的组件,它可以让语言模型记住之前的信息和状态。你可以把它想象成语言模型的大脑,它可以存储短期记忆和长期记忆。根据不同的使用场景,LangChain内部定义的Memory有以下类型:

类型作用
Conversation Buffer用于存储对话中的所有消息和元数据的内存,它可以返回一个列表,包含对话中的每个消息和其相关的信息,如发送者,接收者,时间戳等
Conversation Buffer Window Entity用于从对话缓冲区中提取特定窗口大小内的实体的内存,它可以返回一个字典,包含窗口内出现的实体及其频率,类型和位置
Conversation Knowledge Graph用于构建和更新对话中涉及的实体和关系的知识图谱的内存,它可以返回一个图结构,包含节点(实体)和边(关系),以及一些统计信息,如图的大小,密度,聚类系数等
Conversation Summary用于生成对话的摘要的内存,它可以返回一个字符串,包含对话的主要内容和目标
Conversation Summary Buffer用于存储对话摘要的内存,它可以返回一个列表,包含对话摘要的每个句子和其相关的信息,如生成时间,置信度等
Conversation Token Buffer用于存储对话中的所有单词和标点符号的内存,它可以返回一个列表,包含对话中的每个单词或标点符号及其相关的信息,如词性,命名实体类型等
Vector Store用于将对话中的文本或实体转换为向量表示,并进行相似度计算或聚类分析的内存,它可以返回一个矩阵,包含对话中每个文本或实体的向量表示,以及一些度量值,如余弦相似度,欧氏距离等

Memory的核心思想是利用AI大模型强大的参数和数据容量,将任何形式的数据转换为自然语言,并将其作为模型的输入或输出。

相关记忆组件从不同角度解决机器对话固有的遗忘问题:

  • ConversationBufferMemory:基于对话历史缓存实现简单的全记忆
  • ConversationBufferWindowMemory:利用时间窗口机制控制记忆容量
  • ConversationSummaryMemory:通过提取语义摘要,记住关键信息并舍弃Noise
  • ConversationKGMemory:将对话实体和事件图谱化,实现知识级记忆
  • ConversationEntityMemory:连接外部实体知识,辅助机器人记忆和联想

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

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

相关文章

FlorisBoard:Android开源键盘的现代化选择

FlorisBoard:Android开源键盘的现代化选择 简介 FlorisBoard是一款免费且开源的安卓键盘,适用于Android 7.0及以上版本的设备。它的现代化设计和用户友好的界面使其在众多键盘应用中脱颖而出。FlorisBoard的独特之处在于它注重用户体验的同时&#xff0…

ArcGIS二次开发(一)——搭建开发环境以及第一个简单的ArcGIS Engine 程序

Arcgis10.2、Arcgis Engine10.2与Microsoft Visual Studio 2012的版本进行安装 1、推荐教程与安装包2、安装顺序3、安装成功测试VS新建项目可以创建ArcGIS项目,并且在VS中拖拽ArcGIS工具 4、搭建第一个简单的ArcGIS Engine 程序 ArcEngine和VS版本是有对应的&#x…

如何高效系统地自学 Python?

导言: Python作为一门流行的编程语言,被广泛运用于数据分析、人工智能、网络应用等领域。想要系统地自学Python,并掌握其核心概念和编程技能,需要一定的方法和步骤。本文将介绍如何高效系统地自学Python,让你能够快速…

双纤SFP光模块和单纤SFP光模块之间的区别

双纤SFP光模块和单纤SFP光模块是两种不同的光模块类型。对于网络部署而言,了解它们之间的区别至关重要。本文将深入探讨这两种光模块之间的差异,并介绍其特性和适用场景。 双纤与单纤SFP光模块:它们是什么? 双纤SFP光模块是常用…

Netty源码剖析——ChannelHandler 篇(三十六)

ChannelHandler 作用及设计 public interface ChannelHandler {/*** Gets called after the {link ChannelHandler} was added to the actual context and its ready to handle events. 当把 ChannelHandler 添加到 pipeline 时被调用*/void handlerAdded(ChannelHandlerContex…

【前端面试3+1】01闭包、跨域、路由模式

一、对闭包的理解 定义: 闭包是指在一个函数内部定义的函数,并且该内部函数可以访问外部函数的变量。闭包使得函数内部的变量在函数执行完后仍然可以被访问和操作。 特点: 闭包可以访问外部函数的变量,即使外部函数已经执行完毕。…

游戏开发笔记:游戏海外版本时区问题(解释时区问题,分解为js写法和lua写法来分析记录,整理出对应语言的相关函数方法。)

对于海外游戏而言,与时间相关的功能,都不能忽略时区的计算。根据 ‘ 服务端资源是有限的,客户端资源是无穷无尽的 ’的定义来说,基本上时区包括时间的计算都是由客户端来进行计算,今天内容也是围绕客户端来展开。 时区算法常见的时间描述时区需要计算的点在lua语言中的写…

我与电源2 我要升压

上一篇文章中讲到,我从LM7805 开始 接触电子设计,后来,随着对更高耐压,更高电流及功率的需求,不断的接触更先进的,效率更高,功率密度更大的电源方案,从线性稳压器到 DCDC 的Buck 电路。从最初 DCDC的异步开关模式转到使用同步开关模式。 这里要对线性稳压器再说一点。…

library cache lock模拟和处理

会话一: create or replace procedure dummy is begin null; end; /begin Dummy; Dbms_lock.sleep(1000); End; /会话二: SQL> alter procedure dummy compile; 卡住 会话三: SQL> alter procedure dummy compile; 卡住 处理过程…

计算机基础系列 —— CPU

“Make everything as simple as possible, but no simpler.” – Albert Einstein 文中提到的所有实现都可以参考:nand2tetris_sol,但是最好还是自己学习课程实现一遍,理解更深刻。 之前的文章里我们介绍了 Register、PC、RAM 和 ALU&#…

【蓝桥杯】tarjan算法

一.概述 Tarjan 算法是基于DFS的算法,用于求解图的连通性问题。 Tarjan 算法可以在线性时间内求出: 无向图: 割点与桥双连通分量 有向图: 强连通分量必经点与必经边 1.割点: 若从图中删除节点 x 以及所有与 x 关联的…

【学习】软件科技成果鉴定测试有何作用

软件科技成果鉴定测试是针对软件进行项目申报、科技成果鉴定等相关目的进行的测试。软件测试报告可作为项目申报、科技成果鉴定等工作的依据之一。软件类科技成果鉴定测试从软件文档、功能性、使用技术等方面对软件系统进行符合性测试。其测试结果证明软件的质量是否符合技术合…

机器学习笔记(2)—单变量线性回归

单变量线性回归 单变量线性回归(Linear Regression with One Variable)1.1 模型表示1.2 代价函数1.3 代价函数的直观理解1.4 梯度下降1.5 梯度下降的直观理解1.6 梯度下降的线性回归 单变量线性回归(Linear Regression with One Variable) ps:...今天很倒霉 一名小女孩悄悄地碎…

PTA金字塔游戏

幼儿园里真热闹,老师带着孩子们做一个名叫金字塔的游戏,游戏规则如下: 首先,老师把孩子们按身高从高到矮排列,选出最高的做队长,当金字塔的塔顶,之后在其余小朋友里选出两个最高的,…

JUC:打断正常线程、睡眠线程、park线程的interrupt状态、二阶段终止模式

文章目录 打断标记两阶段终止注意打断park线程 打断标记 睡眠中的线程被打断时,会抛出异常,把打断标记置为false,而不是变为true,wait和join也是。 打断 sleep,wait,join 的线程 这几个方法都会让线程进入…

如何使用Docker安装部署Cronsun?

前言 Cronsun是一款开源的分布式任务调度系统,主要用于在*nix服务器集群中管理和调度周期性任务。相比于传统的Linux crontab 工具,Cronsun提供了一个集中化的Web界面,使得在多台服务器上的定时任务更容易管理和监控,并且具备任务…

大话设计模式——8.原型模式(Prototype Pattern)

1.介绍 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。属于创建型模式。 UML图: 1)浅拷贝: 指创建一个新的对象,然后将原始对象的字段值复制到新对象中。如果字段是基本类型,直接复制…

MySQL高阶SQL语句

文章目录 MySQL高阶SQL语句MySQL常用查询1、按关键字排序1.1 语法1.2 ASC和DESC1.3 对数据表中信息进行排序1.3.1 普通排序1.3.2 结合where进行条件过滤1.3.3 对多个字段进行排序 2、区间判断及查询不重复记录2.1 and/or —— 且/或2.1.1 普通查询2.1.2 嵌套/多条件查询 2.2 di…

Java毕业设计-基于springboot开发的校园志愿者管理系统-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、管理员功能3、志愿者功能 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的校园志愿者管理系统…

“AI程序员”Devin大杀四方后,人类程序员开始了他们的反击......

“首个AI程序员”Devin发布后,大有要替代人类程序员的意味。 在当时发布之初,Devin展示了AI自主处理各种程序任务的案例。其中Devin生成“生命游戏”的演示是最让我震惊的。 所谓“生命游戏”,是由英国数学家约翰何顿康威(John …