本文参考 LangChain 官方示例,实现大模型调用、一个天气工具调用、LangSmith 的简单使用,算是我的学习笔记
AI Agent(智能体)是能够自主理解任务、规划步骤、调用工具,并在不需要人类逐步指令的情况下完成复杂任务的 AI 系统。
总结:AI Agent = "能自己想、能自己查、能自己做"的智能程序(不是简单聊天,而是能执行任务)。
LangChain 和 AI SDK
LangChain
LangChain 是一个 用于构建基于大模型(LLM)的应用的开发框架,帮助你把模型、数据源、工具、工作流串起来,更容易做出真实可用的 AI 应用。
简单理解为:LangChain = 一套 LLM 应用的"胶水 + 工具库 + 工作流框架"。
LangChain 和 langgraph: LangChain 代理建立在 LangGraph 之上
官方说:想要快速构建代理和自主应用程序,我们推荐使用 LangChain。当你有更高级的需求,需要结合确定性流程和代理式流程、大量定制以及严格控制延迟时,使用我们的低级代理编排框架和运行时 LangGraph。
然后还有一个 LangSmith 主要用来支持 LLM(大语言模型)应用 的开发、调试、测试和监控
AI SDK
AI SDK 是由 Vercel 推出的一个用于构建 AI 驱动应用的 JavaScript/TypeScript 工具包。
它的核心目标是:让前端/全栈工程师用最简单的方式构建"流式 AI 应用"(Chat、生成、工具调用等)。
简单理解为:AI SDK = 前端友好的模型调用工具 + 流式聊天 UI 状态管理 + Edge 友好 API 封装。
如果你只是简单做对话应用 AI SDK 是一个不错的选择
它提供了 nextjs 与 AI SDK 集成的示例、构建 AI 应用的组件库、ai-gateway 每月 5 美元的大模型 api 额度

总结
LangChain = AI 后端逻辑框架(RAG / Agent / 工作流)
Vercel AI SDK = 前端/全栈的流式对话 UI 工具(Chat UI)
AI SDK 它不和 LangChain 竞争,而是功能互补。
创建一个简单的 Agent 项目
手动创建项目
参考 LangChain 应用结构 来创建

我这里使用了 nestjs 作为后端项目 猛击访问仓库

langgraph-cli 创建项目
执行 npx @langchain/langgraph-cli new 创建项目,使用这种方式创建的项目文件较多,且使用 LangGraph 这里仅做介绍,了解可以通过 cli 创建项目即可!

| Agent 类型 | 主要用途 | 是否支持工具调用 | 是否有推理链 (Reasoning) | 是否有记忆 | 是否支持 RAG | 典型使用场景 |
|---|---|---|---|---|---|---|
| New LangGraph Project(基础模板) | 最基础的 LangGraph 项目,方便自定义 | ❌ 默认不带 | ❌ | ✔(基础记忆) | ❌ | 自定义 Agent、自己扩展工具和流程 |
| ReAct Agent | 需要工具调用 + 多步推理的智能 Agent | ✔ | ✔(Thought → Action → Observation) | 可选 | ❌ | 智能助手、自动化任务、多步骤处理、工具链 |
| Memory Agent | 有上下文记忆的简单聊天机器人 | ❌ | ❌ | ✔(更完整) | ❌ | 普通聊天应用、助理型对话系统 |
| Retrieval Agent(RAG) | 知识库问答、文档搜索 | ❌ | ❌ | 可选 | ✔(向量检索) | FAQ、产品知识库、文档问答 |
| Data-enrichment Agent | 数据清洗、AI 批处理、数据增强 | ❌ | ❌ | ❌ | ❌ | 数据标签化、内容补全、批处理任务 |
选择 New LangGraph Project 后生成的文件如下

里边文件都有注释,可以创建来看看
大模型 api
这里使用 openrouter 它提供了免费可调用大模型

