日报:模型端调试与 OpenHands 架构迁移 — 2026年2月13日
一、今日重点:模型端调试与架构迁移
今天主要集中在模型端测试与 OpenHands 架构重构。
在模型端方面,我重新配置了 Tool 加载逻辑,并与服务器评测端设置完成对齐,最终成功跑通完整流程。在当前配置下确认:
ToolCall 是必须启用的。
同时发现原使用的 OpenHands V1.0.0 架构存在结构性问题,不适合作为稳定评测基线,因此决定迁移至更稳定版本。
二、问题排查与修复
1. 工作流与旧文件整理
- 清理历史遗留脚本
- 整理旧版流程配置
- 重构当前主流程结构
2. 卡死与 Timeout 问题修复
问题表现:
- 推理阶段长时间卡死
- Timeout 后未正确释放
修复措施:
- 启用流式输出(stream=True)
效果:
- 卡死问题明显改善
3. 评测端输出上限问题
发现评测端未设置最大输出限制,导致:
- Token 堆积
- 运行速度下降
- 处理效率极低
后续需增加:
- 最大生成 token 限制
- 输出截断保护
4. Patch 匹配问题
在 SWE-bench Verified 评测中发现:
- Patch 格式不匹配
- ToolCall 格式异常导致解析失败
结论:
工具调用格式对 OpenHands 行为影响显著。
三、native_tool_calling 配置建议
对于 Qwen2.5-Coder-7B-Instruct + OpenHands + SWE-bench Verified:
建议显式设置:
native_tool_calling: true
原因:
- 避免自动启发式判断(默认 None 不稳定)
- 使用结构化工具格式
- 提升模型工具调用稳定性
- Qwen 系列支持原生工具调用
四、版本选择:迁移至 OpenHands v0.54.0
选择原因:
- 数据生成版本为 v0.54.0
- 固定评测版本保证一致性
- v0.55.0 引入 security_risk 参数,增加复杂度
关键评测配置:
enable_history_truncation = false
enable_default_condenser = true
condenser.type = noop
enable_condensation_request = false
五、架构迁移完成
架构对比
| 项目 | 原始 | 新版 v0.54.0 |
|---|---|---|
| 包管理 | uv | poetry |
| 推理方式 | swebench-infer | run_infer.sh |
| Docker | 手动 build | 自动 per-instance |
| LLM 配置 | json | config.toml |
| 评测 | swebench-eval | eval_infer.sh |
六、当前进展
✅ 架构迁移完成
✅ ToolCall 流程跑通
✅ 推理与评测链路打通
明日计划
在新架构中完整测试原始流程,验证是否能够稳定跑通 SWE-bench Verified 评测。