LangChain - OpenGPTs

news2024/11/27 10:38:09

在这里插入图片描述

文章目录

    • 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.coloradmin.cn/o/1577331.html

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

相关文章

书生·浦语大模型-第三节课笔记/作业

笔记 作业 原版 prompt控制节奏,实现类似关键词检索、主题、信息抽取等功能注意这里根据llm返回的topic (prompt: 告诉我这句话的主题,直接说主题不要解释)进行召回检索(CacheRetriever), 并再次让大模型判断query与返回的检索的相关程度. 如果本地检索…

男生穿什么裤子显腿长?男生显腿长裤子分享

现在市面上出现很多劣质而且不耐洗不耐穿的裤子,不但穿着体验感差,而且还可能会对皮肤有影响。为此作为一名穿搭博主,我专门做了这篇关于男生裤子的测评,希望大家能够通过一下的科普知识,对选择裤子有更详细的了解。 什…

UTONMOS区块链游戏世界的冒险之旅

在数字世界的浪潮中,utonmos的多款区块链游戏正引领着一场前所未有的游戏革命。utonmos令人兴奋的游戏融合了区块链技术的力量,为玩家们带来了全新的体验和无限的可能性。 utonmos区块链游戏不仅仅是普通的游戏,它是一个一款款充满创新和策略…

Zabbix4.0之LDAP认证

相信很多朋友的公司都在使用Zabbix开源系统作为企业的网络、服务器等系统、设备的监控平台,当我们所在的企业或组织比较大时,人员众多,系统众多,各系统的账户也就多了起来,一个同事在工作时要记住很多不同的用户名和密…

前端| 富文本显示不全的解决方法

背景 前置条件:编辑器wangEditor vue项目 在pc端进行了富文本操作, 将word内容复制到编辑器中, 进行发布, pc端正常, 在手机端展示的时候 显示不全 分析 根据h5端编辑器内容的数据展示, 看到有一些样式造…

从路由器syslog日志监控路由器流量

路由器是关键的网络基础设施组件,需要随时监控,定期监控路由器可以帮助管理员确保路由器通信正常。日常监控还可以清楚地显出通过网络的流量,通过分析路由器流量,安全管理员可及早识别可能发生的网络事件,从而避免停机…

Longan Pi 3H 开发板体验

Longan Pi 3H 开发板体验 开箱内容 打开包装,你可以看到以下物品 一个Longan Pi 3H盒子Longan Pi 3H开发板 产品基本介绍 Longan Pi 3H 是基于 Longan Module 3H 核心板的 ARM Linux 开发板,以 H618 (Quad core ARM Cortex-A531.5Ghz , 64-bit) 为主控…

Qt 4.7作业

1、自由发挥应用场景实现一个登录窗口界面。 【可以是QQ登录界面、也可以是自己发挥的登录界面】 要求:尽量每行代码都有注释 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//设置窗口标题this->setWindowTitle(&q…

图片批量高效修改像素,自定义缩小JPG图片像素,支持画质优先

在数字时代,图片已经成为我们生活中不可或缺的一部分。从社交媒体的头像,到电商平台的商品展示,再到新闻报道的配图,图片无处不在。然而,你是否曾经遇到过因为图片像素过高或过低而带来的困扰?现在&#xf…

是时候开启Copilot下一篇章:Microsoft AI

微软总裁兼首席执行官萨提亚纳德拉欢迎 Mustafa Suleyman 和 Karn Simonyan 加入微软公司,领导一个新成立的部门 —— Microsoft AI,旨在开发 Copilot 和其他的面向消费者的 AI 产品和研究。 Mustafa Suleyman 将担任 Microsoft AI 执行副总裁&#xf…

2024/4/2—力扣—不用加号的加法

代码实现: 思路:位运算,利用了异或和与的特性,异或操作与加操作的区别在于异或操作在二进制状态下两个数同1不进位,只是置为0,其他均相同,那么使用与运算计算进位值,补齐异或操作的缺…

asm磁盘组无法写入问题-处理中

有个11204的rac环境,没应用补丁,5号突然报归档满,登录环境后发现奇怪,一个1T磁盘建成的DATA磁盘组使用了近800G,读写正常,一个1.5T磁盘建成的FRA磁盘组,目前还剩余729551M,无法写入归…

numpy,matplotilib学习(菜鸟教程)

所有内容均来自于: NumPy 教程 | 菜鸟教程 Matplotlib 教程 | 菜鸟教程 numpy模块 numpy.nditer NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式。 for x in np.nditer(a, orderF):Fortran order,即是列序优先&#x…

C语言——文件管理

文件:即磁盘上的文件,使用文件可以将数据直接存放在电脑的硬盘上,做到数据持久化。 在程序设计中,按文件的功能划分,将文件分为程序文件与数据文件 程序文件 程序文件包括源文件(.c)&#xff0…

我国聚四氟乙烯产量逐渐增长 进口量有所上涨

我国聚四氟乙烯产量逐渐增长 进口量有所上涨 聚四氟乙烯(PTFE),是以四氟乙烯作为单体聚合制作而成的一种高分子聚合物,化学方程式为(C2F4)n,熔点在321-344℃之间。聚四氟乙烯具有耐热、耐寒、耐腐蚀、抗老化、润滑性高…

蓝桥杯刷题-14-更小的数-区间DP⭐

蓝桥杯2023年第十四届省赛真题-更小的数 //区间DP #include <iostream> #include<bits/stdc.h> #define int long long using namespace std; const int N5e310; int f[N][N]; void solve(){string s;cin>>s;int ans0;for(int len2;len<s.size();len){for…

LeetCode-33. 搜索旋转排序数组【数组 二分查找】

LeetCode-33. 搜索旋转排序数组【数组 二分查找】 题目描述&#xff1a;解题思路一&#xff1a;二分查找。1.找哨兵节点&#xff08;nums[0]或nums[-1]&#xff09;可以确定nums[mid]位于前一段或后一段有序数组中。2. 就是边界left和right的变换&#xff0c;具体看代码。解题思…

贪心算法|53.最大子序和

力扣题目链接 class Solution { public:int maxSubArray(vector<int>& nums) {int result INT32_MIN;int count 0;for (int i 0; i < nums.size(); i) {count nums[i];if (count > result) {result count;}if (count < 0) count 0;}return result;} …

mac上搭建鸿蒙开发环境(2024)

开发环境 设备 MacBook Pro 芯片 Apple M1 系统 11.4 内存 16 GB 一、下载公开版本的DevEco Studio 华为官方目前对外提供的版本是DevEco Studio 3.1&#xff0c;可在官网下载https://developer.huawei.com/consumer/cn/deveco-studio/ 因为目前还在学习阶段&#xff0c;…

Pytorch数据结构:Tensor(张量)及其维度和数据类型

文章目录 Tensor基础1.1、Tensor的维度&#xff08;Dimensions&#xff09;1.1.1、举例说明1.1.2、高维Tensor 1.2、.dim()和.size()方法1.2.1、.dim()方法1.2.2、.size()方法1.2.3、.shape属性1.2.3、示例代码1.2.3.1、一维Tensor1.2.3.2、二维Tensor1.2.3.3、三维Tensor 1.3、…