AI Agent 初探:工具调用与任务拆解
大模型只会"说",Agent(智能体)要让它会"做"。这篇笔记记录我对 Agent 架构的初步理解。
一、什么是 Agent
普通的 LLM 应用是"一问一答",而 Agent 是一个循环:模型观察环境 → 思考规划 → 调用工具行动 → 观察结果 → 继续思考,直到任务完成。经典定义下,Agent = LLM(大脑)+ 规划 + 记忆 + 工具使用。
二、三要素拆解
- 规划(Planning):把复杂任务拆解成子任务。常见做法有思维链分解、任务清单(Todo List)、反思(Reflection)自我纠偏。
- 记忆(Memory):短期记忆就是上下文窗口里的对话历史;长期记忆靠向量库,需要时检索相关片段注入提示词。
- 工具(Tools):搜索引擎、计算器、代码解释器、数据库、内部 API……模型通过 Function Calling 输出结构化调用请求,由外部程序真正执行。
三、ReAct 模式
ReAct(Reasoning + Acting)是最经典的 Agent 范式,交替进行"思考"和"行动":
Question: 明天上海天气如何,适合跑步吗?
Thought: 我需要先查询上海明天的天气。
Action: search_weather("上海", "明天")
Observation: 明天上海小雨,气温18-22度。
Thought: 有雨不适合户外跑步,可以建议室内运动。
Answer: 明天上海有小雨,气温18-22度,不太适合户外跑步,建议改为室内健身。
这个循环由程序框架驱动:解析模型输出中的 Action,执行后把 Observation 拼回上下文,再让模型继续。
四、Function Calling 简化示意
tools = [{
"name": "search_weather",
"description": "查询指定城市的天气",
"parameters": {"city": "string", "date": "string"}
}]
while True:
resp = llm.chat(messages, tools=tools)
if resp.has_tool_call():
result = execute(resp.tool_call) # 真正调用本地函数
messages.append(tool_result(result))
else:
return resp.content # 没有工具调用=任务完成
五、初步体会
- Agent 的不稳定性主要来自错误累积:一步走错,后面步步错。所以关键节点要加校验和重试。
- 工具描述(description)的写法直接影响调用准确率,值得像写提示词一样打磨。
- 不是所有场景都需要 Agent——单轮问答能解决的,别上循环,简单可靠优先。