跳到内容

LangGraph Studio

LangGraph Studio 提供了一种开发 LLM 应用的新方法,它提供了一个专门的代理 IDE,可以实现复杂代理应用的visualization(可视化)、interaction(交互)和 debugging(调试)。

通过可视化图形和编辑状态的能力,您可以更好地理解代理工作流程并更快地迭代。LangGraph Studio 与 LangSmith 集成,让您可以与队友协作调试失败模式。

功能特性

LangGraph Studio 的主要功能特性是

类型

桌面应用

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

在 Beta 测试期间,LangGraph Studio 对所有 LangSmith 用户在任何计划层级上均可免费使用。

云端 Studio

如果您已将 LangGraph 应用程序部署在 LangGraph Platform(云端)上,则可以作为其中的一部分访问 Studio

Studio 常见问题解答

为什么我的项目启动失败?

您的项目可能启动失败的原因有几个,以下是一些最常见的原因。

Docker 问题(仅限桌面应用)

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

配置或环境问题

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

中断是如何工作的?

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

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

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

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

LangGraph Studio 的主要功能特性之一是,当您更改源代码时,它会自动重建您的镜像。这实现了超快的开发和测试周期,从而可以轻松迭代您的图形。LangGraph 重建镜像有两种不同的方式:编辑镜像或完全重建镜像。

从源代码更改重建

如果您仅修改了源代码(没有配置或依赖项更改!),则镜像不需要完全重建,LangGraph Studio 将仅更新相关部分。当镜像被编辑时,左下角的 UI 状态将从“在线”临时切换到“停止中”。日志将在此过程发生时显示,并且在镜像编辑完成后,状态将更改回“在线”,您将能够使用修改后的代码运行您的图形!

从配置或依赖项更改重建

如果您编辑了图形配置文件 (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, { 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"

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