AI 智能体 Agent
所谓 AI 智能体,就是把 LLM 放在一个循环里:让它不再只是"回答一次",而是观察环境、做出决策、调用工具、看到结果,然后继续下一轮,直到任务完成。
从一次问答到一个循环
普通 LLM 应用是单步:用户问 → 模型答 → 结束。智能体应用是循环:
while not done:
思考 = LLM(目标, 历史, 可用工具)
if 思考.需要调用工具:
结果 = 调用工具(思考.工具, 思考.参数)
历史.追加(思考, 结果)
else:
return 思考.最终答案
这就是 ReAct(Reason + Act)的核心思想。绝大多数现代 Agent 框架——LangChain、LlamaIndex、AutoGen 等——都是在这个循环上做工程化封装。
工具调用(Function Calling)
让模型可靠地调用工具,关键是把"工具能做什么、参数是什么形状"用 JSON Schema 明确告诉它,并且训练或微调过的模型会按结构化格式输出调用。
{
"name": "search_inventory",
"description": "按关键词检索库存条目",
"parameters": {
"type": "object",
"properties": {
"keyword": { "type": "string" },
"limit": { "type": "integer", "minimum": 1, "maximum": 50 }
},
"required": ["keyword"]
}
}
工程上需要注意:
- 工具数量要克制:暴露的工具越多,模型选择困难度越大、误调用越多。
- 失败可恢复:工具返回的错误也要喂回给模型,让它有机会自我纠正。
- 每次调用都要有超时与代价上限:避免无限循环烧钱。
规划(Planning)
单纯的 ReAct 在简单任务上很好用,但任务一复杂,模型容易"走歪一步、错一路"。常见的强化手段:
- 显式规划:先让模型写一个分步计划,再按步执行;执行中可以重新规划。
- 反思(Reflection):每完成一个子步骤,让模型评估"是否朝目标前进",必要时回退。
- 子任务分解:把大任务拆成子任务,子任务结果汇总给一个主控 Agent。
记忆(Memory)
上下文窗口是短期记忆,但对话一长就放不下。工程上一般这样分层:
- 短期记忆:当前会话的最近 N 轮原文。
- 会话摘要:把超出窗口的旧对话压缩成摘要后保留。
- 长期记忆:用 RAG 方式存到向量库,按需检索回上下文。
多智能体(Multi-Agent)
把不同角色(产品经理、程序员、测试、评审)分配给不同的 Agent,让它们以消息交互完成复杂任务。在某些场景下确实有效,但要清醒:
多智能体不会让一个原本不能解决问题的系统突然能解决,它更像是一种"任务结构化"的手段。如果单 Agent 都跑不通,多 Agent 通常只会失败得更复杂。
把 Agent 放到生产里要回答的问题
- 可观测:每一步的输入、思考、工具调用、返回都能审计。
- 可中断:有明确的步数上限、token 上限、时间上限。
- 可回滚:危险操作(写库、发邮件、付款)需要二次确认或人工审批。
- 可评测:用一组带标准答案的任务集做回归,每次升级模型或修改提示都重跑。
- 失败优雅:当 Agent 卡住或循环时,能稳妥退出而不是无限烧资源。
结语
Agent 不是魔法。它本质上是一个写得巧妙的循环加上一组工具加上一个语言模型。理解这一点,你就能用它做出真正可靠的产品,而不是被各种"自主"、"通用"、"智能"的话术带跑。