LangChain - OpenGPTs

文章目录
- MessageGraph 消息图
- 认知架构
- Assistants
- RAG
- ChatBot
- 持久化
- 配置
- 新模型
- 新工具
- `astream_events`
- 总结
关键链接:
- OpenGPT GitHub 存储库
- YouTube 上的 OpenGPT 演练
- LangGraph:Python、JS
两个多月前,在 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格式的节表(…...
路由策略与路由控制之双点双向重发布(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…...
【蓝桥杯第九场小白赛】(部分)
最近写的零零散散的,感觉这两天遇到的题对于短时间提升意义已经不大了,还是做简单题保持手感吧哎 盖印章 #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,你可以按照以下步骤进行操作: 确保你已经安装了Supervisor。使用适合你的Linux发行版的包管理器进行安装。例如,对于Ubuntu,可以运行以下命令安装Supervisor: sudo apt-get update sudo apt…...
48 全连接卷积神经网络 FCN【动手学深度学习v2】
全连接卷积神经网络:神经网络处理语义分割问题的奠基性工作,目前已不太常用。 了解一下全卷积网络模型最基本的设计。 如 下图所示,全卷积网络先使用卷积神经网络抽取图像特征,然后通过11卷积层将通道数变换为类别个数࿰…...
pytorch中的nn.MSELoss()均方误差损失函数
一、nn.MSELoss()是PyTorch中的一个损失函数,用于计算均方误差损失。 均方误差损失函数通常用于回归问题中,它的作用是计算目标值和模型预测值之间的平方差的平均值。 具体来说,nn.MSELoss()函数的输入是两个张量,即模型的真实值…...
三国游戏(贪心 排序)
三国游戏 利用贪心、排序、前缀和的计算方法,特别注意不要数据溢出了,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 下载文件,startWith不能验证https,测试地址: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…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
游戏开发中常见的战斗数值英文缩写对照表
游戏开发中常见的战斗数值英文缩写对照表 基础属性(Basic Attributes) 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...
SQL进阶之旅 Day 22:批处理与游标优化
【SQL进阶之旅 Day 22】批处理与游标优化 文章简述(300字左右) 在数据库开发中,面对大量数据的处理任务时,单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”,深入探讨如何通过批量操作和游标技术提…...
k8s从入门到放弃之Pod的容器探针检测
k8s从入门到放弃之Pod的容器探针检测 在Kubernetes(简称K8s)中,容器探测是指kubelet对容器执行定期诊断的过程,以确保容器中的应用程序处于预期的状态。这些探测是保障应用健康和高可用性的重要机制。Kubernetes提供了两种种类型…...
