Skip to main content
An application must be configured with a configuration file in order to be deployed to LangSmith (or to be self-hosted). This how-to guide discusses the basic steps to set up an application for deployment using pyproject.toml to define your package’s dependencies. This example is based on this repository, which uses the LangGraph framework. The final repository structure will look something like this:
my-app/
├── my_agent # all project code lies within here
   ├── utils # utilities for your graph
   ├── __init__.py
   ├── tools.py # tools for your graph
   ├── nodes.py # node functions for your graph
   └── state.py # state definition of your graph
   ├── __init__.py
   └── agent.py # code for constructing your graph
├── .env # environment variables
├── langgraph.json  # configuration file for LangGraph
└── pyproject.toml # dependencies for your project
LangSmith Deployment 支持部署一个 LangGraph 。然而,图的一个 节点 的实现可以包含任意代码。这意味着任何框架都可以在节点内实现,并在 LangSmith Deployment 上部署。这让你可以在不使用额外的 LangGraph OSS API 的情况下实现核心应用逻辑,同时仍然使用 LangSmith 进行部署、扩展和可观测性。更多详情,请参阅在 LangSmith Deployment 中使用任何框架
You can also set up with:
  • requirements.txt: for dependency management, check out this how-to guide on using requirements.txt for LangSmith.
  • a monorepo: To deploy a graph located inside a monorepo, take a look at this repository for an example of how to do so.
After each step, an example file directory is provided to demonstrate how code can be organized.

Specify dependencies

Dependencies can optionally be specified in one of the following files: pyproject.toml, setup.py, or requirements.txt. If none of these files is created, then dependencies can be specified later in the configuration file. The dependencies below will be included in the image, you can also use them in your code, as long as with a compatible version range:
langgraph>=0.4.10,<2
langgraph-sdk>=0.3.5
langgraph-checkpoint>=3.0.1,<5
langchain-core>=0.3.66
langsmith>=0.6.3
orjson>=3.9.7
httpx>=0.25.0
tenacity>=8.0.0
uvicorn>=0.26.0
sse-starlette>=2.1.3,<3.4.0
uvloop>=0.18.0
httptools>=0.5.0
jsonschema-rs>=0.20.0
structlog>=24.1.0
cloudpickle>=3.0.0
truststore>=0.1
protobuf>=6.32.1,<7.0.0
grpcio>=1.78.0,<1.79.0
grpcio-tools>=1.78.0,<1.79.0
grpcio-health-checking>=1.78.0,<1.79.0
opentelemetry-api>=0.0.1
opentelemetry-sdk>=0.0.1
opentelemetry-exporter-otlp-proto-http>=0.0.1
Example pyproject.toml file:
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "my-agent"
version = "0.0.1"
description = "An excellent agent build for LangSmith."
authors = [
    {name = "Polly the parrot", email = "1223+polly@users.noreply.github.com"}
]
license = {text = "MIT"}
readme = "README.md"
requires-python = ">=3.9"
dependencies = [
    "langgraph>=0.6.0",
    "langchain-fireworks>=0.1.3"
]

[tool.hatch.build.targets.wheel]
packages = ["my_agent"]
Example file directory:
my-app/
└── pyproject.toml   # Python packages required for your graph

Specify environment variables

Environment variables can optionally be specified in a file (e.g. .env). See the Environment Variables reference to configure additional variables for a deployment. Example .env file:
MY_ENV_VAR_1=foo
MY_ENV_VAR_2=bar
FIREWORKS_API_KEY=key
Example file directory:
my-app/
├── .env # file with environment variables
└── pyproject.toml
默认情况下,LangSmith 遵循 uv/pip 的行为,安装预发布版本,除非明确允许。如果要使用预发布版本,您有以下选项:
  • 使用 pyproject.toml:在 [tool.uv] 部分添加 allow-prereleases = true
  • 使用 requirements.txtsetup.py:您必须显式指定每个预发布依赖项,包括传递依赖项。例如,如果您声明 a==0.0.1a1a 依赖于 b==0.0.1a1,那么您还必须在依赖项中显式包含 b==0.0.1a1

Define graphs

Implement your graphs. Graphs can be defined in a single file or multiple files. Make note of the variable names of each CompiledStateGraph to be included in the application. The variable names will be used later when creating the configuration file. Example agent.py file, which shows how to import from other modules you define (code for the modules is not shown here, please see this repository to see their implementation):
# my_agent/agent.py
from typing import Literal
from typing_extensions import TypedDict

from langgraph.graph import StateGraph, END, START
from my_agent.utils.nodes import call_model, should_continue, tool_node # import nodes
from my_agent.utils.state import AgentState # import state

# Define the runtime context
class GraphContext(TypedDict):
    model_name: Literal["anthropic", "openai"]

workflow = StateGraph(AgentState, context_schema=GraphContext)
workflow.add_node("agent", call_model)
workflow.add_node("action", tool_node)
workflow.add_edge(START, "agent")
workflow.add_conditional_edges(
    "agent",
    should_continue,
    {
        "continue": "action",
        "end": END,
    },
)
workflow.add_edge("action", "agent")

graph = workflow.compile()
Example file directory:
my-app/
├── my_agent # all project code lies within here
   ├── utils # utilities for your graph
   ├── __init__.py
   ├── tools.py # tools for your graph
   ├── nodes.py # node functions for your graph
   └── state.py # state definition of your graph
   ├── __init__.py
   └── agent.py # code for constructing your graph
├── .env
└── pyproject.toml

Create the configuration file

Create a configuration file called langgraph.json. See the configuration file reference for detailed explanations of each key in the JSON object of the configuration file. Example langgraph.json file:
{
  "dependencies": ["."],
  "graphs": {
    "agent": "./my_agent/agent.py:graph"
  },
  "env": ".env"
}
Note that the variable name of the CompiledGraph appears at the end of the value of each subkey in the top-level graphs key (i.e. :<variable_name>).
Configuration file location The configuration file must be placed in a directory that is at the same level or higher than the Python files that contain compiled graphs and associated dependencies.
Example file directory:
my-app/
├── my_agent # all project code lies within here
   ├── utils # utilities for your graph
   ├── __init__.py
   ├── tools.py # tools for your graph
   ├── nodes.py # node functions for your graph
   └── state.py # state definition of your graph
   ├── __init__.py
   └── agent.py # code for constructing your graph
├── .env # environment variables
├── langgraph.json  # configuration file for LangGraph
└── pyproject.toml # dependencies for your project

Next

After you setup your project and place it in a GitHub repository, it’s time to deploy your app.