# M3.1 Agent 工作原理

> 目标：理解 Agent 的"闭环"和与普通聊天的本质区别，看懂 ReAct 范式。

## 1. 闭环：感知 → 规划 → 行动 → 记忆

真正的 Agent 是一个**循环**，不是一问一答：

```
┌─────────────────────────────────────────────┐
│  感知(Perceive)：拿到用户任务 + 环境反馈      │
│  规划(Plan)：大模型决定下一步做什么           │
│  行动(Act)：调用工具 / 写文件 / 发请求        │
│  记忆(Memory)：把结果存起来，进入下一轮       │
└─────────────────────────────────────────────┘
        ↑________ 循环直到任务完成 ________│
```

## 2. 与"单纯聊天"的本质区别：会调用工具

普通聊天：模型只生成文字。
Agent：模型可以**输出"我要调用某个工具"**，由外部代码真正执行，再把结果喂回模型。

```python
# 伪代码：Agent 循环的最小骨架
def run_agent(task):
    memory = [task]
    while not done(memory):
        # 1. 规划：让模型看当前记忆，决定下一步
        decision = llm_plan(memory)
        if decision.want_tool:
            # 2. 行动：真正执行工具（这是 Agent 的"手"）
            result = execute_tool(decision.tool, decision.args)
            # 3. 记忆：把结果存进上下文
            memory.append(f"工具{decision.tool}返回：{result}")
        else:
            return decision.final_answer
```

## 3. 主流范式：ReAct、Plan-and-Execute

**ReAct（Reason + Act）**：推理一步、行动一步，交替进行。适合需要边查边想的任务。

```
思考：用户问北京天气，我需要先查天气工具
行动：call_weather("Beijing")
观察：25°C 晴
思考：已拿到数据，可以回答了
回答：北京今天 25°C，晴...
```

**Plan-and-Execute**：先一次性把完整计划列好，再逐步执行。适合步骤明确的任务。

```
计划：1.读需求 2.写方案 3.评审 4.落地
执行步骤1...
执行步骤2...
```

```python
# ReAct 思路示意（真实框架会处理更多细节）
def react_loop(task):
    prompt = f"任务：{task}\n可选工具：{TOOL_DESC}\n请输出 思考/行动/回答"
    for _ in range(5):   # 最多循环 5 步，防死循环
        out = llm(prompt)
        if out.is_final:
            return out.answer
        result = call_tool(out.action)
        prompt += f"\n行动结果：{result}\n请继续"
```

## 动手练习

1. 找一个你用过的 AI 产品（如 Cursor），回忆它"读项目→改代码→跑测试"的过程，标出哪一步对应 感知/规划/行动/记忆。
2. 用三句话向朋友解释：为什么 Agent "能干活"而聊天机器人"只能说"。

## 自测

1. Agent 闭环的四个环节是什么？
2. ReAct 里"行动"这一步，是谁真正去执行工具？模型自己能执行吗？
3. 为什么 Agent 循环要加"最大步数"限制？不加会怎样？
