跳转到内容

CLI 工具与本地开发服务器

CLI 工具与本地开发服务器

学习目标

本章要解决什么问题:

  • langgraph-cli 提供哪些命令
  • 本地开发服务器的架构与热重载机制
  • 如何与 LangSmith 平台集成
  • CLI 为何作为独立包而非核心框架的一部分

项目实践

CLI 包结构

libs/cli/
├── langgraph_cli/
│ ├── cli.py # 主入口命令定义
│ ├── dev.py # 本地开发服务器
│ ├── build.py # 构建命令
│ ├── deploy.py # 部署命令
│ └── config.py # 配置解析
├── pyproject.toml
└── tests/

核心命令

命令功能
langgraph dev启动本地开发服务器
langgraph build构建 Docker 镜像
langgraph deploy部署到 LangSmith 平台
langgraph up启动本地 Docker 实例

本地开发服务器

langgraph dev 启动的本地开发服务器提供:

  • 热重载:代码变更后自动重新加载图定义
  • API 端点:REST API 兼容 LangGraph Server 协议
  • 图可视化:Web 界面展示图结构和执行轨迹
  • 调试:实时查看每个节点的输入输出

服务器基于 FastAPI 构建,将 Pregelinvoke() / stream() 方法暴露为 HTTP 端点。

与 LangSmith 的集成

LangSmith 平台提供:

  • Trace 上传:自动上传执行轨迹,可视化调试
  • Evals:评估 Agent 的输出质量
  • Deployment:一键部署到托管环境

CLI 的 deploy 命令将图定义和依赖打包为 Docker 镜像,推送到 LangSmith 的部署平台。

为什么 CLI 是独立包?

CLI 作为独立包(libs/cli/)而非 langgraph 核心的一部分,有以下好处:

  1. 独立发布:CLI 的发布节奏与核心框架不同,可以更快地修复 CLI 特有 bug
  2. 减少依赖:不需要部署能力的用户不需要安装 CLI 依赖(如 Docker SDK)
  3. 语言隔离:CLI 是 Python 包,但 sdk-js 也有独立的 JS 工具链

陷阱与对策

本地服务器依赖 Docker

问题langgraph up 需要 Docker 环境,无 Docker 的系统无法使用。

规避:使用 langgraph dev 启动纯 Python 开发服务器(无需 Docker)。

版本不匹配

问题:CLI 版本与 langgraph 核心版本不匹配,导致 API 不兼容。

规避:在 pyproject.toml 中声明最低版本依赖。

设计取舍

优势

  • 独立演进:CLI 可以独立于核心框架发布
  • 本地开发友好:热重载 + 可视化降低调试成本
  • 与 LangSmith 集成:一键部署

代价

  • 依赖 Docker:部分命令需要 Docker 环境
  • 额外安装:用户需要单独安装 CLI 包

替代方案

  • 集成到核心框架langgraph.dev 子模块,但增加核心包体积
  • 第三方工具集成:通过插件机制对接 FastAPI/Flask,但需要用户自行配置

参考来源