安装
复制
npm i @ag-kit/agents @langchain/core @langchain/langgraph @langchain/openai zod
快速开始
创建您的第一个 Agent:复制
import { ChatOpenAI } from "@langchain/openai";
import { SystemMessage } from "@langchain/core/messages";
import {
StateGraph,
START,
END,
MessagesAnnotation,
} from "@langchain/langgraph";
import { HumanMessage } from "@langchain/core/messages";
async function chatNode(state: typeof MessagesAnnotation.State) {
const model = new ChatOpenAI({
model: process.env.OPENAI_MODEL || "gpt-4o-mini",
apiKey: process.env.OPENAI_API_KEY,
configuration: {
baseURL: process.env.OPENAI_BASE_URL,
},
});
const systemMessage = new SystemMessage({
content: "你是一个有用的助手。",
});
const response = await model.invoke([systemMessage, ...state.messages]);
return { messages: [response] };
}
const workflow = new StateGraph(MessagesAnnotation)
.addNode("chat_node", chatNode)
.addEdge(START, "chat_node")
.addEdge("chat_node", END);
const compiledGraph = workflow.compile({});
const { messages } = await compiledGraph.invoke({
messages: [new HumanMessage({ content: "你好,你好吗?" })],
});
messages.forEach((message) =>
console.log(`[${message.type}]: ${message.content}`)
);
添加工具
工具扩展了 Agent 超越文本生成的能力。复制
import { ChatOpenAI } from "@langchain/openai";
import { AIMessage, SystemMessage } from "@langchain/core/messages";
import {
StateGraph,
START,
END,
MessagesAnnotation,
} from "@langchain/langgraph";
import { ToolNode } from "@langchain/langgraph/prebuilt";
import { tool } from "langchain";
import { HumanMessage } from "@langchain/core/messages";
import { z } from "zod";
const getWeather = tool(
async ({ location }) => ({
location,
condition: "晴朗",
temperatureC: 25,
}),
{
name: "getWeather",
description: "获取某个位置的模拟天气",
schema: z.object({
location: z.string().optional(),
}),
}
);
const tools = [getWeather];
async function chatNode(state: typeof MessagesAnnotation.State) {
const model = new ChatOpenAI({
model: process.env.OPENAI_MODEL || "gpt-4o-mini",
apiKey: process.env.OPENAI_API_KEY,
configuration: {
baseURL: process.env.OPENAI_BASE_URL,
},
}).bindTools(tools);
const systemMessage = new SystemMessage({
content: "你是一个有用的助手。",
});
const response = await model.invoke([systemMessage, ...state.messages]);
return { messages: [response] };
}
function shouldContinue(state: typeof MessagesAnnotation.State) {
const lastMessage = state.messages.at(-1);
if (AIMessage.isInstance(lastMessage)) {
const toolCalls = lastMessage.tool_calls;
const shouldCallTool = toolCalls?.some((c) =>
tools.some((t) => t.name === c?.name)
);
return shouldCallTool ? "tools" : END;
}
return END;
}
const workflow = new StateGraph(MessagesAnnotation)
.addNode("chat_node", chatNode)
.addNode("tools", new ToolNode(tools))
.addEdge(START, "chat_node")
.addConditionalEdges("chat_node", shouldContinue)
.addEdge("tools", "chat_node");
const compiledGraph = workflow.compile({});
const { messages } = await compiledGraph.invoke({
messages: [
new HumanMessage({
content: "请帮我获取伦敦的天气",
}),
],
});
messages.forEach((message) =>
console.log(`[${message.type}]: ${message.content}`)
);
下一步
- 多 Agent 系统 - 构建协作系统
- 工具 - 高级工具开发
- 记忆和状态 - 状态管理