传统LLM vs Agent的本质区别
传统LLM:输入Prompt → 模型处理 → 输出文字。一次性完成,没有外部工具调用,没有中间状态。
Agent:可以调用工具(搜索、运行代码、读写文件)、根据工具返回结果决定下一步行动、循环迭代直到完成任务。
ReAct框架:三步循环
ReAct = Reasoning(推理)+ Acting(行动)。每个循环包含三步:
- Thought:我现在需要做什么?应该调用哪个工具?
- Action:调用工具(如 web_search("最新AI新闻"))
- Observation:读取工具返回的结果
然后回到Thought,决定是继续循环还是输出最终答案。
完整ReAct循环伪代码
def agent_loop(task, tools, max_turns=10):
messages = [{"role": "user", "content": task}]
for turn in range(max_turns):
# 1. 让模型思考(Thought)
response = llm.chat(messages, tools=tools)
# 2. 检查是否有工具调用(Action)
if response.tool_calls:
for tool_call in response.tool_calls:
# 3. 执行工具,获取结果(Observation)
result = execute_tool(tool_call.name, tool_call.args)
messages.append({
"role": "tool",
"content": str(result),
"tool_call_id": tool_call.id
})
else:
# 没有工具调用,说明任务完成,输出最终答案
return response.content
return "超出最大轮次限制"真实执行trace示例
任务:分析今日A股大盘情况
[Turn 1]
Thought: 我需要先获取今日大盘数据
Action: web_search("A股 沪深300 今日行情")
Observation: 沪深300今日下跌0.8%,成交量缩量...
[Turn 2]
Thought: 我需要具体股票数据
Action: terminal("python3 analyze_stock.py 000001")
Observation: 上证指数3150.42,-0.62%...
[Turn 3]
Thought: 我已有足够信息,可以生成分析报告了
Final Answer: 今日A股整体偏弱,沪深300下跌0.8%...停止条件设计
- 模型决定不再调用工具,直接输出答案(正常结束)
- 达到最大轮次限制(max_turns,通常设10-15轮)
- 工具返回错误超过N次(超出重试上限)
- 用户主动中断(/stop命令)
Agent的核心价值:它不是"一问一答",而是"一个目标,自主规划执行步骤"。适合那些你说"帮我做X",但具体怎么做需要AI自己决定的复杂任务。