幻觉治理与行为约束
Q:你会如何限制 Agent 的思考深度、工具调用次数和递归层级,避免无限循环?
来源:Agent 开发面试 30 题【百度大模型研发二面追问:工具失败后如何避免无限重复调用】
新手答:“设一个最大步数上限就行。”
高手答:
硬上限是必须的,但只有硬上限是不够的——Agent 可能在第 14 步就已经开始做无用功了,等到第 15 步上限才断,浪费了一半的 token 预算。
需要三层限制机制:
第一层:硬性上限(兜底)
全局步数上限:15 步(超过直接终止,输出当前最优结果)
单工具连续调用上限:同一工具连续失败 2 次,禁用该工具
递归深度上限:子 Agent 嵌套不超过 3 层
单任务 token 预算:超过阈值自动降级或终止第二层:行为检测(及早发现)
硬上限只在最后一刻触发,更好的做法是实时检测无效行为模式:
- 重复检测:最近 3 步的 action 和参数高度相似 → 陷入循环,强制换策略
- 进度检测:连续 N 步没有产生新的有效信息(没有新的工具返回、没有新的用户确认)→ 触发反思或终止
- 目标漂移检测:当前动作和原始目标的相关性低于阈值 → 强制回到主线
第三层:预算感知(主动收敛)
在 System Prompt 中注入当前资源消耗状态,让模型主动收敛:
[系统状态] 已执行 8/15 步,已消耗 token 12000/20000,
已调用工具 5 次。请评估是否有足够信息生成最终答案。模型看到预算紧张时,会倾向于给出当前最优答案而非继续探索。
思维死循环的专项检测与打断:
除了通用的循环限制,Agent 还会陷入一种更隐蔽的问题——思维死循环:模型的 reasoning 在同一个逻辑圈里打转,每步看起来都在“思考”,但没有任何新信息产生。
典型思维死循环:
Step 1: "我需要查用户订单" → 调用查询工具
Step 2: "查到了,但信息不完整,我需要再查一次" → 调用同样的工具,同样的参数
Step 3: "还是不完整,再查一次" → 同上
...检测方法:
- 输出指纹比对:对每步的 action + params 做哈希,连续 2 步哈希相同 → 工具调用死循环
- 推理内容相似度:对每步的 thinking 内容做 embedding,连续 3 步相似度 > 0.9 → 思维死循环
- 信息增益检测:每步执行后检查是否产生了新的、有效的信息(新的工具返回、新的用户输入)。连续 N 步无信息增益 → 强制打断
打断策略:
- 注入反思提示:“你已经重复了相同的操作 N 次,请分析为什么没有进展,并尝试完全不同的方法”
- 强制策略切换:禁用当前正在使用的工具,迫使模型选择其他路径
- 降级输出:如果反思后仍然无法突破,用已有信息生成部分结果并告知用户
差距在哪:新手只想到硬上限——这是最后防线,不是第一道。高手用三层机制(硬上限兜底 + 行为检测及早发现 + 预算感知主动收敛)构建了完整的防循环体系。面试官考的是你有没有处理过 Agent 失控的实战经验。
Q:幻觉的各种治理手段,优缺点分别是什么?行为限制在什么阶段做?
来源:蚂蚁集团智能体与大模型应用一面
新手答:“RAG 最好用,其他的都是辅助。”
高手答:
幻觉治理没有银弹,每种手段都有明确的适用场景和代价:
| 治理手段 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Prompt 约束 | 零成本、即时生效 | 最弱防线,模型可能忽略 | 所有场景的基础层 |
| RAG 注入事实 | 知识可更新、有据可查 | 依赖检索质量,噪声文档反而诱发幻觉 | 知识密集型问答 |
| Structured Output | 格式可控、减少自由发挥 | 限制了表达灵活性 | 需要结构化输出的场景 |
| 引用溯源 | 可追溯、建立信任 | 模型可能伪造引用 | 需要可验证的场景 |
| 事实校验(后置模型) | 精度高、能抓细节错误 | 成本翻倍、增加延迟 | 高风险场景(金融/医疗) |
| 一致性检测(多次采样) | 能识别低置信度回答 | 成本 ×N、延迟 ×N | 关键决策节点 |
| SFT/RLHF 对齐训练 | 从根源降低幻觉倾向 | 需要大量标注数据、训练成本高 | 有自研模型能力的团队 |
行为限制(Behavioral Constraints)在什么阶段做:
行为限制的目标是让模型知道什么不该做——不该编造、不该超出知识范围、不该执行危险操作。这不是单一阶段的事,而是贯穿全链路:
- 训练阶段的行为限制效果最深但成本最高——通过 RLHF 让模型内化“不知道就说不知道”的行为模式
- 部署阶段的行为限制最灵活——改 System Prompt 就能调整约束,不需要重新训练
- 运行时的行为限制最可靠——不依赖模型是否“听话”,用代码硬拦
工程实践中,三个阶段必须叠加使用。只靠训练阶段的对齐不够(模型仍会在分布外输入上幻觉),只靠运行时校验又太贵。最佳实践是:训练给底线、Prompt 给约束、运行时兜底。
差距在哪:新手觉得 RAG 就够了。高手逐一分析了七种治理手段的优缺点和适用场景,且把行为限制按训练/部署/运行时三个阶段展开,说明了为什么必须叠加使用。面试官考的是你对幻觉治理的全面认知——不是背手段清单,而是理解每种手段的边界和组合策略。
Q:如果 Agent 在中间步骤已经偏了,但表面上还能继续执行,你怎么尽早发现?
来源:Agent 开发面试 30 题
新手答:“看最终结果对不对。”
高手答:
等到最终结果才发现偏了,意味着前面所有步骤的 token 和时间都浪费了。越早发现偏离,成本越低。
检测 Agent 中途偏离的三种方法:
1. 目标锚定检查(每 N 步做一次):
每执行 3-5 步,插入一个“自检节点”——用一个轻量 Prompt 让模型回答:“当前执行的内容和原始目标是否一致?”
[自检 Prompt]
原始目标:帮用户找到北京周末亲子游的方案
当前正在做:查询上海的酒店价格
判断:当前动作是否在朝原始目标推进?如果偏离,应该回到哪一步?成本很低(一次轻量模型调用),但能在偏离的早期就发现。
2. 输出模式异常检测(实时):
- 工具选择异常:规划的是“查航班 → 查酒店 → 给方案”,实际执行到第二步突然去查天气 → 工具选择偏离预期
- 参数漂移:前面一直在查北京的信息,突然参数变成了上海 → 关键参数发生了非用户驱动的变化
- 输出冗余:连续两步的输出内容高度重复 → 可能陷入了无效循环
3. 关键里程碑校验(阶段性):
把任务拆成几个关键里程碑,每个里程碑有明确的“交付物”:
里程碑 1:完成信息收集 → 交付物:至少 3 条有效搜索结果
里程碑 2:完成方案对比 → 交付物:结构化的对比表格
里程碑 3:生成最终方案 → 交付物:包含时间/地点/费用的完整方案每个里程碑检查交付物是否符合预期。不符合 → 不继续往下,先修正当前阶段。
差距在哪:新手只看最终结果——这是最贵的检测方式。高手在执行过程中植入了三层检测(目标锚定、输出模式、里程碑校验),越早发现偏离越省成本。面试官考的是你对 Agent 过程监控的工程化思维。