Skip to content

LangGraph Studio

LangGraph Studio 提供了一种新的方式来开发 LLM 应用程序,通过提供一个专门的代理 IDE,使复杂的代理应用程序的可视化、交互和调试成为可能。

借助可视化图形和编辑状态的能力,您可以更好地理解代理工作流并更快地迭代。LangGraph Studio 与 LangSmith 集成,允许您与团队成员合作调试故障模式。

特性

LangGraph Studio 的主要特性包括:

类型

桌面应用

LangGraph Studio 作为 桌面应用 提供给 MacOS 用户。

在 beta 期间,LangGraph Studio 对所有任何套餐级别的 LangSmith 用户免费开放。

云工作室

如果您已在 LangGraph 平台 (Cloud) 上部署了您的 LangGraph 应用程序,您可以作为其一部分访问该工作室。

开发服务器

LangGraph CLI 还包含一个命令,用于运行一个内存中的开发服务器,可以用来将本地 LangGraph 应用与工作室连接。 有关更多信息,请参见此处的说明

其工作原理是它在您的本地环境内部运行。 它会启动一个内存中的开发服务器来部署图形。 然后,您可以通过 LangGraph 平台的云托管版本连接到工作室。 需要明确的是,网络工作室将连接到您本地运行的服务器 - 您的代理仍然在本地运行,且永远不会离开您的设备。

工作室常见问题

为什么我的项目无法启动?

您的项目无法启动可能有几个原因,这里是一些最常见的原因。

Docker 问题(仅限桌面)

LangGraph Studio(桌面)需要 Docker Desktop 版本 4.24 或更高版本。请确保您安装的 Docker 版本符合该要求,并在尝试使用 LangGraph Studio 之前确保 Docker Desktop 应用程序正在运行。此外,请确保您已经将 docker-compose 更新到 2.22.0 或更高版本。

配置或环境问题

您的项目无法启动的另一个原因可能是您配置文件定义不正确,或者缺少所需的环境变量。

中断是如何工作的?

当您选择 Interrupts 下拉菜单并选择一个节点进行中断时,图形将在该节点运行之前和之后暂停执行(除非该节点直接进入 END)。这意味着您将能够在节点运行之前和运行之后编辑状态。这旨在允许开发人员对节点的行为进行更细粒度的控制,并更容易观察节点的行为。如果节点是图中的最后一个节点,您将无法在节点运行之后编辑状态。

如何重新加载应用?(仅限桌面)

如果您想要重新加载应用程序,请不要像通常那样使用 Command+R。相反,请关闭并重新打开应用程序以进行全面刷新。

自动重建是如何工作的?(仅限桌面)

LangGraph Studio 的一个关键特性是,当您更改源代码时,它会自动重建您的映像。这允许进行超快速的开发和测试周期,使您能够轻松迭代图形。LangGraph 重建您的映像有两种不同的方法:通过编辑映像或完全重建它。

从源代码更改重建

如果您仅修改了源代码(没有配置或依赖项更改!),则映像不需要完全重建,LangGraph Studio 将仅更新相关部分。底左的 UI 状态会暂时从 Online 切换到 Stopping,同步编辑映像。在此过程进行时,日志将显示出来,而在映像编辑完成后,状态将恢复为 Online,您将能够运行包含修改代码的图形!

从配置或依赖项更改重建

如果您编辑了图形配置文件 (langgraph.json) 或依赖项(pyproject.tomlrequirements.txt),则整个映像将被重建。这将导致 UI 切换离开图形视图,开始显示新映像构建过程的日志。这个过程可能需要一到两分钟,一旦完成,您更新的映像将准备好使用!

为什么我的图形启动如此缓慢?(仅限桌面)

LangGraph Studio 与本地 LangGraph API 服务器交互。为了与持续更新保持一致,LangGraph API 需要定期重建。因此,您在启动项目时可能会偶尔经历轻微延迟。

为什么我的图形中显示了额外的边?

如果您没有仔细定义您的条件边,您可能会注意到图中出现了额外的边。这是因为没有正确的定义,LangGraph Studio 假定条件边可以访问所有其他节点。为了避免这种情况,您需要明确如何定义条件边路由到的节点。您可以通过两种方式做到这一点:

解决方案 1:包括路径映射

解决此问题的第一种方法是为您的条件边添加路径映射。路径映射只是一个字典或数组,它将路由函数的可能输出与对应于每个输出的节点名称映射。路径映射作为第三个参数传递给 add_conditional_edges 函数,如下所示:

graph.add_conditional_edges("node_a", routing_function, {True: "node_b", False: "node_c"})
graph.addConditionalEdges("node_a", routingFunction, { true: "node_b", false: "node_c" });

在这种情况下,路由函数返回 True 或 False,分别映射到 node_bnode_c

解决方案 2:更新路由器的类型(仅限 Python)

您还可以通过使用 Literal python 定义明确指定路由函数可以映射到的节点类型,而不是传递路径映射。以下是如何以这种方式定义路由函数的示例:

def routing_function(state: GraphState) -> Literal["node_b","node_c"]:
    if state['some_condition'] == True:
        return "node_b"
    else:
        return "node_c"

相关

有关更多信息,请参见以下内容: