Skip to content

LangGraph 平台架构

我们如何使用Postgres

Postgres是LGP中所有用户、运行和长期记忆数据的持久层。它存储了检查点(更多详情见这里)、服务器资源(线程、运行、助手和定时任务),以及保存在长期记忆存储中的项目(更多详情见这里)。

我们如何使用 Redis

在每个 LGP 部署中,Redis 被用作服务器和队列工作者之间通信的方式,以及存储临时元数据的方式。更多细节如下所述。没有用户/运行数据被存储在 Redis 中。

通信

LGP 中的所有运行都是由每个部署中的后台工作者池执行的。为了启用某些功能(如取消和输出流式传输),我们需要一个双向通信通道,以便于服务器与处理特定运行的工作者之间进行通信。我们使用 Redis 来组织这种通信。

  1. 使用 Redis 列表作为机制,在创建新的运行时唤醒一个工作者。只有哨兵值存储在此列表中,不包含实际的运行信息。然后由工作者从 Postgres 中检索运行信息。
  2. 使用 Redis 字符串和 Redis 发布/订阅频道的组合,使服务器能够向适当的工作者发送运行取消请求。
  3. 工作者使用 Redis 发布/订阅频道广播代理的流式输出,当运行正在处理时。服务器上任何打开的 /stream 请求都会订阅该频道,并在事件到达时将其转发到响应中。任何时候都不会将事件存储在 Redis 中。

临时元数据

在 LGP 部署中,运行可能会因特定失败而重试(目前仅限于运行期间遇到的瞬态 Postgres 错误)。为了限制重试次数(目前每个运行最多尝试 3 次),我们在 Redis 字符串中记录尝试次数,当它被拾取时。这仅包含运行的 ID,且在短暂延迟后过期。

Comments