实验说明 / 2026-07-10
Blade COA:BA + qwen + COA 严格大模型链路复核记录
本说明记录从“0.8 秒无效结果”到最终真实通过 5 分钟验收的全过程,包括失败原因、修复策略、最终验证证据和代码改动。
最终 auto-run
AUTO-20260710005412-27F209
BA 工具耗时
162s
COA 服务端耗时
156.5s
完成范围
F-1 到 F-7
一、为什么要重做实验
0.8 秒结果无效
用户质疑“0.8 秒不可能调用大模型”是正确的。日志复核后确认,先前结果存在连接拒绝、跳过或回退路径,不能证明 BA、qwen 和 COA 严格大模型链路真实运行。
验收标准重新明确
必须由 BA 发起,BA 使用 qwen,COA 使用 COA_REQUIRE_LLM=1,不能 fallback 或兜底,F-1 到 F-7 必须在 5 分钟内真实完成。
二、实验过程时间线
| 阶段 | 时间 / ID | 结果 | 关键发现 |
|---|---|---|---|
| 无效快跑 | 0.8 秒记录 | 作废 | 没有真实完成大模型链路,不能用于验收。 |
| 首次真实 BA + qwen | 2026-0710-0025-lq4c7yrgAUTO-20260710002658-DA9338 |
未通过 | BA 和 qwen 确实被调用,但超过 5 分钟;且发现 coa_candidate_builder 有评分失败后“兜底均分”的隐藏回退。 |
| 严格模式补强后重跑 | 2026-0710-0043-odubbx8lAUTO-20260710004412-775B5F |
未通过 | COA 在 113 秒左右停在 F6,错误为 LLM 评分缺失或非法: step=s6 coa=A key=score_speed,说明严格模式已生效。 |
| BA 工具环境排障 | 2026-0710-0049-vduygaz32026-0710-0052-djqpydlv |
环境问题 | 发现 BA 的 Bash 工具运行在 sandbox 容器内,不能用默认 host.docker.internal:3200 或 127.0.0.1:3201 访问 COA。 |
| 最终有效验收 | 2026-0710-0053-pblbncqtAUTO-20260710005412-27F209 |
通过 | BA 使用 sandbox 可达地址 http://[内网地址已隐藏]:3201,F-1 到 F-7 完成,BA 工具输出 RUN_DONE elapsed_sec=162。 |
三、关键改进
- qwen 输出稳定性:在 OpenAI-compatible 请求里对 qwen 默认加入
chat_template_kwargs.enable_thinking=false,减少思考内容干扰 JSON。 - JSON 输出约束:统一追加紧凑 JSON 后缀,要求不要解释、不要 markdown、中文叙述字段只写短句。
- 候选评分覆盖:为每个 COA option 增加
option_key,要求 LLM 原样逐项返回完整评分。 - 严格校验:评分解析会检查所有 expected option 是否覆盖、分值是否为 0~1;失败只允许再发起一次 LLM 修正,不补默认分。
- 禁止吞错:
COA_REQUIRE_LLM=1时,fires_plan_auto_service不再吞掉build_coa_candidates的异常。 - BA 网络修正:确认 BA 工具 sandbox 通过 Docker bridge 网关
[内网地址已隐藏]:3201访问 COA 服务。
四、最终验证证据
BA 会话:2026-0710-0053-pblbncqt
BA 工具:会话历史显示只有一次 Bash 工具调用,exit_code=0。
BA 模型:首轮 qwen 生成 Bash 工具调用,usage 为 prompt_tokens=4879、completion_tokens=626。
COA 状态:status=completed,last_step=f7_decision,last_error_code=null。
服务端耗时:2026-07-10T00:54:12.561Z 到 2026-07-10T00:56:49.038Z。
完成步骤:f1_receive、f2_analyze、f3_threat_intel、f4_weaponeer、f5_plan、f6_wargame、f7_decision。
无回退:COA 日志未出现 fallback 或“兜底”;一次 JSON parse retry 属于 LLM JSON 解析重试,不是使用兜底结果。
五、最终代码改动
backend/services/llm_client.py
新增环境布尔解析、qwen 默认关闭 thinking、紧凑 JSON 输出约束,降低 qwen 输出非 JSON 或超长叙述概率。
backend/services/coa_candidate_builder.py
新增 option_key、完整覆盖校验、0~1 分值校验和一次 LLM 重试;严格模式下缺项直接失败。
backend/services/fires_plan_auto_service.py
在 COA_REQUIRE_LLM=1 时不再忽略候选评分构建异常,避免 F-step 被误标成功。
相关提交
fdcf7c23 修复 COA 严格模型评分链路
9ebe593c 强化 COA 严格大模型路径
b2904bf3 收敛 P0 快速规划默认边界
六、仍需注意的边界
- BA Socket 外层
chat:end曾显示status=failed,但会话历史里的 Bash 工具exit_code=0且submit_result成功;这更像 headless/terminal_tool 包装状态误标,后续可单独排查。 - BA sandbox 到 COA 的地址不能写死为
127.0.0.1;当前实验证明[内网地址已隐藏]:3201可达,但产品化应通过配置注入。 - 本次 COA SQLite seed 表仍有
updated_at列缺失的 skip 日志,不影响 F-1 到 F-7 完成,但迁移脚本应后续补齐。