背景失控的“永动机”还记得上次小刘那个因为死循环而刷爆信用卡的智能体吗虽然加了紧急熔断但杨工知道那只是“急救”不是“治疗”。杨工“小刘上次你的Agent之所以失控是因为你把‘思考’和‘行动’混成了一锅粥。它想一步登天结果陷入了无限递归。今天我们要给它装一个真正的心脏——Agent Loop 四相循环。”小刘拿出笔记本准备记录这个来自Claude Agent SDK (2025-09-29)的核心秘籍。第一幕拆解循环——从“混沌”到“秩序”杨工在白板上画了一个巨大的闭环箭头把它切成了四块蛋糕。杨工“听着一个健康的Agent循环必须严格拆分为四个阶段Gather → Action → Verify → Iterate。缺一不可顺序不能乱。”1. Gather Context (收集上下文) —— “观察路况”小刘“这一步是不是就是把Prompt塞给模型”杨工“不全是。这是信息聚合的时刻。不仅仅是用户的提问还包括上一步Action的执行结果成功还是报错。外部工具返回的数据数据库查到了什么。当前的系统状态内存够吗文件存在吗。Gather就是把所有散落在地上的拼图捡起来拼成一张完整的‘当前局势图’再喂给模型。”2. Take Action (执行动作) —— “转动方向盘”小刘“然后模型就开始输出了”杨工“对模型基于Gather到的信息决定下一步做什么。是调用搜索工具是写一段代码还是直接回答用户关键点这一步必须是原子化的。一次只做一个明确的动作不要让它试图在一次输出里完成‘查询分析总结写代码’所有事情。动作越单一越不容易出错。”3. Verify (验证结果) —— “检查仪表盘”小刘“模型输出了不就完了吗为什么要验证”杨工敲黑板“这是最重要的一步也是你上次失败的原因模型是会撒谎的也是会犯错的。Verify 不是让模型自己问自己‘我做得对吗’那是自欺欺人而是代码级的硬验证工具调用的返回码是200还是500生成的JSON格式合法吗输出的内容是否包含了敏感词如果Verify不通过绝对不能进入下一步必须直接打回重做”4. Iterate (迭代改进) —— “修正路线”小刘“如果验证失败了怎么办”杨工“这就是Iterate。把Verify发现的错误比如‘JSON解析失败’作为新的Context放回第一步 Gather开始下一轮循环。这就叫‘吃一堑长一智’。模型看到错误反馈会尝试换一种方式执行。但注意这个迭代不能无限进行”第二幕带 max_iterations 的“硬刹车”小刘看着白板上的四个圈若有所思“Gather, Action, Verify, Iterate……听起来很完美。但是杨工万一它一直Iterate永远验证不通过岂不是又回到了死循环的老路”杨工笑了他在循环旁边画了一个红色的计数器。杨工“问得好。这就是图里那句最重要的话带 max_iterations 硬刹车。”杨工解释道“无论你的逻辑多完美都必须假设模型会发疯。你需要设定一个全局变量current_step 0。每次进入循环current_step 1。一旦current_step max_iterations比如设为10强制终止循环。不管任务有没有完成不管模型还在说什么直接切断电源返回一个‘任务超时’的错误给用户。这就是驾驭工程的底线思维宁可任务失败不可系统失控。”尾声从“玄学”到“工程学”小刘合上笔记本看着那个严谨的四相循环图感慨道小刘“以前我觉得写Agent像是在炼丹全看模型心情。现在有了这个四相循环感觉像是在造精密仪器。Gather是传感器Action是执行器Verify是质检员Iterate是修正算法而max_iterations是保险丝。”杨工点头“没错。这就是Claude Agent SDK想要传达的理念。把不可控的AI能力封装在确定性的工程框架里。只有这样你的Agent才能从实验室的玩具变成生产环境的利器。”这个循环怎么落地我把这四个阶段整理成了一个伪代码模板你可以直接参考python# Agent Loop 四相循环伪代码模板 MAX_ITERATIONS 10 # 硬刹车阈值 def run_agent_loop(user_request): context initialize_context(user_request) step 0 while step MAX_ITERATIONS: step 1 # 1. Gather Context (收集上下文) current_state gather_state(context) # 2. Take Action (执行动作) llm_response call_llm(current_state) action_result execute_tool(llm_response.tool_call) # 3. Verify (验证结果) - 关键 is_valid verify_result(action_result) if is_valid: return action_result # 成功退出循环 # 4. Iterate (迭代改进) # 将错误信息加入上下文供下一轮使用 context.append({role: system, content: fError: {action_result.error}}) # 触发硬刹车 raise Exception(fAgent loop exceeded max iterations ({MAX_ITERATIONS}))
阅读完成 · 觉得有帮助?