点击进入创建 api key 页面(需已登录)
- 每分钟请求上限:20 次
- 每日请求总量:未充值(余额 < 10 美元) :50 次 / 天 ,充值 ≥ 10 美元 :1000 次 / 天
或者是
- ai-gateway 每月 5 美元的大模型 api 额度,有限速
- 心流开放平台 提供的 api 调用,并发 1 、api key 有效期短
获取到 key 后在 .env 文件中增加
env
OPENAI_API_KEY=xxx你的 api key
第一个 Agent
需要安装 pnpm i langchain @langchain/openai @langchain/langgraph @langchain/core 依赖
其中上边创建的 nodes.ts 、state.ts 暂时没有用到,直接忽略
src/ai/agent/utils/tools.ts 定义了一个天气工具并导出(这只是示例,真实项目需要接入对应的天气 api 来获取地图的天气情况)
ts
import { tool } from 'langchain';
import * as z from 'zod';
// 定义一个天气工具
// 输入一个地区,总是返回该地区阳光明媚
export const getWeather = tool(
(input) => `It's always sunny in ${input.city}!`,
{
name: 'get_weather',
description: 'Get the weather for a given city',
schema: z.object({
city: z.string().describe('The city to get the weather for'),
}),
},
);
src/ai/agent/index.ts 创建了一个基本的 agent 代理、定义了系统提示词、传入了一个 天气工具
ts
import { ChatOpenAI } from '@langchain/openai';
import { createAgent, createMiddleware, ToolMessage } from 'langchain';
import { getWeather } from './utils/tools';
// 自定义中间件:处理工具调用错误
const handleToolErrors = createMiddleware({
name: 'HandleToolErrors',
// wrapToolCall 在工具被调用时包裹处理逻辑
wrapToolCall: (request, handler) => {
try {
// 正常调用工具
return handler(request);
} catch (error) {
// 如果工具调用出错,返回自定义错误消息给模型
return new ToolMessage({
content: `工具错误:请检查您的输入并重试。 (${error})`,
tool_call_id: request.toolCall.id!,
});
}
},
});
// 创建 AI 模型实例
const model = new ChatOpenAI({
// 使用的模型
model: 'z-ai/glm-4.5-air:free',
// 从环境变量读取 API Key
apiKey: process.env.OPENAI_API_KEY,
configuration: {
// 自定义 OpenAI 代理接口
baseURL: 'https://openrouter.ai/api/v1',
defaultHeaders: {
// 可选,用于在 openrouter.ai 上进行排名的网站 URL。
'HTTP-Referer': 'https://blog.vaebe.cn/',
// 可选,用于在 openrouter.ai 上排名的网站标题。
'X-Title': 'n3a',
},
},
});
// 系统提示:告诉 AI 它的角色和可用工具
const systemPrompt = `
# 你是一个通用代理
# 你拥有的工具
getWeather: 获取天气情况
`;
// 创建 Agent
export const agent = createAgent({
model,
tools: [getWeather],
middleware: [handleToolErrors],
systemPrompt,
});
到这里就可以尝试调用 agent 了 src/ai/ai.service.ts
ts
import { Injectable } from '@nestjs/common';
import { agent } from './agent';
@Injectable()
export class AiService {
async chat(id: string) {
const messages = [{ role: 'user', content: '东京天气怎么样?' }];
console.log(id);
return await agent.stream({ messages }, { streamMode: 'updates' });
}
}

LangSmith 集成
LangSmith 是由 LangChain 团队推出的一个平台,主要用来支持 生产级 LLM(大语言模型)应用 的开发、调试、测试和监控。参考官方文档注册获取 key
注册 -> 侧边菜单找到 Settings 点击进入 -> 创建 api key


LangSmith 环境变量
将以下环境变量写入 .env 文件
ts
LANGSMITH_TRACING=true
LANGSMITH_ENDPOINT=https://api.smith.langchain.com
LANGSMITH_API_KEY=你的 api key
LANGSMITH_PROJECT=n3a-修改成你的项目名字
| 环境变量 | 含义 |
|---|---|
LANGSMITH_TRACING |
设置为 true 后,会把运行信息发送到 LangSmith。 |
LANGSMITH_ENDPOINT |
LangSmith API 服务器地址。如果你使用官方云服务,可以不设置(默认指向官方服务);如果是自托管 LangSmith,需要设置为自托管的 URL。 |
LANGSMITH_API_KEY |
访问 API 的密钥。用于验证身份,确保你的程序可以向 LangSmith 发送追踪数据。 |
LANGSMITH_PROJECT |
指定项目名称。你的项目名字 |
配置完成后调用 Agent 可以在 LangSmith Tracing Projects 看到你的 Agent 运行情况

查看详情

LangSmith Studio 集成
使用 LangSmith Studio 的前提条件是
- LangSmith 的 API 密钥(我们有了)
langgraph.json配置文件
下边配置下 langgraph.json 一般是放在项目的根目录中
ts
{
"dependencies": ["."],
"graphs": {
"my_agent": "./src/ai/agent/index.ts:agent"
},
"env": ".env",
"image_distro": "wolfi"
}
| 字段 | 说明 |
|---|---|
node_version |
指定项目运行所需的 Node.js 版本, |
graphs |
定义项目中 Graph(图)的位置,键是 graph 名称,值是模块路径加导出对象名。这里 "agent": "./src/agent/graph.ts:graph" 表示在 ./src/agent/graph.ts 文件中导出的 graph 对象。 |
env |
指定环境变量文件路径,这里是 .env,项目启动时会加载这个文件中的环境变量。 |
dependencies |
列出该 graph 的依赖,这里是 ".",表示依赖当前项目的包(通常用于 monorepo 或本地包)。 |
image_distro |
指定用于构建 Docker 镜像的基础系统,这里是 wolfi(Alpine 类似的轻量 Linux 镜像)。 |
然后执行 npx @langchain/langgraph-cli dev 连接到 LangSmith Studio


总结
本文介绍了 LangChain 和 AI SDK,虽然现在只用到了 LangChain 但是后边是需要用到 AI SDK 来构建前端页面的
实现了一个简单的 Agent 可以回答某地区的天气情况
然后实现了 LangSmith 的集成,可以观察 Agent 的运行状态,调试 Agent
谢谢你的阅读