LangGraph 平台¶
概述¶
LangGraph 平台是一个商业解决方案,用于将代理式应用程序部署到生产环境,它建立在开源的 LangGraph 框架之上。
LangGraph 平台由几个协同工作的组件组成,用于支持 LangGraph 应用程序的开发、部署、调试和监控
- LangGraph 服务器:该服务器定义了一个规范的 API 和架构,其中包含了部署代理式应用程序的最佳实践,让您可以专注于构建代理逻辑,而不是开发服务器基础设施。
- LangGraph Studio:LangGraph Studio 是一个专用 IDE,可以连接到 LangGraph 服务器,从而实现应用程序的本地可视化、交互和调试。
- LangGraph CLI:LangGraph CLI 是一个命令行界面,有助于与本地 LangGraph 进行交互
- Python/JS SDK:Python/JS SDK 提供了一种以编程方式与已部署的 LangGraph 应用程序交互的方法。
- 远程图:远程图允许您像在本地运行一样与任何已部署的 LangGraph 应用程序进行交互。
LangGraph 平台提供了几种不同的部署选项,详见部署选项指南。
为什么要使用 LangGraph 平台?¶
LangGraph 平台旨在使代理式应用程序的部署无缝且生产就绪。
对于更简单的应用程序,部署 LangGraph 代理可以像使用您自己的服务器逻辑一样简单——例如,设置一个 FastAPI 端点并直接调用 LangGraph。
选项 1:使用自定义服务器逻辑进行部署¶
对于基本的 LangGraph 应用程序,您可以选择使用自定义服务器基础设施来处理部署。通过使用 Hono 等框架设置端点,您可以像部署任何其他 JavaScript 应用程序一样快速部署和运行 LangGraph。
// index.ts
import { Hono } from "hono";
import { StateGraph } from "@langchain/langgraph";
const graph = new StateGraph(...)
const app = new Hono();
app.get("/foo", (c) => {
const res = await graph.invoke(...);
return c.json(res);
});
这种方法适用于需求简单的应用程序,并为您提供了对部署设置的完全控制。例如,您可以将其用于不需要长时间会话或持久内存的单一助手应用程序。
选项 2:利用 LangGraph 平台进行复杂部署¶
随着应用程序规模的扩大或增加复杂功能,部署要求通常会随之演变。运行具有更多节点、更长处理时间或需要持久内存的应用程序可能会带来挑战,这些挑战很快就会变得耗时且难以手动管理。LangGraph 平台旨在无缝处理这些挑战,让您能够专注于代理逻辑,而不是服务器基础设施。
以下是复杂部署中常见的一些问题,LangGraph 平台可以解决这些问题
-
流式传输支持:随着代理变得越来越复杂,它们通常受益于将令牌输出和中间状态都流式传输回用户。如果没有这一点,用户将被迫等待可能长时间的操作而没有任何反馈。LangGraph 服务器提供针对各种应用程序需求优化的多种流式传输模式。
-
后台运行:对于处理时间较长(例如数小时)的代理,保持开放连接可能不切实际。LangGraph 服务器支持在后台启动代理运行,并提供轮询端点和 Webhook 以有效监控运行状态。
-
支持长时间运行:普通的服务器设置在处理需要很长时间才能完成的请求时,经常会遇到超时或中断。LangGraph 服务器的 API 通过发送定期心跳信号,为这些任务提供了强大的支持,防止在长时间处理过程中出现意外的连接关闭。
-
处理突发流量:某些应用程序,特别是那些具有实时用户交互的应用程序,可能会遇到“突发”的请求负载,即大量请求同时涌向服务器。LangGraph 服务器包含一个任务队列,确保即使在重负载下也能一致地处理请求而不会丢失。
-
重复发送消息:在用户驱动的应用程序中,用户快速发送多条消息是很常见的。如果处理不当,这种“重复发送消息”可能会扰乱代理流程。LangGraph 服务器提供内置策略来处理和管理此类交互。
-
检查点和内存管理:对于需要持久化(例如对话记忆)的代理,部署一个健壮的存储解决方案可能很复杂。LangGraph 平台包含优化的检查点和内存存储,可在会话之间管理状态,无需自定义解决方案。
-
人工干预支持:在许多应用程序中,用户需要一种方法来干预代理流程。LangGraph 服务器为人工干预场景提供了专用端点,简化了将人工监督集成到代理工作流中的过程。
通过使用 LangGraph 平台,您可以获得一个强大、可扩展的部署解决方案,它能减轻这些挑战,从而节省您手动实施和维护这些功能的工作。这使您可以更多地专注于构建有效的代理行为,而不是解决部署基础设施问题。