LangGraph 平台架构¶
我们如何使用 Postgres¶
Postgres 是 LGP 中所有用户、运行和长期记忆数据的持久层。它存储检查点(更多信息请参见此处)、服务器资源(线程、运行、助手和 Cron 作业)以及保存在长期记忆存储中的项目(更多信息请参见此处)。
我们如何使用 Redis¶
每个 LGP 部署都使用 Redis 作为服务器和队列 worker 进行通信以及存储临时元数据的方式,详情如下。Redis 中不存储用户/运行数据。
通信¶
LGP 中的所有运行都由每个部署中包含的后台 worker 池执行。为了为这些运行启用一些功能(例如取消和输出流式传输),我们需要在服务器和处理特定运行的 worker 之间建立双向通信通道。我们使用 Redis 来组织这种通信。
- Redis 列表用作在新运行创建后立即唤醒 worker 的机制。此列表中只存储一个标记值,不存储实际的运行信息。运行信息随后由 worker 从 Postgres 中检索。
- Redis 字符串和 Redis PubSub 通道的组合用于服务器向适当的 worker 传达运行取消请求。
- worker 使用 Redis PubSub 通道在处理运行时广播来自 agent 的流式输出。服务器中任何打开的
/stream
请求都将订阅该通道并在事件到达时将其转发到响应。Redis 中在任何时候都不存储任何事件。
临时元数据¶
LGP 部署中的运行可能会因特定故障(目前仅限于运行时遇到的瞬时 Postgres 错误)而重试。为了限制重试次数(目前限制为每次运行最多 3 次尝试),我们在 Redis 字符串中记录尝试次数。此字符串除了运行 ID 外不包含任何运行特定信息,并在短时间延迟后过期。