简单来说,Agent(智能体)开发不再是让 AI 仅仅作为一个"问答机器人",而是把它变成一个 "有手有脚、能思考、能干活" 的数字员工。
如果把大模型(LLM)比作一个"聪明的大脑",那么 Agent 就是给这个大脑接上了身体(工具)和逻辑框架(规划) 。
1. Agent 的核心公式
一个成熟的 Agent 通常包含以下四个要素:
- 大脑(LLM): 负责核心推理、决策和语言理解。
- 规划(Planning): 它能把复杂任务拆解成步骤(比如:先查资料,再写草稿,最后发邮件)。
- 工具使用(Tool Use): 这是 Agent 的灵魂。它能自主调用外部工具,比如搜索网页、运行 Python/Typescript 代码、操作 Excel 或调用 API。
- 记忆(Memory): 短期记忆: 当前对话的上下文,长期记忆: 能够从数据库(如向量数据库)中检索过去的经验。
2. 传统开发 vs. Agent 开发
| 特性 | 传统程序 / 普通 AI 对话 | Agent 开发 |
|---|---|---|
| 执行逻辑 | 硬编码(If-Else),逻辑固定 | 自主决策,根据目标动态调整路径 |
| 交互能力 | 你问,它答 | 你给目标,它去执行并反馈结果 |
| 闭环能力 | 需要人工干预下一步 | 遇到错误会自动尝试修正(自我反思) |
3. Agent 工作的典型流程
想象你让 Agent "帮我调研 2024 年最火的 3 款国产电车并做成对比表格":
- 拆解: "我需要先搜索关键词,选出 3 款车,再分别查它们的参数。"
- 行动: 调用搜索工具获取网页内容。
- 观察: 发现其中一款车没价格,重新搜索价格信息。
- 整合: 将所有信息汇总,格式化为表格输出。
4. 目前主流的开发框架
如果你想尝试开发 Agent,通常会用到这些"脚手架":
- LangChain / LangGraph: 目前最流行的 Agent 编排框架。
- AutoGPT / BabyAGI: 早期火遍全网的自主执行代理实验。
- CrewAI / Multi-On: 专注于"多智能体协作"(让好几个 AI 像一个团队一样分工合作)。
- OpenAI Assistants API: 官方提供的低门槛 Agent 构建工具。
5. 那Agent开发是不是就是编排工作流?
是不是可以这样理解,Agent(智能体) 开发,就是编排智能体,按照编排的顺序去执行,不再是一问一答?如果这样理解已经抓住了 Agent (智能体)开发的核心,但我们可以把这个理解再往深推一步。
真正的 Agent(智能体) 相比于单纯的顺序执行,多了一层最关键的东西:自主决策(Autonomy) 。
它更像一个有经验的员工。不再是简单的顺序: 假设你只给它一个模糊的目标(比如"帮我买一张最划算的进京机票")。
- 动态调整: 它先去查票,发现没票了,它不会报错退出,而是会自己思考:"我是不是该换个机场?或者换个日期?"然后重新执行。
- 闭环决策: 它拥有
Reasoning(推理)和Acting(行动)的循环(学术上常称为 ReAct 模式)。
6. 大模型负责"想",而 Agent (智能体)(你写的代码)负责"做"
1. 角色分工:大脑 vs. 系统
我们可以把这个过程拆解开来看:
- 大模型(LLM): 扮演的是决策中心。它通过文字告诉系统:"我现在需要搜索周杰伦的演唱会信息,请调用搜索工具。"
- Agent 框架(如 LangChain, Coze, Dify): 扮演的是执行系统。它看到大模型发出的指令后,真的去运行搜索插件,拿到结果,再把结果喂回给大模型。
2. 核心机制: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",思考:"既然没票了,我应该建议用户买下一场。" |
3. "大脑"是怎么控制"手脚"的?
你可能会好奇,大模型只是一段文本预测模型,它是怎么命令代码去执行操作的?
这主要靠一种叫 Function Calling(函数调用) 的技术:
- 你先告诉大模型:我有两个工具,一个是"搜索",一个是"订票"。
- 大模型会根据你的要求,输出一段特定格式的代码或 JSON (例如:
{"tool": "search", "query": "上海天气"})。 - 你的程序检测到这个 JSON,暂停生成,去跑搜索脚本,拿到结果。
- 你的程序把结果包装成"背景资料",再次发给大模型。
4. 谁在维持这个循环?
大模型本身是没有状态 的,它记不住刚才发生了什么。 是 Agent 框架 (或者说你写的 Python/Node.js 代码)在维持一个 While 循环。
代码逻辑大致如下:
markdown
while 任务没完成:
1. 把所有记录发给大模型,问它下一步做什么。
2. 如果大模型说"我要调用工具",代码就去执行工具。
3. 如果大模型说"我做完了",循环结束,给用户回话。
7. 在 Node.js 中实现一个简单的 Agent
在 Node.js 中实现一个简单的 Agent,最直观的方法是利用 OpenAI SDK 的 Function Calling (工具调用) 功能。
我们可以手动编写一个"思考-行动-观察"的循环(Loop),这样我们就能清晰地看到 Agent 是如何工作的。
1. 核心逻辑架构
假设我们要实现的 Agent 逻辑如下:
- 用户提问: "上海今天天气怎么样?"
- 大模型思考: "我没有实时数据,但我有个
get_weather工具可以查,我应该调用它。" - 代码执行: 你的 Node.js 代码运行真实的查询函数,获取结果(如"2°C,晴")。
- 大模型总结: 看到结果后,最后一次回答用户。
2. 极简代码实现(基于 OpenAI SDK)
你需要先安装依赖:npm install openai。
javascript
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("上海天气怎么样?");
3. 进阶:为什么要用框架?
当你手写上述 while(true) 循环时,你会发现处理起来很麻烦:
- 多轮对话: 怎么管理长对话的内存(Memory)?
- 错误处理: 如果工具执行失败了,AI 怎么自我修复?
- 多智能体: 如果让一个 Agent 去改另一个 Agent 的代码怎么办?
这时候,你可以尝试使用成熟的 Node.js Agent 框架:
- LangChain.js / LangGraph: 最老牌且功能最全,适合构建极其复杂的逻辑图。
- Vercel AI SDK: 非常现代化,和 React/Next.js 结合极佳,通过
generateText几行代码就能搞定上述循环。 - OpenAI Assistants API: 官方托管的 Agent 服务。你只需要在后台配置好工具,OpenAI 的服务器会自动帮你跑那个
while循环和存储记忆,你只需调一个接口。
总结
大模型执行的是"逻辑执行",而你的代码(Agent 智能体)执行的是"物理执行"。