LangChain - OpenGPTs

在这里插入图片描述

文章目录

    • MessageGraph 消息图
    • 认知架构
      • Assistants
      • RAG
      • ChatBot
    • 持久化
    • 配置
    • 新模型
    • 新工具
    • `astream_events`
    • 总结


关键链接:

  • OpenGPT GitHub 存储库
  • YouTube 上的 OpenGPT 演练
  • LangGraph:PythonJS

两个多月前,在 OpenAI 开发日之后,我们推出了 OpenGPT:类似于开源 GPT 商店。
它由LangGraph的早期版本提供支持,LangGraph 是 LangChain 的扩展,旨在将代理构建为图表。
当时,我们并没有过多强调这个新软件包,因为我们还没有公开发布它并且仍在研究界面。
两周前,我们终于开始启动 LangGraph,并在上周末更新了 OpenGPT 以充分使用 LangGraph(并添加了一些新功能)。
我们认为现在是对 OpenGPT 及其驱动因素进行技术深入研究的最佳时机。


在这篇博客中,我们将讨论:

  • MessageGraph:OpenGPT 运行的一种特定类型的图
  • 认知架构:OpenGPT 支持的 3 种不同类型的认知架构是什么,以及它们有何不同
  • 持久性:如何通过 LangGraph 检查点在 OpenGPT 中实现持久性。
  • 配置:我们如何使用 LangChain 原语来配置所有这些不同的机器人。
  • 新模型:我们支持哪些新模型
  • 新工具:我们支持哪些新工具
  • astream_events:我们如何使用这种新方法来流式传输令牌和中间步骤

如果 YouTube 视频更符合您的风格,我们还制作了视频演练!


MessageGraph 消息图

OpenGPT 运行在 上MessageGraph,这是我们在 LangGraph 中引入的一种特殊类型的图。
该图的特殊之处在于 每个节点接收消息列表 并返回消息 以附加到消息列表。
我们认为这种“消息传递”很有趣,原因如下:

  • 它与新的“聊天完成”模型的 I/O 密切相关,该模型接收消息列表并返回消息
  • 消息传递是分布式系统中常用的通信方法
  • 它使正在完成的工作的可视化变得更容易,因为每个工作单元现在都是通用类型
  • 它与 OpenAI 引入的 Assistants API 密切相关(其中消息附加到线程)
  • 从概念上讲,它似乎可以扩展到多代理系统(其中每个代理只是将消息附加到消息列表中)

通过使用,MessageGraph我们对我们创建的代理的输入和输出做出假设,但值得注意的是,我们没有对这些代理的认知架构做出任何假设。
如下所示,这可以支持多种认知架构。


认知架构

作为 OpenGPT 更新的一部分,我们添加了三种不同的认知架构,以便用户在创建机器人时进行选择。

  • Assistants:可以配备任意数量的工具,并使用LLM 来决定何时使用它们
  • RAG:它们配备了一个猎犬,并且他们总是使用它。
  • ChatBot:这些只是通过自定义系统消息进行参数化。

Assistants

助理可以配备任意数量的工具,并使用LLM 来决定何时使用它们。
这使它们成为最灵活的选择,但它们适用于较少的模型,并且可靠性较差。

创建助手时,您需要指定一些内容。

首先,您选择要使用的语言模型。
只有少数语言模型可以可靠地使用:GPT-3.5、GPT-4、Claude 和 Gemini。

其次,您选择要使用的工具。
这些可以是预定义的工具或从上传的文件构建的检索器。您可以选择任意数量。

认知架构可以被认为是一个循环。
首先,LLM 被要求确定要采取什么(如果有)行动。如果它决定采取行动,那么这些行动就会被执行并循环回来。
如果决定不采取任何行动,则 LLM 的响应是最终响应,并且结束循环。

在这里插入图片描述


这可能是一个非常强大且灵活的架构。这可能最接近我们人类的运作方式。
然而,这些也可能不是超级可靠,并且通常只适用于性能更高的模型(即使如此,它们也可能会搞砸)。
因此,我们引入了一些更简单的架构。


RAG

