Skip to content

18. LangSmith 部署:给你的 AI Agent 找个"托管保姆" ​

简单来说 ​

LangSmith Cloud 是专为 AI Agent 设计的托管部署平台。你只需要把代码推到 GitHub,剩下的服务器配置、自动扩容、状态管理这些脏活累活,全都由 LangSmith 帮你搞定。从"推代码"到"上线服务",只需要 15 分钟。


🎯 本节目标 ​

学完本节,你将能够回答:

  1. 为什么传统服务器不适合部署 AI Agent?
  2. LangSmith Cloud 解决了哪些部署痛点?
  3. 如何将 GitHub 代码一键部署到 LangSmith?
  4. 如何获取 API URL 并调用已部署的 Agent?
  5. Thread 和 Threadless Run 有什么区别?

核心痛点与解决方案 ​

痛点:传统部署方式的三大"噩梦" ​

传统的 Web 服务器是为无状态、短请求设计的,但 AI Agent 需要:

😵 痛点具体表现
服务器选型头疼AWS? GCP? Azure? 光选服务器就够喝一壶
状态管理噩梦传统服务无状态,对话上下文分分钟丢失
长任务超时Agent 可能要跑几分钟,但服务器 30 秒就给你断了
扩容难题用户暴增时手动加机器?等你加完,用户早跑了

解决:LangSmith Cloud 的"全家桶服务" ​

传统部署:代码 → 配置服务器 → 配置数据库 → 配置负载均衡 → 手动运维 → 累死

LangSmith:代码 → 推送 GitHub → 点击部署 → 完事儿

LangSmith Cloud 是专门为"有状态、长运行"的 AI Agent 设计的:

  • ✅ 有状态(Stateful) —— 自动管理对话上下文,用户说"我叫小明",过一会儿还能记得
  • ✅ 长运行(Long-running) —— 分析 100 页 PDF 要跑 5 分钟?不会中途断掉
  • ✅ 自动扩容 —— 流量暴增时自动加机器,无需手动干预

传统部署 vs LangSmith Cloud 痛点与解决方案对比


生活化类比 ​

开餐厅 vs. 入驻美团外卖 🍔 ​

想象你是个厨师,想开餐厅卖饭:

传统方式(自己开餐厅)LangSmith 方式(入驻美团)
找店面 → 选服务器把菜谱(代码)上传 GitHub
装修 → 配置环境点击 "New Deployment"
招服务员 → 配置负载均衡等 15 分钟,自动完成
生意好扩店 → 手动扩容美团自动调配(自动扩容)
累死专注做好菜就行

关键对应关系:

餐厅概念LangSmith 对应
你的菜谱GitHub 仓库(Agent 代码)
美团外卖平台LangSmith Cloud
上架到美团Deploy 部署
外卖店铺链接API URL
美团商家后台Studio(测试调试界面)

开餐厅 vs 入驻美团外卖类比


部署流程详解 ​

前置条件 ​

准备项说明
GitHub 账号代码托管平台
LangSmith 账号免费注册 smith.langchain.com
符合规范的项目包含 langgraph.json 配置文件

步骤 1:准备项目结构 ​

确保你的项目包含以下文件:

plaintext
my-agent/
├── src/
│   └── agent.ts           # Agent 代码
├── package.json           # 依赖清单
├── .env                   # 环境变量(不要提交到 Git!)
└── langgraph.json         # LangGraph 配置文件

langgraph.json 示例:

json
{
  "dependencies": ["."],
  "graphs": {
    "agent": "./src/agent.js:agentGraph"
  },
  "env": ".env"
}

步骤 2:推送代码到 GitHub ​

bash
git init
git add .
git commit -m "Initial commit"
git remote add origin https://github.com/your-username/my-agent.git
git push -u origin main

⚠️ 重要提醒: 确保 .env 文件在 .gitignore 中,不要把 API Key 提交到 GitHub!

步骤 3:在 LangSmith 创建部署 ​

  1. 登录 LangSmith
  2. 在左侧边栏点击 Deployments
  3. 点击 + New Deployment 按钮
  4. 连接你的 GitHub 账号(首次需要授权)
  5. 选择你的仓库
  6. 点击 Submit 开始部署

步骤 4:等待部署完成 ​

部署过程大约需要 15 分钟。你可以在 Deployment details 页面查看进度:

部署状态:
├── 🔄 拉取代码...
├── 🔄 安装依赖...
├── 🔄 构建应用...
├── 🔄 启动服务...
└── ✅ 部署完成!

