MiMo 模型循环退化(Degenerate Loop)的检测与防护工具集。
在使用 xiaomimimo/mimo-v2.5-pro 模型时,当 reasoning=True 时,模型有约 30% 的概率进入退化循环状态:
- 症状:同一段输出重复 8 次,持续约 6 分钟
- 语言切换:从中文输出切换为英文,且无视 System Prompt 中的中文指令
- 功能停滞:不执行任何工具调用,仅重复输出文本
- 根因:
reasoning=True激活的英文推理路径导致 token 概率分布塌缩
在 OpenClaw 配置中设置硬性超时和 Token 限制:
providers:
- id: xiaomimimo/mimo-v2.5-pro
timeoutSeconds: 180 # 3 分钟硬性超时
maxTokens: 8000 # 限制单次输出长度实际效果:即使模型进入循环,也会在 3 分钟内强制终止,防止资源浪费。
运行 scripts/detect_loop.py 实时监控模型输出,检测连续重复。
# 从日志文件检测
python3 scripts/detect_loop.py --log logs/sample_degenerate_loop.log
# 管道模式(实时监控)
model_output 2>&1 | python3 scripts/detect_loop.py
# JSON 输出(集成到监控系统)
python3 scripts/detect_loop.py --json --log logs/sample_degenerate_loop.log检测规则:
- 连续 3+ 次输出块完全相同(相似度 ≥ 95%)
- 连续 3+ 次工具调用参数完全相同
- 持续时间超过 180 秒
在 AGENTS.md 中加入检测规则,让模型自身具备循环感知能力。详见 SKILL.md。
logs/sample_degenerate_loop.log — 一个真实的退化循环日志样本:
- Block 1-2: 中文输出,正常
- Block 3-11: 英文输出,完全相同的文本重复 8 次
- 持续时间:约 6 分钟
frequency_penalty=1.0和temperature=0.7已启用但无效
logs/fixed_normal_run.log — 修复后的正常运行日志:
- 3 次不同的工具调用
- 中文输出保持一致
- 42 秒内完成
- 无任何循环迹象
| 修复方法 | 效果 |
|---|---|
frequency_penalty=1.0 |
❌ 无效 |
temperature 调高至 1.0 |
❌ 无效 |
| System Prompt 强制中文 | ❌ 模型切换为英文 |
| 上下文压缩(减少输入 tokens) | ❌ 无效 |
| 修复方法 | 效果 | 原理 |
|---|---|---|
timeoutSeconds=180 |
✅ 有效 | 工程侧硬性超时 |
maxTokens=8000 |
✅ 有效 | 限制单次输出长度 |
| 行为层检测 | ✅ 有效 | 提前终止循环 |
mimo-stable/
├── README.md # 本文档
├── SKILL.md # OpenClaw 技能定义
├── CHANGELOG.md # 版本记录
├── scripts/
│ ├── detect_loop.py # 循环检测脚本(Python)
│ ├── test_short.sh # 短测试(10 文件 + 语法检查)
│ └── test_long.sh # 长测试(大文件 + 多检查点)
├── logs/
│ ├── sample_degenerate_loop.log # 退化循环日志样本
│ └── fixed_normal_run.log # 修复后正常日志样本
└── references/
└── parameters.md # 参数参考
# 运行短测试
bash scripts/test_short.sh
# 运行长测试
bash scripts/test_long.sh
# 对日志样本运行循环检测
python3 scripts/detect_loop.py --log logs/sample_degenerate_loop.log
# 预期输出: LOOP_DETECTED
python3 scripts/detect_loop.py --log logs/fixed_normal_run.log
# 预期输出: NO LOOPMIT