冬瓜音乐播放器
21.94M · 2026-02-13
简单来说,Agent(智能体)开发不再是让 AI 仅仅作为一个“问答机器人”,而是把它变成一个 “有手有脚、能思考、能干活” 的数字员工。
如果把大模型(LLM)比作一个“聪明的大脑”,那么 Agent 就是给这个大脑接上了身体(工具)和逻辑框架(规划) 。
一个成熟的 Agent 通常包含以下四个要素:
| 特性 | 传统程序 / 普通 AI 对话 | Agent 开发 |
|---|---|---|
| 执行逻辑 | 硬编码(If-Else),逻辑固定 | 自主决策,根据目标动态调整路径 |
| 交互能力 | 你问,它答 | 你给目标,它去执行并反馈结果 |
| 闭环能力 | 需要人工干预下一步 | 遇到错误会自动尝试修正(自我反思) |
想象你让 Agent “帮我调研 2024 年最火的 3 款国产电车并做成对比表格”:
如果你想尝试开发 Agent,通常会用到这些“脚手架”:
是不是可以这样理解,Agent(智能体) 开发,就是编排智能体,按照编排的顺序去执行,不再是一问一答?如果这样理解已经抓住了 Agent (智能体)开发的核心,但我们可以把这个理解再往深推一步。
真正的 Agent(智能体) 相比于单纯的顺序执行,多了一层最关键的东西:自主决策(Autonomy) 。
它更像一个有经验的员工。不再是简单的顺序: 假设你只给它一个模糊的目标(比如“帮我买一张最划算的进京机票”)。
Reasoning(推理)和 Acting(行动)的循环(学术上常称为 ReAct 模式)。我们可以把这个过程拆解开来看:
这个“思考 -> 行动 -> 观察”的过程在技术上通常被称为 ReAct (Reason + Act) 。
text{Input} rightarrow underbrace{text{Thought} rightarrow text{Action} rightarrow text{Observation}}_{text{Loop}} rightarrow text{Final Answer}
我们可以通过一个具体的例子来看看它们是怎么配合的:
| 步骤 | 谁在执行? | 执行了什么内容? |
|---|---|---|
| 思考 (Thought) | 大模型 | 生成一段文本:“用户想买票,我得先查查今天几号,再查票务接口。” |
| 行动 (Action) | 框架/代码 | 识别到大模型想调用 get_tickets 函数,代码自动去运行这个函数。 |
| 观察 (Observation) | 框架/代码 | 函数返回了结果:“余票为 0”。框架把这行字传回给大模型。 |
| 调整计划 (Adjust) | 大模型 | 看到“余票 0”,思考:“既然没票了,我应该建议用户买下一场。” |
你可能会好奇,大模型只是一段文本预测模型,它是怎么命令代码去执行操作的?
这主要靠一种叫 Function Calling(函数调用) 的技术:
{"tool": "search", "query": "上海天气"})。大模型本身是没有状态的,它记不住刚才发生了什么。 是 Agent 框架(或者说你写的 Python/Node.js 代码)在维持一个 While 循环。
代码逻辑大致如下:
while 任务没完成:
1. 把所有记录发给大模型,问它下一步做什么。
2. 如果大模型说“我要调用工具”,代码就去执行工具。
3. 如果大模型说“我做完了”,循环结束,给用户回话。
在 Node.js 中实现一个简单的 Agent,最直观的方法是利用 OpenAI SDK 的 Function Calling (工具调用) 功能。
我们可以手动编写一个“思考-行动-观察”的循环(Loop),这样我们就能清晰地看到 Agent 是如何工作的。
假设我们要实现的 Agent 逻辑如下:
get_weather 工具可以查,我应该调用它。”你需要先安装依赖:npm install openai。
import OpenAI from "openai";
const openai = new OpenAI({ apiKey: '你的API_KEY' });
// --- 第一步:定义 Agent 可以使用的“手脚”(工具) ---
const tools = [
{
type: "function",
function: {
name: "get_weather",
description: "获取指定城市的天气信息",
parameters: {
type: "object",
properties: {
city: { type: "string", description: "城市名称,如:上海" },
},
required: ["city"],
},
},
},
];
// 模拟一个真实的工具执行函数
async function get_weather(args) {
console.log(`[工具执行] 正在查询 ${args.city} 的天气...`);
// 在实际应用中,这里会调用天气 API
return `北京今天晴朗,气温 5°C 到 -5°C。`;
}
// --- 第二步:实现“思考-行动”循环 ---
async function runAgent(userInput) {
let messages = [
{ role: "system", content: "你是一个乐于助人的助手。如果需要,请使用工具获取最新信息。" },
{ role: "user", content: userInput }
];
while (true) {
// 1. 让大脑(LLM)思考下一步
const response = await openai.chat.completions.create({
model: "gpt-4o",
messages: messages,
tools: tools,
});
const message = response.choices[0].message;
messages.push(message); // 将 AI 的思考记录存入上下文
// 2. 判断是否需要执行工具
if (message.tool_calls) {
for (const toolCall of message.tool_calls) {
const functionName = toolCall.function.name;
const args = JSON.parse(toolCall.function.arguments);
// 3. 物理执行(Action)
const observation = await get_weather(args);
// 4. 将观察到的结果(Observation)反馈给大脑
messages.push({
role: "tool",
tool_call_id: toolCall.id,
content: observation,
});
}
// 继续循环,让 AI 根据工具结果进行下一次思考
continue;
}
// 如果 AI 不再需要调用工具,说明它已经有了最终答案
console.log("Agent 回答:", message.content);
break;
}
}
runAgent("上海天气怎么样?");
当你手写上述 while(true) 循环时,你会发现处理起来很麻烦:
这时候,你可以尝试使用成熟的 Node.js Agent 框架:
generateText 几行代码就能搞定上述循环。while 循环和存储记忆,你只需调一个接口。大模型执行的是“逻辑执行”,而你的代码(Agent 智能体)执行的是“物理执行”。