经典AI开发面试题:如何防止agent执行过程中死循环
为什么这道题频繁出现?
Agent 死循环是 LLM 工程中最常见、也最致命的生产问题之一。它不像模型幻觉那样偶尔冒头,一旦触发就是 token 疯烧、用户白等、接口超时三连。
面试官问这道题,本质上是在考三件事:
-
- 你有没有真实踩过坑——只会背
max_turns的人一说就露馅
- 你有没有真实踩过坑——只会背
-
- 你能不能系统化地解决问题——而不是东补一块西贴一个
-
- 你理解不理解 Agent 的控制流——ReAct 循环的架构细节你真的清楚吗
下面我们拆成 5 个核心问题,逐个击破。
Q1:ReAct 循环的基本架构是什么?生产环境需要做哪些扩展?
基础回答
经典 ReAct 循环遵循 think → act → observe 的节奏,在 LangGraph 中通常表示为:
think → act → should_continue → think → act → ...
should_continue 节点只在步数到达 max_iterations 时终止循环。
加分回答
生产环境必须把简单的 should_continue 升级为复合路由节点 check_and_route,它同时负责步数检查、重复检测、进展检测和超时检测。同时状态结构需要扩展:
class AgentState(TypedDict): messages: list thoughts: list actions: list observations: list iteration: int max_iterations: int # 死循环检测专用 recent_actions: List[Tuple[str, str, str]] # (action, params_hash, obs_hash) action_timestamps: List[float] semantic_history: List[List[float]] # 可选 stalled_counter: int recovery_attempted: bool
面试官关注点:你是否理解原始状态只记录对话流,缺乏检测所需的"元数据"。
recent_actions中记录params_hash和obs_hash而非原始值,既节省内存又方便比对。
💡 小贴士:params_hash / obs_hash 的生成方式建议统一使用:
hashlib.sha256(json.dumps(x, sort_keys=True).encode()).hexdigest()
保证键顺序一致,哈希结果才可靠。
Q2:死循环有哪些典型场景?分别怎么检测?
这是整道题的核心。死循环不是一种病,是一类综合征。至少有四种形态:
场景一:步数爆炸——硬上限与软上限
表现:Agent 一直在执行,远超正常回合数。
对策:设两层阈值——
| 层级 | 触发条件 | 行为 |
|---|---|---|
| 软上限 | iteration ≥ max_iterations × 80% | 在思考中注入提醒:“你已接近最大步数,请尝试总结已有信息” |
| 硬上限 | iteration ≥ max_iterations | 直接终止,返回部分结果 |
为什么需要软上限?实测中发现,很多时候 Agent 只需要一个"催促"就能快速收尾,暴力终止反而浪费已有的推理链路。
场景二:动作复读机——重复动作模式检测
表现:Agent 反复调用同一个工具、传同样的参数、得到同样的结果。
对策:滑动窗口 + 频次统计——
from collections import Counterdef is_repeating(state, window: int = 5, threshold: int = 3) -> bool: recent = state.recent_actions[-window:] if len(recent) < window: return False counter = Counter((a, p) for a, p, _ in recent) return counter.most_common(1)[0][1] >= threshold
维护一个长度为 N 的滑动窗口,统计 (action_name, params_signature) 组合出现次数。超过阈值即判定为重复循环。
BendClaw 引擎的 Doom Loop Detection 就是同类思路——在 Action-Observation 层面比对,在模型继续浪费 token 之前提前打断。
场景三:原地踏步——无进展检测
表现:动作在变,但信息量没增长。
三种检测手段可以组合使用——
-
- 语义相似度:连续 N 步 Observation 相似度 > 0.95,视为无进展
-
- Token 增量:新增 token < 50 且无工具调用,可能停滞
-
- LLM 自评:让模型判断当前推理是否包含新事实
def update_stall(state, obs_similarity: float, sim_threshold: float = 0.95): if obs_similarity >= sim_threshold: state.stalled_counter += 1 else: state.stalled_counter = 0
面试陷阱:有人只比最后一步和前一步,这太敏感了。正确做法是设一个
stalled_counter,连续多步无进展才触发。
场景四:语义绕圈——语义循环检测
表现:动作和结果都在变化,但思考内容在兜圈子—— típico 的"讨论同一问题但用不同措辞"。
对策:每 5 轮让 LLM 自我回顾——
“请分析你的推理轨迹,是否在重复讨论同一问题?如果是,请提出一个不同的子问题或直接给出答案。”
这与 FireAct + Reflexion 的策略一致:在特定轮次强制注入自我反思提示,帮助模型跳出死胡同。
面试加分点:你能区分"动作级重复"和"语义级重复",说明你不仅仅在概念层面理解,而是有实际调试经验。
场景五:挂起不动——超时控制
表现:某个工具调用卡死,或 LLM 推理没有返回。
对策:真实时钟兜底——
- • 单次迭代超时:30s ~ 120s
- • 总运行超时:5min ~ 30min
在 LangGraph 中用 asyncio.wait_for 包装调用,或起监控守护线程。
Q3:检测到死循环后怎么办?暴力终止是最差选择
这是区分"背答案"和"真做过工程"的分水岭。
暴力终止 = 检测了但不恢复 = 只报警不灭火。
生产级 Agent 需要四级优雅降级——
第一级:反思注入(Reflexion)
不终止,切换到反思模式。在下一轮 Thought 前注入:
“你已陷入循环。请回顾之前的步骤,找出无效策略,并尝试完全不同的方法。”
实现上,维护 recovery_attempted 布尔量,触发反思时修改 prompt 并重置 stalled_counter,然后重新进入 think。
FireAct 研究证实,自我反思能显著提高长轨迹的成功率。
第二级:紧凑重试(Compact-and-Retry)
反思无效?压缩上下文重来——
- • 用 LLM 对历史步骤做摘要
- • 保留关键观察,丢弃低价值步骤
- • 将摘要作为新的系统提示注入
BendClaw 的 Tiered Compaction 就是这个思路——模仿人类"整理思绪从头来"。
第三级:部分答案 + 求助
两次恢复都失败,别硬撑。返回已收集的信息,坦白未完成的部分,请用户补充指导。
这比强制失败体面得多,用户也会觉得系统是"聪明地unstuck"而不是"笨死了"。
第四级:交接(Handoff)
多智能体场景下,当前 Agent 可以通过 handoffMap 将任务转交给备用 Agent——它可能有完全不同的策略。
openai-agents-js 的 Handoff 机制就是为这种场景设计的。
面试官会追问:什么时候该反思、什么时候该直接终止?答:看
recovery_attempted标志位——首次触发走反思,二次触发走压缩或终止。这是个状态机思维,不是 if-else 能搞定的。
Q4:如何把这些机制编排成一个完整系统?
上面的问题都在讲"零件",这个问题的本质是:你能不能把零件装配成一辆能跑的车?
核心是一个路由函数 check_and_route:
def check_and_route(state) -> str: # 1. 硬上限 if state.iteration >= state.max_iterations: return "finish" # 2. 重复动作检测 if is_repeating(state, window=4, threshold=3): return "reflect" if not state.recovery_attempted else "compact" # 3. 无进展检测 if state.stalled_counter >= 3: return "reflect" if not state.recovery_attempted else "finish" # 4. 超时检测 if time.time() - state.start_time > state.timeout: return "finish" # 5. 正常路由 if state.thoughts and "FINISH" in state.thoughts[-1]: return "finish" return "act"
四个出口:act(继续)、reflect(反思)、compact(压缩重试)、finish(终止)。
在 LangGraph 中用条件边把这个路由挂到 think 节点后——
think → check_and_route → act → think(循环) → reflect → think(反思后重试) → compact → think(压缩后重试) → finish(终止返回)
几个关键设计点:
- •
reflect节点不执行工具调用,只修改 system prompt 并重置计数器 - •
compact节点调用 LLM 摘要历史,裁剪 messages 到最近三轮,添加摘要,设置recovery_attempted = True - • 所有检测指标的更新集中在
check_and_route内部,推理节点保持纯净
面试官会追:为什么不让每个节点自己更新检测指标?答:职责分离——路由逻辑和数据更新放一起方便调试,推理节点只管推理,Trace 更清晰。
Q5:业界有哪些成熟方案可以参考?
面试中能引用具体项目名,比泛泛而谈强十倍。
| 机制 | 来源 | 关键特点 |
|---|---|---|
| 硬上限 | LangChain 文档 | maxTurns / max_iterations,最基础的保护 |
| 重复检测 | BendClaw Doom Loop Detection | 滑动窗口对比 Action-Observation 对 |
| 语义反思 | FireAct + Reflexion | 第 6、10 轮插入反思提示 |
| 上下文压缩 | BendClaw Tiered Compaction | 层级压缩后重试推理 |
| 进展评分 | 业界实践 | LLM 每步判断是否有新信息 |
| 交接控制 | openai-agents-js | handoffMap 转交其他 Agent |
⚠️ 关键结论:没有银弹。 这些机制需要根据任务特征组合使用、调优阈值。
附录:参数速查表
面试中能随口报出这些数字,说明你真上过手。
| 参数 | 推荐值 | 备注 |
|---|---|---|
max_iterations | 25 ~ 50 | 任务复杂度高时适当放宽 |
| 警告阈值 | max_iterations × 0.8 | 软提醒,不强制终止 |
| 重复检测窗口 | 4 ~ 6 步 | 太短误报,太长迟钝 |
| 重复阈值 | 3 ~ 4 次 | 窗口内相同动作出现次数 |
| 无进展步数 | ≥ 3 | stalled_counter 触发值 |
| 语义相似度阈值 | 0.90 ~ 0.95 | 越低越敏感 |
| 单次超时 | 30s ~ 120s | 取决于工具响应时间 |
| 总超时 | 5min ~ 30min | 取决于任务规模 |
两个差异化要点一定记住:
- • 模型差异:强模型(GPT-4 级别)可放宽阈值;开源 / 小模型建议更严格的检测与更频繁的反思
- • 任务差异:信息检索类更关注"无进展";规划执行类更关注"重复动作"
0 AI行业迎来前所未有的爆发式增长:从DeepSeek百万年薪招聘AI研究员,到百度、阿里、腾讯等大厂疯狂布局AI Agent,再到国家政策大力扶持数字经济和AI人才培养,所有信号都在告诉我们:AI的黄金十年,真的来了!
在行业火爆之下,AI人才争夺战也日趋白热化,其就业前景一片蓝海!
我给大家准备了一份全套的《AI大模型零基础入门+进阶学习资源包》,包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。😝有需要的小伙伴,可以VX扫描下方二维码免费领取🆓

