核心模式

在这里插入图片描述

所有 AI 编程 Agent 共享同一个循环:调用模型、执行工具、回传结果。生产级系统会在其上叠加策略、权限和生命周期层.。

while True:
response = client.messages.create(messages=messages, tools=tools)
if response.stop_reason != “tool_use”:
break
for tool_call in response.content:
result = execute_tool(tool_call.name, tool_call.input)
messages.append(result)

这段代码非常经典,它展示了现代 AI Agent(智能体) 的核心工作原理,通常被称为 “ReAct”模式(Reasoning + Acting,推理与行动)“Agentic Loop”(代理循环)
简单来说,这段代码实现了一个**“思考 -> 行动 -> 观察 -> 再思考”的闭环。
通过三个部分来帮助你理解:逐行代码解释工作流程图解、以及
一个具体的通俗例子**。

1. 逐行代码解释

while True: 
    # 【步骤 1:思考与决策】
    # 将当前所有的对话历史和可用的工具列表发给大模型 (LLM)
    # 模型会根据指令决定是直接回答用户,还是需要调用工具
    response = client.messages.create(messages=messages, tools=tools)
    # 【步骤 2:判断是否结束】
    # 检查模型停止的原因。如果不是因为"使用工具"而停止,
    # 说明模型已经生成了最终答案(比如直接回答了问题),任务完成,跳出循环。
    if response.stop_reason != "tool_use":
        break
    # 【步骤 3:执行行动】
    # 如果代码走到这里,说明模型决定使用工具。
    # 遍历模型请求调用的所有工具(可能一次调用多个)
    for tool_call in response.content:
        # 真正执行工具函数,传入模型生成的参数
        result = execute_tool(tool_call.name, tool_call.input)
        
        # 【步骤 4:记忆更新】
        # 将工具执行的结果追加到对话历史中。
        # 这就像告诉模型:“你刚才用的那个工具,运行结果是这个。”
        messages.append(result)

2. 核心工作原理图解

Agent 的工作原理可以看作是一个无限循环,直到问题被解决:

  1. 感知: Agent 看到 messages(用户的问题 + 历史记录)。
  2. 决策: 大模型“思考”。它有两个选择:
    • 直接回答(如果知道答案) -> 循环结束。
    • 使用工具(如果需要查天气、搜网页、读文件) -> 进入下一步。
  3. 行动: 你的代码执行具体的函数(如 get_weather('Beijing'))。
  4. 观察: 拿到函数返回的结果(如 “北京今天晴,25度”)。
  5. 反馈: 把结果塞回 messages 里。
  6. 循环: 再次回到第1步。此时模型“看”到了工具的结果,它有了更多信息,可以做出更好的决策(比如生成最终答案,或者觉得信息不够,再调用另一个工具)。

3. 通俗例子:查天气

假设你问 Agent:“北京今天天气怎么样?”
第一轮循环:

  • 模型思考: 用户问北京天气。我的知识库是旧的,但我有一个 get_weather 工具。我应该调用它。
  • 模型输出: tool_use: get_weather(city='Beijing')
  • 代码判断: stop_reasontool_use不跳出循环
  • 执行工具: 代码运行 get_weather,假设返回结果是 "气温25度,晴"
  • 更新记忆:"气温25度,晴" 这个结果放入 messages
    第二轮循环:
  • 模型思考: (此时模型看到了历史记录:用户问天气 -> 我调用了工具 -> 工具返回“气温25度,晴”)。现在我有答案了。
  • 模型输出: stop_reasonend_turn(正常结束),内容是“北京今天天气不错,气温25度,晴天。”
  • 代码判断: stop_reason 不是 tool_use跳出循环
    最终结果: 你得到了北京天气的答案。

总结