GPT 存储的主要用例之一是 上传文件 并向机器人提供这些文件的知识。
让架构更加关注该用例意味着什么?

我们添加了一个 RAG 机器人 - 一个以检索为中心的 GPT,具有简单的架构。
首先,检索一组文档。
然后,这些文档在系统消息中传递给对语言模型的单独调用,以便它可以做出响应。

与助手相比,它更加结构化(但功能较弱)。
它总是会查找一些东西——如果你知道你想查找东西,这很好,但如果用户只是想进行正常的对话,这可能会造成浪费。
同样重要的是,这只会查找一次 - 因此,如果它找不到正确的结果,那么它将产生一个糟糕的结果(与助手相比,助手可能会决定再次查找内容)。

在这里插入图片描述


尽管这是一个更简单的架构,但它的优点有几个。
首先,因为它更简单,所以它可以很好地与更广泛的模型(包括许多开源模型)一起工作。
其次,如果您有一个不需要助手灵活性的用例(例如您知道用户每次都会查找信息),那么它可以更加集中。
第三,与下面的最终架构相比,它可以使用外部知识。


ChatBot

最终的架构非常简单——只需调用由系统消息参数化的语言模型。
这使得 GPT 能够呈现出不同的角色和性格。
这显然远不如助手或 RAGBot(可以访问外部数据/计算源)强大 - 但它仍然很有价值!
许多流行的 GPT 归根结底只是系统消息,而 CharacterAI 正在粉碎它,尽管很大程度上也只是系统消息。

在这里插入图片描述


持久化

从一开始,OpenGPT 的一个要求就是持久性,特别是聊天消息的持久性。
我们没有为此构建定制解决方案,而是决定为此添加功能作为 LangGraph 的一部分。
具体来说,在创建图形时,您可以传递 CheckPoint 对象。
该检查点对象将在调用每个节点后保存图的当前状态。

对于 OpenGPT,我们创建了一个 RedisCheckPointer,它将结果保存到 Redis。
目前,这种持久性仅用于显示过去对话的消息,但我们很快就会以更高级的方式使用这种持久性 🙂


配置

OpenGPT 的另一个要求是配置。
我们需要用户能够选择什么 LLM、什么系统消息、什么工具等。
我们还需要保存该配置,以便他们将来可以再次使用该聊天机器人。

LangChain 的一项不太突出的功能是 能够将某些字段 标记为可配置。
您可以对链的任何字段执行此操作,然后在运行时传入配置选项。

这使我们能够以模块化和一致的方式轻松实现可配置性。
首先,我们将不同的字段标记为可配置,然后为了支持不同的架构,我们甚至提供了整个链的可配置替代方案。
然后,当用户创建 GPT 时,我们将保存配置。
最后,当与该 GPT 聊天时,我们将使用保存的配置调用链。

查看 OpenGPT 源代码,了解如何执行此操作的一些高级示例,但请记住,它适用于所有 LangChain 对象!


新模型

作为本次更新的一部分,我们希望引入一些新模型。
首先,我们集成了Google的Gemini模型。该模型性能非常好并且支持函数调用,因此我们将其添加为助手的选项。

我们努力尝试获得一个足够可靠的开源模型来用作助手,但失败了。
即使有了 Mixtral,它仍然有点不可靠。
我们希望得到社区的帮助,让其可靠地工作!

由于无法使其适用于 Assistant 架构,我们添加了 Mixtral(通过Fireworks)作为 ChatBot 和 RAGBot 的选项。它与这些更简单的架构配合得很好!

我们还更新了 OpenAI 代理以使用工具调用而不是函数调用。


新工具

我们还推出了一个新工具 - Robocorp 的 Action Server。
Robocorp 的操作服务器是一种 将任意 Python 函数定义和运行作为工具的简单方法。
因此,即使这是一个单一的工具,也可以使用它来定义许多不同的工具!

请留意本周晚些时候对此进行更深入的探讨


astream_events

值得指出的是,我们正在使用新astream_events方法轻松流回所有事件(新令牌以及函数调用和函数结果)并将其呈现给用户。
我们对此流进行一些过滤以获取相关消息或消息块,然后在 UI 中很好地呈现它们。
如果您不熟悉astream_events,绝对值得在这里更详细地查看它。