步骤 5:获取 API URL ​

部署完成后:

  1. 点击刚创建的 deployment
  2. 在 Deployment details 页面找到 API URL
  3. 点击复制到剪贴板
API URL: https://your-deployment.langsmith.com

步骤 6:在 Studio 测试 ​

点击右上角的 Studio 按钮,打开可视化测试界面:

  • 发送测试消息
  • 查看执行 Trace
  • 调试问题

LangSmith Cloud 部署六步流程


调用已部署的 Agent ​

方式 1:使用 LangGraph SDK(推荐) ​

安装 SDK:

bash
npm install @langchain/langgraph-sdk

调用示例:

typescript
import { Client } from "@langchain/langgraph-sdk";

const client = new Client({ 
  apiUrl: "https://your-deployment.langsmith.com",
  apiKey: "your-langsmith-api-key"
});

const streamResponse = client.runs.stream(
  null,
  "agent",
  {
    input: {
      messages: [
        { role: "user", content: "What is LangGraph?" }
      ]
    },
    streamMode: "messages",
  }
);

for await (const chunk of streamResponse) {
  console.log(`Event: ${chunk.event}`);
  console.log(JSON.stringify(chunk.data));
}

💡 人话解读:

代码片段意思
new Client({...})创建一个"遥控器",连接到你的 Agent 服务
client.runs.stream(null, "agent", {...})null 表示一次性对话,"agent" 是在 langgraph.json 中定义的图名
streamMode: "messages"流式输出,AI 一个字一个字回复
for await (const chunk of streamResponse)实时接收 AI 输出的每一个片段

方式 2:使用 REST API ​

bash
curl -s --request POST \
    --url https://your-deployment.langsmith.com/runs/stream \
    --header 'Content-Type: application/json' \
    --header 'X-Api-Key: your-langsmith-api-key' \
    --data '{
        "assistant_id": "agent",
        "input": {
            "messages": [
                {"role": "human", "content": "What is LangGraph?"}
            ]
        },
        "stream_mode": "updates"
    }'

两种调用方式对比:LangGraph SDK vs REST API


Thread vs Threadless Run ​

Threadless Run(无线程运行) ​

typescript
const response = client.runs.stream(
  null,  // ← null 表示 Threadless
  "agent",
  { input: { messages: [...] } }
);

特点:

  • 一次性对话,说完就散
  • 不保留对话历史
  • 适合独立的单轮问答

Thread Run(线程运行) ​

typescript
const thread = await client.threads.create();

const response = client.runs.stream(
  thread.thread_id,  // ← 指定 Thread ID
  "agent",
  { input: { messages: [...] } }
);

特点:

  • 对话有上下文
  • 历史消息自动保存
  • 适合多轮对话场景

对比表格:

特性Threadless RunThread Run
上下文记忆❌ 无✅ 有
历史保存❌ 不保存✅ 自动保存
适用场景单轮问答多轮对话
参数值nullthread.thread_id

Thread vs Threadless Run 对话模式对比


业务场景:电商智能客服部署 ​

场景需求 ​

  • 用户可以查询订单状态
  • 需要记住用户之前提供的订单号
  • 有时候查询数据库需要几秒钟

不用 LangSmith Cloud 的痛苦 ​

Day 1: 在 AWS EC2 上部署,配置安全组、负载均衡...
Day 2: 发现对话记录丢失,开始研究 Redis 存会话
Day 3: 双十一流量暴增,服务器崩了,手动加机器
Day 4: 发现 Bug,需要重新部署,又是一顿配置
Day 5: 老板问为什么还没上线...

用 LangSmith Cloud 的体验 ​

Step 1: 把客服 Agent 代码推到 GitHub        (10 分钟)
Step 2: 在 LangSmith 点击 "New Deployment"  (2 分钟)
Step 3: 等待自动部署完成                     (15 分钟)
Step 4: 把 API URL 给前端同学集成            (5 分钟)
Step 5: 上线完成,去喝咖啡 ☕

效率对比 ​

维度传统方式LangSmith Cloud
部署时间1-3 天15 分钟
状态管理自己搞 Redis自动处理
自动扩容需要配置内置支持
长任务支持可能超时原生支持
监控调试自己接入监控Studio 内置

电商客服部署效率对比


完整部署示例 ​

项目代码 (src/agent.ts) ​

typescript
import { StateGraph, START, END, Annotation } from "@langchain/langgraph";
import { ChatOpenAI } from "@langchain/openai";
import { BaseMessage } from "@langchain/core/messages";

