面试官问:“你的 Agent 主循环,凭什么知道该停?“

📅 2026/7/2 2:11:31
面试官问:“你的 Agent 主循环,凭什么知道该停?“
面试官问“你的 Agent 主循环凭什么知道该停”“3 年大模型应用经验独立设计并落地多个生产级 Agent熟悉 ReAct、工具调用与多 Agent 编排”看到这份简历我打开他的 Agent 跑了个任务日志里同一个搜索工具、同样的参数连着调了十几次每次结果一样它就是不停最后撞到框架的步数上限才挂掉。我问它为什么停不下来候选人说可能是 prompt 没写好或者模型不够聪明。这是大多数人的第一反应也正是这道题想拆穿的误区。Agent 鬼打墙、反复试同一步停不下来几乎每个用过 Agent 的人都见过但很少有人说得清它到底凭什么判断自己已经做完、可以停了今天就把 Agent 主循环这一个零件从现象拆到工程。Round 1Agent 为什么会卡在一步上反复试停不下来面试官“一个 Agent 任务里同一个工具、同样的参数被连着调了十几次结果都一样它却不停。这是 bug 吗”候选人“应该是哪里出 bug 了吧或者模型太笨没反应过来。”正解不是 bug这是 Agent 主循环的默认行为。剥开各种框架Agent 主循环的本质就是一句话只要模型还在调工具就继续循环。模型没有我卡住了或者我已经做完了的内置开关它每一轮只是在概率生成下一个动作。研究里把这种鬼打墙精确定义过同一个工具、完全相同的参数连续 3 轮以上就判定为陷入逻辑死循环说明它已经无法从反馈里学到东西来源arxiv 2601.15679 agentic evaluation。最常见的触发点特别朴素某个工具返回了 None、空字符串或者一句生硬的报错。模型把这当成自己还没拿到结果于是原样再调一次又失败循环就此坐实。它不是在和你作对是真的不知道这次和上次有什么区别。这道题能自己验。打开你 Agent 的 trajectory log看有没有连续 3 次以上工具名加参数完全一样的调用再去查你用的框架循环的默认上限是多少。这里有个会吓到很多人的事实Vercel AI SDK 的默认停止条件是 stepCountIs(1)也就是压根不循环你得手动开来源Vercel AI SDK 文档2026。而 LangChain 的 AgentExecutor 用 max_iterations、LangGraph 用 recursion_limit 兜底不设就靠那个上限硬截断。要点速记Agent 主循环本质只要模型还在调工具就继续模型没有完成与否的内置开关死循环的研究定义同一工具 同样参数连续 3 轮以上arxiv 2601.15679常见触发工具返回 None/空/报错模型当成没拿到结果原样重试自验证打开 log 数连续相同的工具调用查框架默认上限Vercel AI SDK 默认 stepCountIs(1) 不循环Round 2那它到底靠什么判断任务做完了面试官“你说模型没有完成开关。那一个正常结束的 Agent到底是靠什么停下来的”候选人“模型自己会判断啊它觉得答得差不多了就不再调工具自然就结束了。”面试官内心 OS只说对了三种里的一种而且没意识到那一种其实最不可靠。正解Agent 判断它做完了工程上只有三条路而没有一条靠的是模型真的知道。第一条模型不再调工具、直接吐最终答复循环自然结束。OpenAI Agents SDK 就是这么干的runner 一直循环每轮看模型输出有工具调用就执行再继续直到某轮模型只给了最终答案、不再调工具才返回结果来源OpenAI Agents SDK 文档2026。问题在于这轮要不要再调工具同样是概率生成出来的模型对目标达成并没有确定性的感知它只是觉得这里像是该收尾了。第二条给它一个显式的完成工具。定义一个只用来宣布完成、本身不执行任何操作的 done 工具模型调用它循环就停。本质是把停也包装成一个动作塞进它的选项里让它选来源agent loop 实践2026。第三条完成度评估器。每轮动作后跑一个 evaluate_completion(结果, 目标)而且关键是要绑定可观测的状态变化记录有没有写进去、工单有没有关闭、消息有没有发出并收到确认。把它做完了定义成一个真实世界里能查到的状态跳变而不是模型嘴上说的。绕回那个反直觉的核心让模型自己决定何时停根本不是一个策略。基础推理循环不保证终止架构里没有任何东西担保它会停来源多篇 2026 agent 工程文。模型不是坏了它在严格执行你给的架构你没写退出条件它就没有退出条件。再叠上几个放大器目标模糊它不知道 done 长什么样工具反馈含糊一句更多结果可能可用会被它读成再去试试还有自我条件化上一步的错误原封不动躺在上下文里它顺着同一个坑接着跳。几样凑齐鬼打墙就是必然。要点速记三种判停模型不再调工具自然结束 / 显式 done 工具 / 绑定可观测状态的完成评估器第一种最常用也最不可靠要不要再调工具是概率生成的模型没有目标达成的真实感知让模型自己决定何时停不是策略基础循环本身不保证终止放大器目标模糊 工具反馈含糊 自我条件化凑齐就鬼打墙Round 3那线上怎么保证它一定停又不是粗暴硬截断面试官“知道根因了。生产里你怎么让它一定停还不能动不动就把任务一刀切死”候选人“加个 max_iterations 上限不就行了跑到 20 步强制结束。”面试官内心 OS硬上限是安全网不是解法他把兜底当成了正解。正解只靠 recursion limit 这种硬上限是粗暴的安全网不是解法它只保证不会无限烧钱不保证任务被合理收尾。生产里要三层叠起来用。第一层动作指纹去重最简单也最操作友好。每次调工具前把工具名 参数哈希一下在最近若干次调用的滑动窗口里数这个指纹出现了几次达到阈值就判定死循环拦下不执行并回注一条合成结果提示它别再重复。常见配置是窗口取最近 20 次、同一指纹出现 3 次触发来源LangChain loop 实践 / 2026 coding-agent harness。第二层明确的终止条件绑定可观测状态。让工具返回结构化的状态而不是一句裸字符串status 是 ok、no_results 还是 error模型一眼能分辨而不是把空结果误读成该再试一次。一句SUCCESS订单 HT79265 已确认比返回个空 list 让它瞎猜强得多。第三层硬上限兜底。max turns 25、max time 5 分钟、token 预算各设一道。这层不能省因为前两层万一漏了它就是最后那道闸。顺便算笔钱Agent 烧的 token 大约是普通对话的 4 倍多 Agent 系统能到 15 倍来源2026 agent 工程综述一个没人管的死循环账单很快就难看。检测到死循环之后别只会硬停要分级降级先注入一段 reflection 提示逼它重新评估还卡就提示它换工具或换思路再卡就压缩上下文重启推理实在不行带着部分结果优雅退出来源OpenClaw 分级策略2026。这里有个关键经验光往对话里注入文字警告没用LLM 会无视它真正拦得住的是代码层那道硬 halt它绕不过去。落到代码上一个最小的死循环检测器就这么点from hashlib import md5from collections import dequerecent deque(maxlen20) # 滑动窗口最近 20 次调用def guard(tool, args):fp md5(f{tool}:{args}“.encode()).hexdigest()recent.append(fp)if recent.count(fp) 3: # 同一指纹 3 次 死循环returnBLOCKED: 换个思路或宣布完成”returnNone # 放行最后留个坑提醒精确哈希只抓得住一模一样的重复。模型很会变着花样循环search(认证错误)、search(auth 报错)、search(登录失败)语义同一个意思、参数各不相同哈希根本抓不到。要拦这种得上语义相似度判断。要点速记单靠 max_iterations 是安全网不是解法要三层叠加指纹去重hash(工具参数)滑动窗口 20 次内出现 3 次就拦工具返回结构化状态ok/no_results/error别让模型把空结果误读成重试硬上限兜底max turns 25 / max time 5min / token 预算Agent 烧 token 是普通对话 4 倍多 Agent 15 倍检测到先降级reflection→换工具→压缩重启→带部分结果退出硬 halt 比文字警告靠谱Round 4那等模型更强是不是就能自己学会停了面试官“这些都是外挂的规则。等模型再强几代它能不能自己可靠地判断该停”候选人“应该可以吧模型越来越聪明迟早能自己收尾。”正解这不是模型强不强的问题是一道架构边界。判断任务真做完了需要的是对世界状态的确定性核验工单到底关没关、文件到底写没写、钱到底有没有打出去。这是一个查得到、不容狡辩的事实。而模型能做的永远只是在文本上觉得这里像是完成了它读的是上下文不是真实世界的状态。举个线上常踩的坑一个下单 Agent 调了支付接口接口因为超时悄悄失败了可返回的文本里没有明确的失败信号模型扫一眼上下文顺势写出已为您完成下单循环结束。任务在它眼里成了在真实世界里却没成。这种自信地报完成根子和鬼打墙是同一个模型对自己到底做到没做到没有任何核验能力它只是在续写一段读起来像完成了的话。文本上像完成和世界里真完成根本是两回事再强几代的模型也跨不过这道沟。所以停止权必须攀在你的代码里。前面那三种判停机制没有一种是把判断权真正交给模型done 工具、状态机、完成度评估本质都是把该不该停从模型手里拿回到工程手里。学术界也在往这个方向走Focused ReAct 干脆加了早停一旦检测到重复动作就强制模型基于现有信息收尾而不是等它自己醒悟来源arxiv 2410.10779。这恰恰是 Agent 最反直觉的地方它能自己决定下一步做什么却没法可靠地自己决定不做了。该停了从来不是一种会随模型变强而涌现的智能而是一条你必须亲手写进循环里的规则。要点速记判停需要对世界状态的确定性核验模型只能在文本上觉得完成了两者不是一回事自信地报完成和鬼打墙同根模型对自己做没做到没有核验能力再强的模型也跨不过这道边界判停的 3 种机制全在工程侧done 工具/状态机/完成评估Agent 能自己决定做什么却没法可靠地自己决定不做了面试官点评这场面试只考一个零件Agent 主循环的退出。候选人 ReAct、工具调用都说得溜可一被问到凭什么停立刻归因到 bug 和模型不够聪明说明他把 Agent 当成了一个会自己收尾的黑盒没意识到终止逻辑是自己该写、也只能自己写的那部分。能把这条想清楚的人做出来的 Agent 不一样他们会在循环里默认挂上指纹去重和硬上限会把工具的返回设计成带明确状态会把完成定义成一个查得到的状态跳变而不是赌模型某轮突然就懂事了。给准备面试的几条建议打开你现有 Agent 的日志数一数有没有连续重复的工具调用再确认你用的框架默认循环上限是多少很多人根本没设。给每个工具的返回值加上结构化状态ok / no_results / error光这一步就能消掉一大半鬼打墙。别等模型变强来救你把退出条件、指纹去重、硬上限当成主循环的标配第一版就写进去。Agent 这东西让它动起来很容易一个 while 循环就够难的是让它在该停的时候停下来。这部分不归模型管归你。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】