总结

我们希望这能为 OpenGPT 提供更合适的技术深入探讨。
有几个领域可以从社区援助中受益:

  • 促使助理架构与开源模型可靠工作的策略
  • 支持其他工具(包括任意 OpenAPI 规范)

OpenGPT 背后的所有内容也通过 API 端点公开,因此请随意分叉并仅使用后端。

如果您是一家希望在内部部署 OpenGPT 的企业,请联系 gtm@langchain.dev。


伊织 2024-04-07(日)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目管理中的估算活动资源

在项目管理中,资源估算是一项至关重要的任务。正确地估算活动资源可以确保项目的顺利进行,避免资源浪费和不必要的延误。以下是对项目管理中常见的活动资源类型的详细分析。 一、人力资源 人力资源是项目管理中最基本的资源之一。它包括项目团队成员的…

Linux gcc day5粘滞位

粘滞位 背景:一定时在一个公共目录(root创建)下。进行临时文件的操作 Linux系统中有很多人,我们需要在一个公共目录下,进行临时文件的操作(增删查改) 创建一个根目录下的dir(mytmp…

指针的深入理解(六)

指针的深入理解(六) 个人主页:大白的编程日记 感谢遇见,我们一起学习进步! 文章目录 指针的深入理解(六)前言一. sizeof和strlen1.1sizeof1.2strlen1.3sizeof和strlen对比 二.数组名和指针加减…

Java变量详解

​ 这里写目录标题 第一章、Java中的变量分类1.1)变量分类1.2)成员变量分类1.3)成员变量和局部变量的区别 第二章、成员变量详解2.1)成员变量作用域/权限修饰符2.2)成员变量和成员属性的区别2.3)成员变量初…

是否有替代U盘,可安全交换的医院文件摆渡方案?

医院内部网络存储着大量的敏感医疗数据,包括患者的个人信息、病历记录、诊断结果等。网络隔离可以有效防止未经授权的访问和数据泄露,确保这些敏感信息的安全。随着法律法规的不断完善,如《网络安全法》、《个人信息保护法》等,医…

spring事务那些事

实际工作中还会面临千奇百怪的问题,看下面返个例子(注意MySql数据库测试): //1.hello1Service 调用 hello2Service Transactional(propagation Propagation.REQUIRED,rollbackFor Exception.class) public void doUpdate() {//…

【CHI】(十二)Memory Tagging

目录 1. Introduction 2. Message extensions 3. Tag coherency 4. Read transaction rules 4.1 TagOp values 4.2 Permitted initial MTE tag states 5. Write transactions 5.1 Permitted TagOp values 5.2 TagOp, TU, and tags relationship 6. Dataless transact…

Java 处理Mysql获取树形的数据

Mysql数据&#xff1a; 代码如下&#xff1a; Entity&#xff1a; Data Accessors(chain true) public class Region {private BigInteger id;//名称private String name;//父idprivate BigInteger parentId;private List<Region> children;private Integer createTim…

书生·浦语训练营二期第二次笔记

文章目录 1. 部署 InternLM2-Chat-1.8B 模型进行智能对话1.1 配置环境1.2 下载 InternLM2-Chat-1.8B 模型 2. 实战&#xff1a;部署实战营优秀作品 八戒-Chat-1.8B 模型2.1 配置基础环境2.2 使用 git 命令来获得仓库内的 Demo 文件&#xff1a;2.3 下载运行 Chat-八戒 Demo 3. …

Vue2 —— 学习(二)

shsh一、绑定 class 样式 &#xff08;一&#xff09;字符串写法 1.流程介绍 适用于样式的类名不确定 需要动态指定 通过 指令绑定的形式&#xff0c;在模板中的类标签绑定 Vue 实例中的数据 mood <div class"basic" :class"mood" click"chang…

AutoAlignV2:基于可变形特征聚合的动态多模态3D目标检测