这段代码的核心在于让大模型不仅仅是“说话”,而是能“动手”

  • messages 是 Agent 的短期记忆
  • tools 是 Agent 的双手
  • while True 循环是 Agent 的执行引擎
    通过这个循环,Agent 就像人类一样,遇到不懂的问题会去查资料(调用工具),查到资料后会回来继续思考(再次调用模型),直到解决问题。

好的,为了让你更深入理解 Agent 如何处理复杂逻辑,我们来看一个包含**“条件判断”“多步依赖”**的例子。

场景设定:智能投资助手

假设你给 Agent 的指令是:

“帮我查一下英伟达现在的股价。如果超过 800 美元,就给我发一封邮件提示风险;如果低于 800 美元,就直接告诉我价格,不用发邮件。”
在这个场景中,Agent 不能一次性完成任务,它必须先获取信息根据结果做判断,然后执行不同的后续动作
可用工具:

  1. get_stock_price(symbol): 查询股价。
  2. send_email(to, subject, body): 发送邮件。

循环执行过程演示

🔄 第一轮循环:获取信息
  • 模型思考:
    用户要查英伟达股价,首先我需要调用查询工具。我还不知道价格,所以现在还不能决定是否发邮件。
  • 模型决策:
    调用工具 get_stock_price,参数 symbol="NVDA"
  • 代码执行:
    • response.stop_reason"tool_use" -> 不跳出循环
    • execute_tool 运行查询,得到结果:{"price": 850, "currency": "USD"}
    • messages.append(result):把“股价是850美元”这个事实加入对话历史。
🔄 第二轮循环:逻辑判断与行动
  • 模型思考:
    (此时模型看到了最新的历史记录:股价是 850 美元)。
    用户指令是:“如果超过 800 美元,发邮件”。
    850 > 800,条件满足。我需要调用邮件工具。
  • 模型决策:
    调用工具 send_email,参数 to="user@example.com", subject="股价预警", body="英伟达股价已涨至850美元,注意风险"
  • 代码执行:
    • response.stop_reason"tool_use" -> 不跳出循环
    • execute_tool 发送邮件,返回结果:"Email sent successfully"
    • messages.append(result):把“邮件发送成功”加入对话历史。
🔄 第三轮循环:生成最终答案
  • 模型思考:
    (此时模型看到了:股价查到了 -> 邮件也发了)。
    所有任务链条都完成了。我现在应该给用户一个最终的回复,告诉他我已经搞定了一切。
  • 模型决策:
    生成普通文本回复:“我已经查到英伟达目前的股价为 850 美元。由于价格超过了 800 美元,我已经给您发送了风险提示邮件。”
  • 代码执行:
    • response.stop_reason"end_turn" (即不是 tool_use)。
    • 满足跳出条件 break,循环结束。

这个例子为什么“复杂”?

对比之前的天气例子,这个例子展示了 Agent 的两个核心高级能力:

  1. 动态决策能力
    代码里并没有写死 if price > 800 的逻辑。这个逻辑完全是大模型理解了自然语言指令后,在运行过程中自己推导出来的。
    • 如果第一轮查出来的价格是 700 美元,模型在第二轮循环就会直接回答用户,而不会调用 send_email 工具。这就是 Agent 的“智能”所在。
  2. 上下文记忆
    第二轮循环之所以能发生,是因为第一轮循环把结果放进了 messages。模型在第二轮时,必须依赖第一轮的产出才能做决定。这展示了 messages.append(result) 这行代码的关键作用——它在循环中传递了“记忆”。

总结:这段代码为什么强大?

这段代码虽然短,但它把大模型变成了一个状态机

  • State (状态): messages 列表(记录了发生过的一切)。
  • Transition (状态转移): 每一次 while 循环。
  • Logic (逻辑): 隐藏在大模型的神经网络参数里,而不是写死在你的 Python 代码里。
    这解释了为什么 Agent 能够处理非常复杂的任务——只要工具箱足够丰富,这个循环就能让 AI 像人一样,一步步完成长链条的任务。
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