ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

新手小白 Agent 开发第5课:手搓 Agent Loop,让 AI 自己循环干活

新手小白 Agent 开发第5课:手搓 Agent Loop,让 AI 自己循环干活 上一课我们的程序只会执行一次工具就结束。但真实任务往往需要多步先搜索、再计算、再总结。这就需要 Agent 的「心脏」——Agent Loop。这一课是整套系列最核心的一课。搞懂它你就理解了所有 Agent 的底层运行方式。一、问题为什么一次工具调用不够我们的代码里有个if message.tool_calls:意思是只执行一次工具然后就结束。但真正的 Agent 应该是这样的用户 ↓ LLM ↓ 需要搜索 → 搜索 → 看结果 ↓ LLM 再判断 ↓ 还需要计算 → 计算 → 看结果 ↓ LLM 再判断 ↓ 任务完成 → 输出答案也就是说模型需要反复看结果、反复决定下一步。这就要用到循环。二、用 while 循环实现 Agent Loop把main.py改成from openai import OpenAI import os import json from tools import calculator client OpenAI( api_keyos.environ[DEEPSEEK_API_KEY], base_urlhttps://api.deepseek.com ) tools [ { type: function, function: { name: calculator, description: 进行数学计算, parameters: { type: object, properties: { a: {type: number, description: 第一个数字}, b: {type: number, description: 第二个数字}, operation: { type: string, enum: [add, subtract, multiply, divide], description: 运算类型 } }, required: [a, b, operation] } } } ] messages [ {role: user, content: 计算 12345 × 6789然后告诉我结果。} ] while True: response client.chat.completions.create( modeldeepseek-chat, messagesmessages, toolstools ) message response.choices[0].message # 把 AI 的消息加入对话历史 messages.append(message) # 如果 AI 不需要工具说明任务完成 if not message.tool_calls: print(AI, message.content) break # 如果 AI 要调用工具 for tool_call in message.tool_calls: function_name tool_call.function.name arguments json.loads(tool_call.function.arguments) print(Agent 调用工具, function_name) print(参数, arguments) if function_name calculator: result calculator( arguments[a], arguments[b], arguments[operation] ) else: result 未知工具 # 把工具执行结果告诉 AI messages.append({ role: tool, tool_call_id: tool_call.id, content: str(result) })运行python main.py你应该会看到Agent 调用工具 calculator 参数 {a: 12345, b: 6789, operation: multiply} AI12345 × 6789 83810205三、这段代码到底「循环」了什么关键就在那个while True:。它不断重复调用 LLM ↓ 检查 LLM 想干什么 ↓ 需要工具→ 执行工具 → 把结果返回给 LLM ↓ 不需要工具→ 输出最终答案结束一句话概括Agent Loop 就是「问模型下一步做什么 → 执行 → 把结果告诉它 → 再问」这个循环。四、最关键的一行代码messages.append({ role: tool, tool_call_id: tool_call.id, content: str(result) })这行的作用是告诉模型「你刚才让我调用的工具执行完了这是它返回的结果。」于是模型才能接着判断下一步DeepSeek →「我要 calculator」 Python → calculator → 83810205 把结果告诉 DeepSeek DeepSeek →「好我可以回答用户了」少了这一行Agent 就会「失忆」——它不知道工具执行了没有、结果是什么。五、Agent 的核心模型Think → Act → Observe把整个循环抽象出来就是所有 Agent 都遵循的三步Think思考我下一步该做什么 ↓ Act行动调用某个工具 ↓ Observe观察看工具返回的结果 ↓ 再次 Think … 直到完成┌─────────────┐ │ 用户 │ └──────┬──────┘ ↓ ┌─────────────┐ │ DeepSeek │ └──────┬──────┘ ↓ 需要工具 ↙ ↘ 是 否 ↓ ↓ 调用 Python 最终回答 ↓ 结果 ↓ 返回给 DeepSeek │ └──────────→ 再次判断一句话概括Agent 不神秘核心就是 Think → Act → Observe 的循环。六、你现在拥有的东西价值很大注意这一课的代码虽然简单但它已经是后面所有 Agent 的骨架。无论你以后用 LangGraph、AutoGen 还是自己写本质都逃不出这个循环。以后再给它加工具无非是DeepSeek │ ├── calculator ├── search ├── weather ├── database └── ...现在具备的能力意味着什么能循环执行可完成多步任务能记住工具结果具备上下文连续性由模型决定下一步具备自主性雏形一句话概括有了 Loop你的程序第一次真正「自己动了起来」。总结这一课我们用一个while循环做出了 Agent 的心脏。你现在应该真正理解了那句话——Agent 就是让大模型在「思考—行动—观察」中循环直到完成目标。但目前它只有一个计算器工具还不够「能打」。下一课我们给它装上联网搜索能力让它第一次接触真实世界的信息。下一课预告第6课给 Agent 装上联网搜索——Tavily 接入实战。
返回列表