AutoAlignV2 Deformable Feature Aggregation for Dynamic Multi-Modal 3D Object Detection 论文网址&#xff1a;AutoAlignV2 论文代码&#xff1a;AutoAlignV2 简读论文 这篇论文提出了一种名为AutoAlignV2的动态多模态3D目标检测框架,旨在高效融合激光雷达点云和RGB图像…

双目运算符和单目运算符的重载

目录 题目 源码 结果示例 题目 建立一个矩阵类&#xff0c;可以完成指定的操作或运算。 说明&#xff1a; 矩阵为2行3列&#xff0c;基类型为整型&#xff1b;操作或运算&#xff1a;初始化&#xff08;>>&#xff09;、输出&#xff08;<<&#xff09;、赋值…

2024年网络安全趋势前瞻:从AI攻击到云安全新挑战

随着2024年开展新的序幕&#xff0c;网络安全领域正面临着前所未有的挑战与机遇&#xff0c;一系列引人注目的趋势和预测逐渐浮出水面。 一、AI技术发展引发的安全问题 近年来&#xff0c;我们见证了AI技术的飞速进步&#xff0c;其中ChatGPT等引领潮流的AI服务成为公众瞩目的…

数据结构__顺序表

概念及结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下采用数组存储。在数组上完成数据的增删查改 需要用到数组&#xff1a;数组的绝对优势&#xff1a;下标的随机访问&#xff08;因为物理空间连续&#xff09; a[i]等…

git 常用命令和使用方法

作者简介&#xff1a; 一个平凡而乐于分享的小比特&#xff0c;中南民族大学通信工程专业研究生在读&#xff0c;研究方向无线联邦学习 擅长领域&#xff1a;驱动开发&#xff0c;嵌入式软件开发&#xff0c;BSP开发 作者主页&#xff1a;一个平凡而乐于分享的小比特的个人主页…

IoT数采平台4:测试

IoT数采平台1&#xff1a;开篇IoT数采平台2&#xff1a;文档IoT数采平台3&#xff1a;功能IoT数采平台4&#xff1a;测试 Modbus RTU串口测试 OPC测试 HTTP测试 MQTT透传测试 MQTT网关测试及数据上报 TCP / UDP 监听&#xff0c;客户端连上后发送信息&#xff0c;客户端上报数据…

Linux从入门到精通 --- 4(下).网络请求和下载、端口、进程管理、主机状态监控、环境变量、文件的上传和下载、压缩和解压

文章目录 第四章(下)&#xff1a;4.8 网络请求和下载4.8.1 ping4.8.2 wget4.8.3 curl 4.9 端口4.9.1 查看端口占用 4.10 进程管理4.10.1 查看进程4.10.2 查看指定进程4.10.3 关闭进程 4.11 主机状态监控4.11.1 查看系统资源占用4.11.2 top交互式选项4.11.3 磁盘信息监控4.11.4 …

uniapp-设置UrlSchemes从外部浏览器H5打开app

需求&#xff1a;外部浏览器H5页面&#xff0c;跳转到uniapp开发的原生app内部。 1、uniapp内部的配置&#xff1a; &#xff08;1&#xff09;打开manifest->App常用其他设置&#xff0c;如下&#xff0c;按照提示输入您要设置的urlSchemes&#xff1a; &#xff08;2&am…

数据库关系模式三元及以上分解无损连接判断(表格法)

例题 1.首先构造初始表&#xff0c;如下表所示。 A B C D E ABC a1 a2 a3 b14 b15 CD b21 b22 a3 a4 b15 DE b31 b32 b33 a4 a5 2.遍历函数依赖&#xff0c;对AB→C&#xff0c;因各元组的第一、二列没有相同的分量&#xff0c;所以表不改变。 3.由C→D…

MacOS Docker 部署 Redis 数据库

一、简介 Redis是一个开源的、使用C语言编写的、基于内存亦可持久化的Key-Value数据库&#xff0c;它提供了多种语言的API&#xff0c;并支持网络交互。Redis的数据存储在内存中&#xff0c;因此其读写速度非常快&#xff0c;每秒可以处理超过10万次读写操作&#xff0c;是已知…