AI 应用工程入门(九):Agent 到底是什么?
用普通人能听懂的方式解释 Agent 如何围绕目标进行计划、调用工具、观察结果和继续执行。
普通聊天机器人主要回答问题。Agent 则围绕一个目标工作:拆任务、调用工具、观察结果,再决定下一步。它不是一个单独模型,而是一种系统设计方式。
题目 1:Agent 和普通聊天机器人有什么区别?
标准答案:普通聊天是用户问、模型答。Agent 是用户给目标,模型拆步骤,调用工具,观察结果,继续执行,直到完成或停止。
工程要点:Agent 的价值在多步任务,不在单轮问答。简单摘要、分类和知识问答不一定需要 Agent,用普通模型调用、RAG 或 Tool Calling 就够了。
题目 2:Agent 的核心循环是什么?
标准答案:常见循环是 Plan、Act、Observe、Reflect。也就是计划下一步、执行工具、观察结果、调整策略。
工程要点:这个循环要有边界。不能让 Agent 无限执行。系统必须设置最大步骤数、最大成本、失败停止条件和用户确认节点。
一个非常简化的 Agent 循环可以这样理解:
for (let step = 0; step < 6; step++) {
const plan = await llm.plan({ goal, state, tools });
if (plan.type === "finish") {
return plan.answer;
}
if (plan.risk === "high") {
await requireUserConfirmation(plan);
}
const observation = await runTool(plan.toolName, plan.arguments);
state.steps.push({
thought: plan.reason,
action: plan.toolName,
observation,
});
}
throw new Error("agent_step_limit_exceeded");
这段伪代码里最重要的不是 plan 有多聪明,而是 step 上限、风险确认、工具执行和状态记录。Agent 必须能停下来,也必须能解释自己做过什么。
题目 3:Agent 和 Tool Calling 有什么关系?
标准答案:Tool Calling 是 Agent 的基础能力。Agent 通常会多次调用工具,并根据工具结果决定下一步。
工程要点:先掌握 Tool Calling,再学 Agent 会更顺。Agent 不是让模型随意行动,而是把工具调用放进一个可监管的任务循环。
题目 4:Agent 适合做什么?
标准答案:适合流程明确但步骤较多的任务,比如整理竞品分析、分析代码仓库、处理客服工单、生成报告、查询数据并生成图表。
工程要点:判断是否需要 Agent,可以看三个条件:任务是否多步,下一步是否依赖上一步结果,是否需要多个工具。如果不是,就不要为了概念而上 Agent。
题目 5:Agent 最大的问题是什么?
标准答案:不可控。它可能调错工具、循环停不下来、误解目标、成本失控,或者中间步骤失败后继续乱跑。
工程要点:Agent 工程最重要的不是聪明,而是可控性。系统要能回答:它正在做什么,为什么调用这个工具,已经做了哪些步骤,什么时候停止,失败后怎么处理。
完整示例:Agent 是受控循环,不是放飞模型
Agent 的关键不是“更聪明”,而是多步任务循环。它围绕目标计划下一步,调用工具,观察结果,再决定下一步。课程里要特别强调:Agent 必须有状态、上限、日志、权限和停止条件,否则就是不可控的自动化。
Goal:生成一份竞品分析报告
Plan:列出需要查询的竞品和维度
Act:调用搜索、网页读取、表格工具
Observe:记录工具返回结果
Reflect:判断资料是否够用,不够继续查
Finish:生成报告并列出来源
代码上可以先把 Agent 当成状态机:
type AgentStep = {
thought: string;
action?: string;
observation?: string;
};
type AgentState = {
goal: string;
steps: AgentStep[];
cost: number;
};
async function runAgent(goal: string) {
const state: AgentState = { goal, steps: [], cost: 0 };
for (let i = 0; i < 8; i++) {
const decision = await planNextStep(state);
if (decision.type === "finish") return decision.answer;
if (decision.risk === "high") await requireConfirmation(decision);
const observation = await runTool(decision.tool, decision.args);
state.steps.push({
thought: decision.reason,
action: decision.tool,
observation,
});
}
throw new Error("agent_step_limit_exceeded");
}
判断要不要用 Agent,可以看三个条件:任务是否多步,下一步是否依赖上一步结果,是否需要多个工具。如果只是总结一段文字,用普通模型调用;如果只是查资料,用 RAG;如果只是查订单,用 Tool Calling;只有多步目标才需要 Agent。
Agent 最大的工程风险是循环失控、成本失控和权限失控。所以必须记录每一步为什么做、调用了什么、花了多少、失败后怎么停。没有这些控制,就不要上线 Agent。
这一篇最该带走的结论是:Agent 等于 LLM、Tools、Memory、Planning 和 Control Loop 的组合。它的价值来自多步协作,也必须被状态、权限和日志约束。