林逍遥 AI林逍遥 AI
登录
Agent架构

Agent 架构设计:从单轮到自主循环

·9 分钟阅读

AI Agent 不是简单的"多轮对话"。它是一个自主决策的循环系统——感知环境、选择行动、执行工具、观察结果、决定下一步。本文深入讲解 Agent 的核心架构,从最简单的 ReAct 模式到 Claude 的四层架构。

你将学到什么

  • Agent 与 Chatbot 的本质区别
  • ReAct(Reasoning + Acting)架构模式
  • Claude Agent 的四层架构设计
  • 从零实现一个自主决策的 Agent Loop

Agent 与 Chatbot 的区别

Chatbot 是被动的——用户发消息,AI 回复,一问一答。Agent 是主动的——它会自主决定"接下来该做什么",直到任务完成。

对比项ChatbotAgent
交互方式一问一答自主循环
工具使用无或固定动态选择
任务范围单轮回答多步骤复杂任务
终止条件用户停止任务完成

ReAct 架构模式

ReAct 是 Agent 最经典的设计模式。核心思想:先推理(Reason),再行动(Act)

用户: "帮我查一下北京今天的天气,然后发给张三"

Agent 思考: 用户要查天气并发送,我需要:
  1. 先调用天气 API 查北京天气
  2. 再调用消息 API 发送给张三

Agent 行动 1: 调用 get_weather(city="北京")
观察结果: 晴,25°C,东风3级

Agent 思考: 已获取天气信息,现在发送给张三
Agent 行动 2: 调用 send_message(to="张三", content="北京今天晴,25°C")
观察结果: 发送成功

Agent 思考: 两步都完成了,任务结束
Agent 回复: "已查到北京今天晴,25°C,东风3级,已发送给张三。"

Claude Agent 四层架构

Claude 的 Agent 系统采用四层设计:

第一层:Agent Loop(决策循环) 核心循环——接收输入 → 推理 → 选择工具 → 执行 → 观察结果 → 继续或停止。

第二层:Runtime(运行时) 管理 Agent 的执行环境:对话历史、token 计数、上下文压缩、权限控制。

第三层:MCP(模型上下文协议) 标准化的工具接口层。Agent 通过 MCP 连接各种外部服务,无需为每个工具写专门的集成代码。

第四层:Skills(能力模块) 高级能力包——PDF 处理、代码执行、网页抓取等。每个 Skill 可以包含多个工具和专门的 prompt。

实现一个 Agent Loop

import anthropic

client = anthropic.Anthropic()

tools = [
    {
        "name": "search_web",
        "description": "搜索互联网获取最新信息",
        "input_schema": {
            "type": "object",
            "properties": {
                "query": {"type": "string", "description": "搜索关键词"}
            },
            "required": ["query"]
        }
    },
    {
        "name": "calculate",
        "description": "执行数学计算",
        "input_schema": {
            "type": "object",
            "properties": {
                "expression": {"type": "string", "description": "数学表达式"}
            },
            "required": ["expression"]
        }
    }
]

def execute_tool(name, input_data):
    """模拟工具执行"""
    if name == "search_web":
        return f"搜索结果: 关于'{input_data['query']}'的信息..."
    elif name == "calculate":
        return str(eval(input_data["expression"]))
    return "未知工具"

def agent_loop(user_message, max_iterations=10):
    messages = [{"role": "user", "content": user_message}]

    for i in range(max_iterations):
        response = client.messages.create(
            model="claude-sonnet-4-6",
            max_tokens=4096,
            tools=tools,
            messages=messages,
        )

        # 检查是否需要调用工具
        if response.stop_reason == "tool_use":
            # 收集所有工具调用
            tool_results = []
            for block in response.content:
                if block.type == "tool_use":
                    result = execute_tool(block.name, block.input)
                    print(f"  工具调用: {block.name}{result[:50]}")
                    tool_results.append({
                        "type": "tool_result",
                        "tool_use_id": block.id,
                        "content": result
                    })

            messages.append({"role": "assistant", "content": response.content})
            messages.append({"role": "user", "content": tool_results})
        else:
            # Agent 决定停止,返回最终回复
            final_text = ""
            for block in response.content:
                if hasattr(block, "text"):
                    final_text += block.text
            return final_text

    return "达到最大迭代次数"

# 运行
result = agent_loop("搜索一下 Claude 4.6 的最新定价,然后帮我算一下处理 100 万个 token 的输入输出总费用")
print(result)

关键设计决策

何时停止循环?

  • Claude 返回 stop_reason: "end_turn" 时自然停止
  • 设置最大迭代次数(防止无限循环)
  • 检测重复行为(Agent 在做同样的事情)

错误处理策略:

  • 工具失败时,将错误信息返回给 Agent,让它决定是否重试或换方案
  • 设置超时机制
  • 记录每一步的日志

实战练习

Tip: 动手构建你的第一个 Agent。

  1. 复制上面的 Agent Loop 代码,添加一个新工具(如 get_time
  2. 让 Agent 处理一个需要多步推理的任务
  3. 添加日志记录,观察 Agent 的决策过程

关键要点

Note: 本文核心总结

  • Agent = 自主决策循环,不是简单的多轮对话
  • ReAct 模式:先推理再行动,循环执行直到任务完成
  • Claude 四层架构:Agent Loop → Runtime → MCP → Skills
  • stop_reason 是判断 Agent 是否继续循环的关键

延伸阅读

  • 下一篇:多工具编排——当 Agent 有很多工具时如何管理
  • Anthropic 官方 Agent 设计指南
二维码
微信公众号:lingxiaoyao

关注公众号,获取最新 AI 教程和课程更新

加载评论中...