LangGraph Studio¶
LangGraph Studio 提供了一种开发 LLM 应用的新方式,它提供了一个专门的代理 IDE,可以实现复杂代理应用的 可视化、交互和调试。
借助可视化图和编辑状态的能力,您可以更好地理解代理工作流程并更快地迭代。LangGraph Studio 与 LangSmith 集成,允许您与队友协作调试故障模式。
特性¶
LangGraph Studio 的主要特性包括
- 可视化您的图
- 通过 UI 运行您的图进行测试
- 通过修改其状态并重新运行来调试您的代理
- 创建和管理助手
- 查看和管理线程
- 查看和管理长期记忆
- 将节点输入/输出添加到LangSmith 数据集进行测试
类型¶
桌面应用¶
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.toml
还是 requirements.txt
),则整个镜像将重建。这将导致 UI 从图视图切换,并开始显示新镜像构建过程的日志。这可能需要一两分钟,完成后您的更新镜像即可使用!
为什么我的图启动时间这么长?(仅限桌面版)¶
LangGraph Studio 与本地 LangGraph API 服务器交互。为了与持续的更新保持一致,LangGraph API 需要定期重建。因此,在启动项目时,您偶尔可能会遇到轻微的延迟。
为什么我的图中出现了额外的边?¶
如果您没有仔细定义条件边,您可能会注意到图中有额外的边出现。这是因为如果没有适当的定义,LangGraph Studio 会假定条件边可以访问所有其他节点。为了避免这种情况,您需要明确指定条件边路由到哪些节点。您可以通过两种方式实现此目的
解决方案 1:包含一个路径映射¶
解决此问题的第一种方法是向您的条件边添加路径映射。路径映射只是一个字典或数组,它将路由函数的可能输出与每个输出对应的节点名称进行映射。路径映射作为第三个参数传递给 add_conditional_edges
函数,如下所示
在这种情况下,路由函数返回 True 或 False,分别映射到 node_b
和 node_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"
相关¶
更多信息请参阅以下内容