const AgentState = Annotation.Root({
  messages: Annotation<BaseMessage[]>({
    reducer: (curr, update) => [...curr, ...update],
    default: () => [],
  }),
});

const llm = new ChatOpenAI({ model: "gpt-4o-mini" });

async function chatNode(state: typeof AgentState.State) {
  const response = await llm.invoke([
    { role: "system", content: "你是一个友好的 AI 助手。" },
    ...state.messages,
  ]);
  
  return { messages: [response] };
}

const graph = new StateGraph(AgentState)
  .addNode("chat", chatNode)
  .addEdge(START, "chat")
  .addEdge("chat", END);

export const agentGraph = graph.compile();

langgraph.json ​

json
{
  "dependencies": ["."],
  "graphs": {
    "agent": "./dist/agent.js:agentGraph"
  },
  "env": ".env"
}

package.json ​

json
{
  "name": "my-agent",
  "version": "1.0.0",
  "type": "module",
  "scripts": {
    "build": "tsc",
    "start": "node dist/agent.js"
  },
  "dependencies": {
    "@langchain/langgraph": "^0.2.0",
    "@langchain/openai": "^0.3.0",
    "@langchain/core": "^0.3.0"
  },
  "devDependencies": {
    "typescript": "^5.0.0"
  }
}

.gitignore ​

node_modules/
dist/
.env
.env.local

部署后调用 ​

typescript
import { Client } from "@langchain/langgraph-sdk";

const client = new Client({ 
  apiUrl: "https://your-deployment.langsmith.com",
  apiKey: process.env.LANGSMITH_API_KEY!
});

async function chat(message: string) {
  const thread = await client.threads.create();
  
  const response = client.runs.stream(
    thread.thread_id,
    "agent",
    {
      input: {
        messages: [{ role: "user", content: message }]
      },
      streamMode: "messages",
    }
  );
  
  let fullResponse = "";
  for await (const chunk of response) {
    if (chunk.event === "messages/partial") {
      const content = chunk.data?.[0]?.content;
      if (content) {
        process.stdout.write(content);
        fullResponse += content;
      }
    }
  }
  
  return fullResponse;
}

chat("你好,介绍一下你自己");

部署选项对比 ​

LangSmith 提供多种部署方式,适合不同需求:

部署方式适用场景复杂度数据控制
Cloud(本文)想省事、快速上线⭐ 低LangSmith 托管
Control Plane数据安全要求高⭐⭐ 中混合部署
Standalone完全自主控制⭐⭐⭐ 高完全自托管

三种部署方式选型指南


避坑指南 ​

❌ 坑 1:忘记配置环境变量 ​

部署后 Agent 无法工作,通常是因为环境变量没配置。

解决方案: 在 LangSmith 的 Deployment 设置中添加环境变量:

  • OPENAI_API_KEY
  • LANGSMITH_API_KEY

❌ 坑 2:引用 .ts 文件而非 .js ​

json
// ❌ 错误
{
  "graphs": {
    "agent": "./src/agent.ts:agentGraph"
  }
}

// ✅ 正确
{
  "graphs": {
    "agent": "./dist/agent.js:agentGraph"
  }
}

❌ 坑 3:没有导出 Graph ​

typescript
// ❌ 错误:没有导出
const agentGraph = graph.compile();

// ✅ 正确:必须导出
export const agentGraph = graph.compile();

❌ 坑 4:把 API Key 提交到 GitHub ​

解决方案:

  1. 在 .gitignore 中添加 .env
  2. 使用 LangSmith 的环境变量管理功能

部署常见坑点避坑指南


总结对比表 ​

概念说明类比
LangSmith Cloud全托管部署平台美团外卖平台
API URL部署后的访问地址外卖店铺链接
Thread有上下文的对话会话聊天房间
Threadless Run一次性无记忆对话路人问路
Studio可视化测试界面商家后台

核心要点回顾 ​

  1. 专为 AI Agent 设计 —— 解决有状态、长运行的部署难题
  2. GitHub 集成 —— 推代码即部署,无需配置服务器
  3. 15 分钟上线 —— 从代码到可用 API,极速部署
  4. Thread 管理 —— 自动处理对话上下文,无需自己存储
  5. 免运维 —— 自动扩容、监控、日志,全部内置

下一步学习 ​

  • 可观测性:学习如何监控和分析生产环境的 Agent
  • 项目实战:构建完整的多轮对话助手
  • 性能优化:提升 Agent 响应速度和降低成本

读文档、看源码、写代码,理解 AI Agent 本质 🤖