基于 LangGraph 开发
LangGraph 是 LangChain 团队开发的图结构工作流框架,提供了更精细的流程控制能力。云开发同时支持 TypeScript 和 Python 版本的 LangGraph 适配器。
前置条件
TypeScript 版本
安装依赖
npm install @cloudbase/agent-adapter-langgraph @langchain/langgraph @langchain/openai
快速开始
import { LanggraphAgent, createAgentServer } from "@cloudbase/agent-adapter-langgraph";
import { StateGraph, Annotation, END } from "@langchain/langgraph";
import { ChatOpenAI } from "@langchain/openai";
// 定义状态
const StateAnnotation = Annotation.Root({
messages: Annotation<string[]>({
reducer: (x, y) => x.concat(y),
default: () => [],
}),
response: Annotation<string>(),
});
// 使用云开发内置的大模型端点
const model = new ChatOpenAI({
model: process.env.TCB_AI_MODEL || "deepseek-v4-flash",
apiKey: process.env.TCB_API_KEY,
configuration: {
baseURL: `https://${process.env.TCB_ENV_ID}.api.tcloudbasegateway.com/v1/ai/cloudbase`,
},
});
// 定义节点
async function chatNode(state: typeof StateAnnotation.State) {
const lastMessage = state.messages[state.messages.length - 1];
const response = await model.invoke(lastMessage);
return { response: response.content };
}
// 构建图
const graph = new StateGraph(StateAnnotation)
.addNode("chat", chatNode)
.addEdge("__start__", "chat")
.addEdge("chat", END);
// 编译图
const compiledGraph = graph.compile();
// 创建 Agent
const agent = new LanggraphAgent({
name: "ChatBot",
description: "基于 LangGraph 的对话助手",
graph: compiledGraph,
});
// 导出
module.exports = createAgentServer(agent);
带工具的 Agent
import { LanggraphAgent, createAgentServer, ClientStateAnnotation } from "@cloudbase/agent-adapter-langgraph";
import { StateGraph, Annotation, END } from "@langchain/langgraph";
import { ChatOpenAI } from "@langchain/openai";
import { ToolNode } from "@langchain/langgraph/prebuilt";
import { tool } from "@langchain/core/tools";
import { z } from "zod";
// 定义工具
const weatherTool = tool(
async ({ city }) => {
return JSON.stringify({
city,
temperature: "25°C",
weather: "晴天",
});
},
{
name: "get_weather",
description: "获取指定城市的天气信息",
schema: z.object({
city: z.string().describe("城市名称"),
}),
}
);
const calculatorTool = tool(
async ({ expression }) => {
try {
// 注意:实际项目中应使用安全的表达式计算库
const result = eval(expression);
return String(result);
} catch {
return "计算错误";
}
},
{
name: "calculator",
description: "计算数学表达式",
schema: z.object({
expression: z.string().describe("数学表达式"),
}),
}
);
const tools = [weatherTool, calculatorTool];
// 定义状态
const StateAnnotation = Annotation.Root({
...ClientStateAnnotation.spec,
messages: Annotation<any[]>({
reducer: (x, y) => x.concat(y),
default: () => [],
}),
});
// 使用云开发内置的大模型端点
const model = new ChatOpenAI({
model: process.env.TCB_AI_MODEL || "deepseek-v4-flash",
apiKey: process.env.TCB_API_KEY,
configuration: {
baseURL: `https://${process.env.TCB_ENV_ID}.api.tcloudbasegateway.com/v1/ai/cloudbase`,
},
}).bindTools(tools);
// 定义节点
async function agentNode(state: typeof StateAnnotation.State) {
const response = await model.invoke(state.messages);
return { messages: [response] };
}
// 路由函数
function shouldContinue(state: typeof StateAnnotation.State) {
const lastMessage = state.messages[state.messages.length - 1];
if (lastMessage.tool_calls?.length > 0) {
return "tools";
}
return END;
}
// 构建图
const graph = new StateGraph(StateAnnotation)
.addNode("agent", agentNode)
.addNode("tools", new ToolNode(tools))
.addEdge("__start__", "agent")
.addConditionalEdges("agent", shouldContinue)
.addEdge("tools", "agent");
const compiledGraph = graph.compile();
// 创建 Agent
const agent = new LanggraphAgent({
name: "ToolAgent",
description: "带工具调用的智能助手",
graph: compiledGraph,
});
module.exports = createAgentServer(agent);