人才缺口巨大
人力资源社会保障部有关报告显示,据测算,当前,****我国人工智能人才缺口超过500万,****供求比例达1∶10。脉脉最新数据也显示:AI新发岗位量较去年初暴增29倍,超1000家AI企业释放7.2万+岗位……
单拿今年的秋招来说,各互联网大厂释放出来的招聘信息中,我们就能感受到AI浪潮,比如百度90%的技术岗都与AI相关!

就业薪资超高
在旺盛的市场需求下,AI岗位不仅招聘量大,薪资待遇更是“一骑绝尘”。企业为抢AI核心人才,薪资给的非常慷慨,过去一年,懂AI的人才普遍涨薪40%+!
脉脉高聘发布的《2025年度人才迁徙报告》显示,在2025年1月-10月的高薪岗位Top20排行中,AI相关岗位占了绝大多数,并且平均薪资月薪都超过6w!
在去年的秋招中,小红书给算法相关岗位的薪资为50k起,字节开出228万元的超高年薪,据《2025年秋季校园招聘白皮书》,AI算法类平均年薪达36.9万,遥遥领先其他行业!

总结来说,当前人工智能岗位需求多,薪资高,前景好。在职场里,选对赛道就能赢在起跑线。抓住AI风口,轻松实现高薪就业!
但现实却是,仍有很多同学不知道如何抓住AI机遇,会遇到很多就业难题,比如:
❌ 技术过时:只会CRUD的开发者,在AI浪潮中沦为“职场裸奔者”;
❌ 薪资停滞:初级岗位内卷到白菜价,传统开发3年经验薪资涨幅不足15%;
❌ 转型无门:想学AI却找不到系统路径,83%自学党中途放弃。
他们的就业难题解决问题的关键在于:不仅要选对赛道,更要跟对老师!
我给大家准备了一份全套的《AI大模型零基础入门+进阶学习资源包》,包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。😝有需要的小伙伴,可以VX扫描下方二维码免费领取🆓

更多推荐



所有评论(0)