LangGraph CLI¶
LangGraph 命令行界面 (CLI) 包含用于在本地 Docker 中构建和运行 LangGraph Platform API 服务器的命令。在开发和测试期间,您可以使用 CLI 部署本地 API 服务器。
安装¶
- 确保已安装 Docker(例如:
docker --version
)。 -
安装 CLI 包:
-
运行命令
langgraph --help
或npx @langchain/langgraph-cli --help
以确认 CLI 正常工作。
配置文件¶
LangGraph CLI 需要一个遵循此 架构 的 JSON 配置文件。它包含以下属性:
注意
LangGraph CLI 默认使用当前目录下的配置文件 langgraph.json。
键 | 描述 |
---|---|
dependencies |
必需。LangGraph Platform 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 配置文件路径。 |
pip_installer |
(v0.3 添加) 可选。Python 包安装程序选择器。可以设置为 "auto" 、"pip" 或 "uv" 。从 0.3 版本开始,默认策略是运行 uv pip ,它通常提供更快的构建,同时仍保持为即插即用。在极少数情况下 uv 无法处理您的依赖关系图或 pyproject.toml 的结构时,请在此处指定 "pip" 以恢复到之前的行为。 |
keep_pkg_tools |
(v0.3.4 添加) 可选。控制是否在最终映像中保留 Python 打包工具(pip 、setuptools 、wheel )。可接受的值:
|
dockerfile_lines |
要添加到 Dockerfile 的额外行数组,在导入父映像后添加。 |
checkpointer |
Checkpointer 的配置。包含一个 ttl 字段,该字段是一个包含以下键的对象:
|
http |
HTTP 服务器配置,包含以下字段:
|
键 | 描述 |
---|---|
graphs |
必需。从图 ID 到编译后的图或定义图的函数的路径的映射。示例:
|
env |
.env 文件的路径或从环境变量到其值的映射。 |
store |
用于向 BaseStore 添加语义搜索和/或生存时间 (TTL) 的配置。包含以下字段:
|
node_version |
指定 node_version: 20 以使用 LangGraph.js。 |
dockerfile_lines |
要添加到 Dockerfile 的额外行数组,在导入父映像后添加。 |
checkpointer |
Checkpointer 的配置。包含一个 ttl 字段,该字段是一个包含以下键的对象:
|
示例¶
基本配置¶
使用 Wolfi 基础映像¶
您可以使用 image_distro
字段指定基础映像的 Linux 发行版。有效选项为 debian
或 wolfi
。Wolfi 是推荐选项,因为它提供了更小、更安全映像。此功能在 langgraph-cli>=0.2.11
中可用。
向存储添加语义搜索¶
所有部署都附带一个数据库支持的 BaseStore。在 langgraph.json
中添加 "index" 配置将启用部署的 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"]
}
}
}
store
配置中的 embed
字段可以引用一个自定义函数,该函数接受字符串列表并返回嵌入列表。示例实现:
# embeddings.py
def embed_texts(texts: list[str]) -> list[list[float]]:
"""用于语义搜索的自定义嵌入函数。"""
# 使用您偏好的嵌入模型进行实现
return [[0.1, 0.2, ...] for _ in texts] # dims 维向量
添加自定义身份验证¶
{
"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
:检查点的默认生存时间(分钟)。
以下示例设置了 30 天(43200 分钟)的默认 TTL:
{
"dependencies": ["."],
"graphs": {
"chat": "./chat/graph.py:graph"
},
"checkpointer": {
"ttl": {
"strategy": "delete",
"sweep_interval_minutes": 10,
"default_ttl": 43200
}
}
}
在此示例中,将删除比 30 天更旧的检查点,并且检查每 10 分钟运行一次。
基本配置¶
命令¶
用法
dev
¶
以开发模式运行 LangGraph API 服务器,支持热重载和调试功能。此轻量级服务器不需要安装 Docker,适用于开发和测试。状态会持久化到本地目录。
Note
目前,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 |
每个 worker 的作业数。默认为 10 | |
--debug-port INTEGER |
调试器监听的端口 | |
--wait-for-client |
False |
在服务器启动前等待调试器客户端连接到调试端口 |
--no-browser |
跳过在服务器启动时自动打开浏览器 | |
--studio-url TEXT |
要连接的 LangGraph Studio 实例的 URL。默认为 https://smith.langchain.com | |
--allow-blocking |
False |
不为代码中的同步 I/O 阻塞操作引发错误(在 0.2.6 中添加) |
--tunnel |
False |
通过公共隧道 (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 |
每个 worker 的作业数。默认为 10 | |
--debug-port INTEGER |
调试器监听的端口 | |
--wait-for-client |
False |
在服务器启动前等待调试器客户端连接到调试端口 |
--no-browser |
跳过在服务器启动时自动打开浏览器 | |
--studio-url TEXT |
要连接的 LangGraph Studio 实例的 URL。默认为 https://smith.langchain.com | |
--allow-blocking |
False |
不为代码中的同步 I/O 阻塞操作引发错误 |
--tunnel |
False |
通过公共隧道 (Cloudflare) 公开本地服务器,以便进行远程前端访问。这可以避免浏览器或网络阻止 localhost 连接的问题。 |
--help |
显示命令文档 |
build
¶
构建 LangGraph Platform 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 Platform API 服务器。 |
-c, --config FILE |
langgraph.json |
声明依赖项、图和环境变量的配置文件路径。 |
--help |
显示命令文档。 |
构建 LangGraph Platform 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
¶
| --base-image TEXT
| langchain/langgraph-api
| 用于 LangGraph API 服务器的基础映像。使用版本标签固定到特定版本。 |
| --image TEXT
| | 用于 langgraph-api 服务的 Docker 映像。如果指定,则跳过构建并直接使用此映像。 |
| --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
| | 显示命令文档。 |
| --base-image TEXT
| langchain/langgraph-api
| 用于 LangGraph API 服务器的基础映像。使用版本标签固定到特定版本。 |
| --image TEXT
| | 用于 langgraph-api 服务的 Docker 映像。如果指定,则跳过构建并直接使用此映像。 |
| --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 Platform 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 Platform 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 时,您的更改将不会反映出来。