为什么这道题频繁出现?

Agent 死循环是 LLM 工程中最常见、也最致命的生产问题之一。它不像模型幻觉那样偶尔冒头,一旦触发就是 token 疯烧、用户白等、接口超时三连。

面试官问这道题,本质上是在考三件事:

    1. 你有没有真实踩过坑——只会背 max_turns 的人一说就露馅
    1. 你能不能系统化地解决问题——而不是东补一块西贴一个
    1. 你理解不理解 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_hashobs_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 之前提前打断。

场景三:原地踏步——无进展检测

表现:动作在变,但信息量没增长。

三种检测手段可以组合使用——

    1. 语义相似度:连续 N 步 Observation 相似度 > 0.95,视为无进展
    1. Token 增量:新增 token < 50 且无工具调用,可能停滞
    1. 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-jshandoffMap 转交其他 Agent

⚠️ 关键结论:没有银弹。 这些机制需要根据任务特征组合使用、调优阈值。


附录:参数速查表

面试中能随口报出这些数字,说明你真上过手。

参数推荐值备注
max_iterations25 ~ 50任务复杂度高时适当放宽
警告阈值max_iterations × 0.8软提醒,不强制终止
重复检测窗口4 ~ 6 步太短误报,太长迟钝
重复阈值3 ~ 4 次窗口内相同动作出现次数
无进展步数≥ 3stalled_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扫描下方二维码免费领取🆓

在这里插入图片描述

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