跳到内容

LangGraph Studio

LangGraph Studio 提供了一种开发 LLM 应用的新方式,它提供了一个专门的智能体 IDE,支持对复杂智能体应用进行可视化、交互和调试。

借助可视化图和编辑状态的能力,您可以更好地理解智能体工作流程并更快地迭代。LangGraph Studio 与 LangSmith 集成,使您能够与队友协作调试故障模式。

功能

LangGraph Studio 的主要功能包括

类型

桌面应用

LangGraph Studio 可作为适用于 macOS 用户的桌面应用使用。

在 Beta 阶段,LangGraph Studio 对所有 LangSmith 用户免费开放,无论其订阅级别如何。

云端 Studio

如果您已将 LangGraph 应用部署到 LangGraph 平台(云端),您可以作为其一部分访问 Studio。

Studio 常见问题

我的项目为何无法启动?

您的项目可能因多种原因而无法启动,以下是一些最常见的原因。

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.toml还是requirements.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, { foo: "node_b", bar: "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"

欲了解更多信息,请参阅以下内容: