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

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(日)

相关文章:

LangChain - OpenGPTs

文章目录 MessageGraph 消息图认知架构AssistantsRAGChatBot 持久化配置新模型新工具astream_events总结 关键链接: OpenGPT GitHub 存储库YouTube 上的 OpenGPT 演练LangGraph:Python、JS 两个多月前,在 OpenAI 开发日之后,我们…...

pe格式从入门到图形化显示(四)-节表

文章目录 前言一、什么是Windows PE格式节表?二、解析节表并显示1.节表数据结构以及字段描述2.节表的属性3.解析4.显示 前言 通过分析和解析Windows PE格式,并使用qt进行图形化显示 一、什么是Windows PE格式节表? PE格式的节表&#xff08…...

路由策略与路由控制之双点双向重发布(OSPF-ISIS)实验

双点双向重发布在路由协议中,特别是在OSPF(开放式最短路径优先)与IS-IS(中间系统到中间系统)等协议之间,指的是在两个协议间或者两个进程间进行路由信息共享的机制。这种机制涉及到在两个不同的协议区域使用…...

9proxy—数据采集工具全面测评

9Proxy数据采集工具Unlock the web with 9Proxy, the top residential proxy provider. Get unlimited bandwidth, affordable prices, and secure HTTPS and Socks5 configurations.https://9proxy.com/?utm_sourceblog&utm_mediumcsdn&utm_campaignyan 前言 在当今数…...

上海晶珩树莓派工业智能机械臂,亮相2024年embedded world博览会!

上海晶珩树莓派工业智能机械臂,亮相2024年embedded world博览会! 工业智能机械臂是上海晶珩(EDATEC)团队基于树莓派工业相机ED-AIC2000和树莓派工业触摸屏ED-HMI2320开发的创新应用案例。 工业智能机械臂具备卓越的定位能力&…...

蓝桥杯——求和

题目 给定 n 个整数 a1, a2,…,an,求它们两两相乘再相加的和即: Sa1a2a1a3a1ana2a3 a(n-2)*an...a(n-1)*an 输入格式 输入的第一行包含一个整数 n。 第二行包含 几 个整数 a1,a2,,an。 输出格式 输出一个整数 S,表示所…...

设计模式:责任链模式示例

责任链模式可以应用于多种场景,下面是几个不同场景的例子,每个例子都包括完整的代码。 示例1:日志处理系统 在日志处理系统中,日志消息可以根据其严重性(错误、警告、信息)被不同级别的日志处理器处理。 …...

SpringBoot快速入门笔记(4)

文章目录 一、Vue框架1、前端环境准备2、简介3、快速开始4、事件绑定 二、Vue组件化开发1、NPM2、Vue Cli3、组件化开发4、SayHello自定义组件5、Movie自定义组件 一、Vue框架 1、前端环境准备 编码工具:VSCode 依赖管理:NPM 项目构建:VueCl…...

GoPro相机使用的文件格式和频率

打开GoPro相机(以11为例),里面是一个DCIM文件夹。 DCIM是digital camera in memory 的简写,即存照片的文件夹,常见于数码相机、手机存储卡中的文件夹名字。 正常手机拍照和视频都是保存在此文件夹的。正常建议不用删,因为只要拍照…...

Redis Stack 安装部署

参考:Run Redis Stack on Docker | Redis Redis-stack 初体验_redis stack-CSDN博客 【docker】运行redis_docker run redis-stack-server requirepass-CSDN博客 Redis Stack 是一组软件套件,它主要由三部分组成。 一个是 Redis Stack Server&#x…...

【经典算法】LeetCode 5: 最长回文子串(Java/C/Python3实现含注释说明,Medium)

目录 题目描述思路及实现方式一:动态规划法思路代码实现Java版本C语言版本Python3版本 复杂度分析 方式二:中心扩展法思路代码实现Java版本C语言版本Python3版本 复杂度分析 总结相似题目 标签(题目类型):回文串、动态规划 题目描述 给定一…...

39.Python从入门到精通—parseString 方法 Python 解析XML实例 使用xml.dom解析xml

39.Python从入门到精通—parseString 方法 Python 解析XML实例 使用xml.dom解析xml parseString 方法Python 解析XML实例使用xml.dom解析xml parseString 方法 parseString 方法是 Python 标准库中 xml.dom.minidom 模块中的一个函数,用于解析 XML 字符串并构建 DO…...

【蓝桥杯第九场小白赛】(部分)

最近写的零零散散的&#xff0c;感觉这两天遇到的题对于短时间提升意义已经不大了&#xff0c;还是做简单题保持手感吧哎 盖印章 #include <iostream> using namespace std; using LLlong long; int main() {ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);LL n,m…...

【Linux】Supervisor 基础

要在Linux上启动Supervisor&#xff0c;你可以按照以下步骤进行操作&#xff1a; 确保你已经安装了Supervisor。使用适合你的Linux发行版的包管理器进行安装。例如&#xff0c;对于Ubuntu&#xff0c;可以运行以下命令安装Supervisor&#xff1a; sudo apt-get update sudo apt…...

48 全连接卷积神经网络 FCN【动手学深度学习v2】

全连接卷积神经网络&#xff1a;神经网络处理语义分割问题的奠基性工作&#xff0c;目前已不太常用。 了解一下全卷积网络模型最基本的设计。 如 下图所示&#xff0c;全卷积网络先使用卷积神经网络抽取图像特征&#xff0c;然后通过11卷积层将通道数变换为类别个数&#xff0…...

pytorch中的nn.MSELoss()均方误差损失函数

一、nn.MSELoss()是PyTorch中的一个损失函数&#xff0c;用于计算均方误差损失。 均方误差损失函数通常用于回归问题中&#xff0c;它的作用是计算目标值和模型预测值之间的平方差的平均值。 具体来说&#xff0c;nn.MSELoss()函数的输入是两个张量&#xff0c;即模型的真实值…...

三国游戏(贪心 排序)

三国游戏 利用贪心、排序、前缀和的计算方法&#xff0c;特别注意不要数据溢出了&#xff0c;sum 加long long s[i] x[i]-y[i]-z[i]输入: 3 1 2 2 2 3 2 1 0 7输出: 2#include <bits/stdc.h> using namespace std;const int N 1e5100;typedef long long ll;bool cm…...

GPU环境安装与虚拟环境安装(适用于Windows下的李沐GPU)

之前我是用的都是VMware的虚拟机且安装的是cpu的pytorch版本,因为想要使用GPU,最终实现了在Windows上使用GPU,并且相关原理也在参考文章或视频内,可以通过原理自行挑选自己所需的配置并安装。 文章目录 1.GPU安装1.1 名词解释1.2 卸载旧版本的CUDA1.3 版本选择步骤(Nivida显卡…...

Http Download

Http / Https 下载文件&#xff0c;startWith不能验证https&#xff0c;测试地址&#xff1a;https://storage.googleapis.com/golang/go1.7.3.windows-amd64.msi private static final Logger logger Logger.getLogger(MethodHandles.lookup().lookupClass());private static…...

【Android】Glide加载SVG,SVG转PNG

Dependency plugins {id kotlin-kapt }dependencies {api com.github.bumptech.glide:glide:4.12.0kapt com.github.bumptech.glide:compiler:4.12.0api com.caverock:androidsvg:1.4 }SvgDecoder 负责解码SVG资源 import com.bumptech.glide.load.Options import com.bumpte…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

Java数组Arrays操作全攻略

Arrays类的概述 Java中的Arrays类位于java.util包中&#xff0c;提供了一系列静态方法用于操作数组&#xff08;如排序、搜索、填充、比较等&#xff09;。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序&#xff08;sort&#xff09; 对数组进行升序…...

Win系统权限提升篇UAC绕过DLL劫持未引号路径可控服务全检项目

应用场景&#xff1a; 1、常规某个机器被钓鱼后门攻击后&#xff0c;我们需要做更高权限操作或权限维持等。 2、内网域中某个机器被钓鱼后门攻击后&#xff0c;我们需要对后续内网域做安全测试。 #Win10&11-BypassUAC自动提权-MSF&UACME 为了远程执行目标的exe或者b…...