LangGraph CLI¶
LangGraph 命令行界面包含用于在本地 Docker 中构建和运行 LangGraph 平台 API 服务器的命令。出于开发和测试目的,您可以使用 CLI 部署本地 API 服务器。
安装¶
- 确保 Docker 已安装(例如运行 `docker --version`)。
-
安装 CLI 包
-
运行命令 `langgraph --help` 或 `npx @langchain/langgraph-cli --help` 以确认 CLI 正常工作。
配置文件¶
LangGraph CLI 需要一个 JSON 配置文件,该文件遵循此模式。它包含以下属性
注意
LangGraph CLI 默认使用当前目录中的配置文件 **langgraph.json**。
键 | 描述 |
---|---|
dependencies |
**必需**。LangGraph 平台 API 服务器的依赖项数组。依赖项可以是以下之一
|
graphs |
**必需**。从图 ID 到定义编译图或创建图的函数的路径的映射。示例
|
auth |
*(v0.0.11 中新增)* 包含您的认证处理程序路径的认证配置。示例:`./your_package/auth.py:auth`,其中 `auth` 是 `langgraph_sdk.Auth` 的一个实例。有关详细信息,请参阅认证指南。 |
base_image |
可选。用于 LangGraph API 服务器的基础镜像。默认为 `langchain/langgraph-api` 或 `langchain/langgraphjs-api`。使用此选项可将您的构建固定到特定版本的 LangGraph API,例如 `"langchain/langgraph-server:0.2"`。有关更多详细信息,请参阅https://hub.docker.com/r/langchain/langgraph-server/tags。(`langgraph-cli==0.2.8` 中新增) |
image_distro |
可选。基础镜像的 Linux 发行版。必须是 `"debian"` 或 `"wolfi"`。如果省略,默认为 `"debian"`。在 `langgraph-cli>=0.2.11` 中可用。 |
env |
`.env` 文件的路径,或从环境变量到其值的映射。 |
store |
用于向 BaseStore 添加语义搜索和/或存活时间 (TTL) 的配置。包含以下字段
|
ui |
可选。代理发出的 UI 组件的命名定义,每个都指向一个 JS/TS 文件。(`langgraph-cli==0.1.84` 中新增) |
python_version |
`3.11`、`3.12` 或 `3.13`。默认为 `3.11`。 |
node_version |
指定 `node_version: 20` 以使用 LangGraph.js。 |
pip_config_file |
`pip` 配置文件的路径。 |
dockerfile_lines |
在从父镜像导入后添加到 Dockerfile 的额外行数组。 |
checkpointer |
检查点器的配置。包含一个 `ttl` 字段,该字段是一个具有以下键的对象
|
http |
HTTP 服务器配置,包含以下字段
|
键 | 描述 |
---|---|
graphs |
**必需**。从图 ID 到定义编译图或创建图的函数的路径的映射。示例
|
env |
`.env` 文件的路径,或从环境变量到其值的映射。 |
store |
用于向 BaseStore 添加语义搜索和/或存活时间 (TTL) 的配置。包含以下字段
|
node_version |
指定 `node_version: 20` 以使用 LangGraph.js。 |
dockerfile_lines |
在从父镜像导入后添加到 Dockerfile 的额外行数组。 |
checkpointer |
检查点器的配置。包含一个 `ttl` 字段,该字段是一个具有以下键的对象
|
示例¶
基本配置¶
使用 Wolfi 基础镜像¶
您可以使用 `image_distro` 字段指定基础镜像的 Linux 发行版。有效选项是 `debian` 或 `wolfi`。Wolfi 是推荐选项,因为它提供了更小、更安全的镜像。此功能在 `langgraph-cli>=0.2.11` 中可用。
为存储添加语义搜索¶
所有部署都附带一个 DB 支持的 BaseStore。将“index”配置添加到您的 `langgraph.json` 将在您部署的 BaseStore 中启用语义搜索。
`index.fields` 配置决定了您的文档的哪些部分将被嵌入
- 如果省略或设置为 `["$"]`,则整个文档将被嵌入
- 要嵌入特定字段,请使用 JSON 路径表示法:`["metadata.title", "content.text"]`
- 缺少指定字段的文档仍将存储,但这些字段不会有嵌入
- 您仍然可以在 `put` 时使用 `index` 参数覆盖特定项要嵌入的字段
{
"dependencies": ["."],
"graphs": {
"memory_agent": "./agent/graph.py:graph"
},
"store": {
"index": {
"embed": "openai:text-embedding-3-small",
"dims": 1536,
"fields": ["$"]
}
}
}
常见模型维度
openai:text-embedding-3-large
: 3072openai:text-embedding-3-small
: 1536openai:text-embedding-ada-002
: 1536cohere:embed-english-v3.0
: 1024cohere:embed-english-light-v3.0
: 384cohere:embed-multilingual-v3.0
: 1024cohere:embed-multilingual-light-v3.0
: 384
使用自定义嵌入函数进行语义搜索¶
如果您想使用自定义嵌入函数进行语义搜索,可以传入自定义嵌入函数的路径
{
"dependencies": ["."],
"graphs": {
"memory_agent": "./agent/graph.py:graph"
},
"store": {
"index": {
"embed": "./embeddings.py:embed_texts",
"dims": 768,
"fields": ["text", "summary"]
}
}
}
存储配置中的 `embed` 字段可以引用一个自定义函数,该函数接受字符串列表并返回嵌入列表。示例实现
# embeddings.py
def embed_texts(texts: list[str]) -> list[list[float]]:
"""Custom embedding function for semantic search."""
# Implementation using your preferred embedding model
return [[0.1, 0.2, ...] for _ in texts] # dims-dimensional vectors
添加自定义认证¶
{
"dependencies": ["."],
"graphs": {
"chat": "./chat/graph.py:graph"
},
"auth": {
"path": "./auth.py:auth",
"openapi": {
"securitySchemes": {
"apiKeyAuth": {
"type": "apiKey",
"in": "header",
"name": "X-API-Key"
}
},
"security": [{ "apiKeyAuth": [] }]
},
"disable_studio_auth": false
}
}
有关详细信息,请参阅认证概念指南,有关操作过程的实际演练,请参阅设置自定义认证指南。
配置存储项的存活时间 (TTL)¶
您可以使用 `store.ttl` 键配置 BaseStore 中项目/内存的默认数据过期。这决定了项目在最后一次访问后保留多长时间(读取操作可能会根据 `refresh_on_read` 刷新计时器)。请注意,这些默认值可以通过修改 `get`、`search` 等中的相应参数来按每次调用覆盖。
`ttl` 配置是一个包含可选字段的对象
- `refresh_on_read`:如果为 `true`(默认值),通过 `get` 或 `search` 访问项目会重置其过期计时器。设置为 `false` 则仅在写入(`put`)时刷新 TTL。
- `default_ttl`:项目的默认生命周期,以**分钟**为单位。如果未设置,项目默认不会过期。
- `sweep_interval_minutes`:系统应多久(以分钟为单位)运行一次后台进程以删除过期项目。如果未设置,则不会自动进行清理。
以下是一个示例,启用 7 天的 TTL(10080 分钟),读取时刷新,并每小时清理一次
{
"dependencies": ["."],
"graphs": {
"memory_agent": "./agent/graph.py:graph"
},
"store": {
"ttl": {
"refresh_on_read": true,
"sweep_interval_minutes": 60,
"default_ttl": 10080
}
}
}
配置检查点的存活时间 (TTL)¶
您可以使用 `checkpointer` 键配置检查点的存活时间 (TTL)。这决定了检查点数据在根据指定策略(例如,删除)自动处理之前保留多长时间。`ttl` 配置是一个包含以下内容的对象
- `strategy`:对过期检查点采取的操作(目前 `\"delete\"` 是唯一接受的选项)。
- `sweep_interval_minutes`:检查过期检查点的频率(整数)。
- `default_ttl`:检查点的默认生命周期,以**分钟**为单位(整数)。
以下是一个示例,将默认 TTL 设置为 30 天(43200 分钟)
{
"dependencies": ["."],
"graphs": {
"chat": "./chat/graph.py:graph"
},
"checkpointer": {
"ttl": {
"strategy": "delete",
"sweep_interval_minutes": 10,
"default_ttl": 43200
}
}
}
在此示例中,超过 30 天的检查点将被删除,并且每 10 分钟运行一次检查。
基本配置¶
命令¶
用法
`dev`¶
在开发模式下运行 LangGraph API 服务器,支持热重载和调试功能。此轻量级服务器无需 Docker 安装,适用于开发和测试。状态数据将持久化到本地目录。
注意
目前,CLI 仅支持 Python >= 3.11。
安装
此命令需要安装“inmem”额外功能
用法
选项
选项 | 默认值 | 描述 |
---|---|---|
-c, --config FILE |
langgraph.json |
声明依赖、图和环境变量的配置文件路径 |
--host TEXT |
127.0.0.1 |
服务器绑定的主机 |
--port INTEGER |
2024 |
服务器绑定的端口 |
--no-reload |
禁用自动重载 | |
--n-jobs-per-worker INTEGER |
每个工作进程的作业数。默认为 10 | |
--debug-port INTEGER |
调试器监听的端口 | |
--wait-for-client |
否 |
在启动服务器前等待调试器客户端连接到调试端口 |
--no-browser |
服务器启动时跳过自动打开浏览器 | |
--studio-url TEXT |
要连接的 LangGraph Studio 实例的 URL。默认为 https://smith.langchain.com | |
--allow-blocking |
否 |
不对代码中的同步 I/O 阻塞操作引发错误(`0.2.6` 中新增) |
--tunnel |
否 |
通过公共隧道(Cloudflare)暴露本地服务器,以便远程前端访问。这避免了 Safari 等浏览器或网络阻止 localhost 连接的问题 |
--help |
显示命令文档 |
在开发模式下运行 LangGraph API 服务器,支持热重载功能。此轻量级服务器无需 Docker 安装,适用于开发和测试。状态数据将持久化到本地目录。
用法
选项
选项 | 默认值 | 描述 |
---|---|---|
-c, --config FILE |
langgraph.json |
声明依赖、图和环境变量的配置文件路径 |
--host TEXT |
127.0.0.1 |
服务器绑定的主机 |
--port INTEGER |
2024 |
服务器绑定的端口 |
--no-reload |
禁用自动重载 | |
--n-jobs-per-worker INTEGER |
每个工作进程的作业数。默认为 10 | |
--debug-port INTEGER |
调试器监听的端口 | |
--wait-for-client |
否 |
在启动服务器前等待调试器客户端连接到调试端口 |
--no-browser |
服务器启动时跳过自动打开浏览器 | |
--studio-url TEXT |
要连接的 LangGraph Studio 实例的 URL。默认为 https://smith.langchain.com | |
--allow-blocking |
否 |
不对代码中的同步 I/O 阻塞操作引发错误 |
--tunnel |
否 |
通过公共隧道(Cloudflare)暴露本地服务器,以便远程前端访问。这避免了浏览器或网络阻止 localhost 连接的问题 |
--help |
显示命令文档 |
`build`¶
构建 LangGraph 平台 API 服务器 Docker 镜像。
用法
选项
选项 | 默认值 | 描述 |
---|---|---|
--platform TEXT |
构建 Docker 镜像的目标平台。示例:`langgraph build --platform linux/amd64,linux/arm64` | |
-t, --tag TEXT |
**必需**。Docker 镜像的标签。示例:`langgraph build -t my-image` | |
--pull / --no-pull |
--pull |
使用最新的远程 Docker 镜像构建。使用 `--no-pull` 运行 LangGraph 平台 API 服务器,并使用本地构建的镜像。 |
-c, --config FILE |
langgraph.json |
声明依赖、图和环境变量的配置文件路径。 |
--help |
显示命令文档。 |
构建 LangGraph 平台 API 服务器 Docker 镜像。
用法
选项
选项 | 默认值 | 描述 |
---|---|---|
--platform TEXT |
构建 Docker 镜像的目标平台。示例:`langgraph build --platform linux/amd64,linux/arm64` | |
-t, --tag TEXT |
**必需**。Docker 镜像的标签。示例:`langgraph build -t my-image` | |
--no-pull |
使用本地构建的镜像。默认为 `false`,即使用最新的远程 Docker 镜像构建。 | |
-c, --config FILE |
langgraph.json |
声明依赖、图和环境变量的配置文件路径。 |
--help |
显示命令文档。 |
`up`¶
启动 LangGraph API 服务器。用于本地测试时,需要拥有 LangGraph 平台封闭测试版访问权限的 LangSmith API 密钥。生产环境使用需要许可证密钥。
用法
选项
选项 | 默认值 | 描述 |
---|---|---|
--wait |
等待服务启动后再返回。暗示 `--detach` | |
--postgres-uri TEXT |
本地数据库 | 用于数据库的 Postgres URI。 |
--watch |
文件更改时重启 | |
--debugger-base-url TEXT |
http://127.0.0.1:[PORT] |
调试器用于访问 LangGraph API 的 URL。 |
--debugger-port INTEGER |
在本地拉取调试器镜像并在指定端口提供 UI 服务 | |
--verbose |
显示更多服务器日志输出。 | |
-c, --config FILE |
langgraph.json |
声明依赖、图和环境变量的配置文件路径。 |
-d, --docker-compose FILE |
包含要启动的额外服务的 docker-compose.yml 文件路径。 | |
-p, --port INTEGER |
8123 |
要暴露的端口。示例:`langgraph up --port 8000` |
--pull / --no-pull |
pull |
拉取最新镜像。使用 `--no-pull` 运行服务器,并使用本地构建的镜像。示例:`langgraph up --no-pull` |
--recreate / --no-recreate |
no-recreate |
重新创建容器,即使其配置和镜像未更改 |
--help |
显示命令文档。 |
启动 LangGraph API 服务器。用于本地测试时,需要拥有 LangGraph 平台封闭测试版访问权限的 LangSmith API 密钥。生产环境使用需要许可证密钥。
用法
选项
选项 | 默认值 | 描述 |
---|---|---|
--wait |
等待服务启动后再返回。暗示 `--detach` | |
--postgres-uri TEXT |
本地数据库 | 用于数据库的 Postgres URI。 |
--watch |
文件更改时重启 | |
-c, --config FILE |
langgraph.json |
声明依赖、图和环境变量的配置文件路径。 |
-d, --docker-compose FILE |
包含要启动的额外服务的 docker-compose.yml 文件路径。 | |
-p, --port INTEGER |
8123 |
要暴露的端口。示例:`langgraph up --port 8000` |
--no-pull |
使用本地构建的镜像。默认为 `false`,即使用最新的远程 Docker 镜像构建。 | |
--recreate |
重新创建容器,即使其配置和镜像未更改 | |
--help |
显示命令文档。 |
`dockerfile`¶
生成用于构建 LangGraph 平台 API 服务器 Docker 镜像的 Dockerfile。
用法
选项
选项 | 默认值 | 描述 |
---|---|---|
-c, --config FILE |
langgraph.json |
声明依赖、图和环境变量的配置文件路径。 |
--help |
显示此消息并退出。 |
示例
这将生成一个类似于以下内容的 Dockerfile
FROM langchain/langgraph-api:3.11
ADD ./pipconf.txt /pipconfig.txt
RUN PIP_CONFIG_FILE=/pipconfig.txt PYTHONDONTWRITEBYTECODE=1 pip install --no-cache-dir -c /api/constraints.txt langchain_community langchain_anthropic langchain_openai wikipedia scikit-learn
ADD ./graphs /deps/__outer_graphs/src
RUN set -ex && \
for line in '[project]' \
'name = "graphs"' \
'version = "0.1"' \
'[tool.setuptools.package-data]' \
'"*" = ["**/*"]'; do \
echo "$line" >> /deps/__outer_graphs/pyproject.toml; \
done
RUN PIP_CONFIG_FILE=/pipconfig.txt PYTHONDONTWRITEBYTECODE=1 pip install --no-cache-dir -c /api/constraints.txt -e /deps/*
ENV LANGSERVE_GRAPHS='{"agent": "/deps/__outer_graphs/src/agent.py:graph", "storm": "/deps/__outer_graphs/src/storm.py:graph"}'
更新您的 langgraph.json 文件
`langgraph dockerfile` 命令将您 `langgraph.json` 文件中的所有配置转换为 Dockerfile 命令。使用此命令时,每当您更新 `langgraph.json` 文件时,都必须重新运行它。否则,当您构建或运行 dockerfile 时,您的更改将不会反映出来。
生成用于构建 LangGraph 平台 API 服务器 Docker 镜像的 Dockerfile。
用法
选项
选项 | 默认值 | 描述 |
---|---|---|
-c, --config FILE |
langgraph.json |
声明依赖、图和环境变量的配置文件路径。 |
--help |
显示此消息并退出。 |
示例
这将生成一个类似于以下内容的 Dockerfile
FROM langchain/langgraphjs-api:20
ADD . /deps/agent
RUN cd /deps/agent && yarn install
ENV LANGSERVE_GRAPHS='{"agent":"./src/react_agent/graph.ts:graph"}'
WORKDIR /deps/agent
RUN (test ! -f /api/langgraph_api/js/build.mts && echo "Prebuild script not found, skipping") || tsx /api/langgraph_api/js/build.mts
更新您的 langgraph.json 文件
`npx @langchain/langgraph-cli dockerfile` 命令将您 `langgraph.json` 文件中的所有配置转换为 Dockerfile 命令。使用此命令时,每当您更新 `langgraph.json` 文件时,都必须重新运行它。否则,当您构建或运行 dockerfile 时,您的更改将不会反映出来。