Blade COA 最小部署决策记录

目标是在不降低演示质量的前提下,把当前多服务 COA 演示收敛为更小、更可交付的部署形态。

日期:2026-07-10 Repo:blade-coa 结论类型:架构决策 / 交付 handoff

最新复核:真实 BA + qwen 链路已通过 5 分钟验收

结论更新: 默认部署形态仍应收敛为 BA + COA。先前记录的 0.8 秒 不能作为验收证据,因为当时没有完成真实大模型链路;本次已重新通过 BA Socket.IO chat:send 触发 AOC role,由 qwen3.6-122b-int4 生成 Bash 工具调用, COA 侧在 COA_REQUIRE_LLM=1 下完成 F-1 到 F-7。

当前判定: 通过 BA 工具输出 RUN_DONE elapsed_sec=162;COA 服务记录 AUTO-20260710005412-27F2092026-07-10T00:54:12.561Z2026-07-10T00:56:49.038Z,约 156.5 秒,低于 5 分钟。 最终 status=completedlast_step=f7_decisionlast_error_code=null

目标形态: P0 路径通过本地 solution 的 AOC 单角色和 auto_plan_full 单技能触发,COA backend 负责 F-1 到 F-7 状态推进、SQLite 写入、 3D artifact 与 quick-blast 兼容 API。默认不再暴露旧 model-registry:8050、 MySQL-only、旧 GIS、mss-studio、guacamole、stand-trans-viewer 或 replay 工具作为用户路径。

代码落点: 分支 ly/nzh-fix。在原 b2904bf3 基础上,本次补充了 COA 严格 LLM 模式: fires_core_generatormission_aux_generatorcoa_strategy_enginefires_plan_auto_servicecoa_candidate_builderCOA_REQUIRE_LLM=1 时不再静默跳过或回退。 同时对 qwen OpenAI-compatible 请求默认关闭 thinking,并强制候选评分逐项覆盖所有 option_key,避免漏评 s6/s8 后被误当作成功。

复核验证

  • 默认 compose 服务:blade-agentcoa-service
  • BA 健康检查:{"status":"ok"};BA 容器已改用有效 qwen 网关凭证。
  • BA Socket.IO:session:subscribe 返回 is_running=truechat:send 被接受。
  • BA 模型证据:会话历史中两轮 assistant 均有 token usage;首轮生成唯一 Bash 工具调用,次轮提交结果。
  • COA 模型证据:日志含多条 [llm-usage] model=qwen3.6-122b-int4,候选评分也由 qwen 输出。
  • 严格模式证据:本次日志未出现 fallback 或“兜底”;仅有一次 JSON parse retry,未使用补分或回退结果。
  • 3D artifact:/api/v1/artifacts/stand_trans/scn_persian_targeting_demo/persian_targeting_demo.glb 返回 200 OKcontent-type: model/gltf-binary
  • 可见 solution/docs 扫描:无旧 8050model-registry、MySQL、旧 GIS、guacamole、stand-trans-viewer、pending/deleted/stub 用户指令。

P0 快速规划复核

  • 触发方式:BA 会话 2026-0710-0053-pblbncqt 通过 Socket.IO chat:send 触发 AOC role。
  • COA auto-run:AUTO-20260710005412-27F209mode=fast
  • BA 工具输出:RUN_START_UTC=2026-07-10T00:54:12ZRUN_DONE elapsed_sec=162
  • COA 服务耗时:00:54:12.561Z00:56:49.038Z,约 156.5s
  • 完成步骤:f1_receivef2_analyzef3_threat_intelf4_weaponeerf5_planf6_wargamef7_decision
验收项 结果 证据
F-1~F-7 数据闭环 通过 真实 BA + qwen + COA 严格路径已完成;BA 工具耗时 162s, COA auto-run 服务端耗时约 156.5s
无回退严格模式 通过 COA_REQUIRE_LLM=1 已覆盖 F-1~F-7 生成、COA 策略生成、auto-run 捕获分支和 coa_candidate_builder 评分。本次完成日志未出现 fallback 或“兜底”。
reset 可重复演示 通过 POST /api/v1/system/reset-with-seed 返回 fires_plan_count=12force_assignment_count=12mode=sqlite_demo_seed_reset;reset 后 inbox 首条回到 FP-V6-EW-001
外部依赖边界 通过 默认 route/EW 小模型与外部 GIS 同步仅在显式设置 MODEL_REGISTRY_URL / GIS_SERVER_URL 时启用; 默认 P0 不再尝试连接这些历史服务。

保留说明: 先前 0.8 秒 记录应视为无效证据,不应再用于验收或对外汇报。 当前有效验收记录是 2026-0710-0053-pblbncqt / AUTO-20260710005412-27F209,满足 BA 使用 qwen、COA 严格 LLM 无回退、 F-1 到 F-7 在 5 分钟内完成、auto-run 终态正确落为 completed。

零、P0 任务计划与完成标准

硬目标: 在 BA 已部署好的前提下,只开发 solutionbackendfrontend。 默认只启动 BA + COA,用户在 F-0 选择 FP-V6-STRIKE-001, 点击“创建规划”,在右侧对话输入“快速规划”, qwen 3.6 122b int4 能稳定触发 F-1 到 F-7 全流程, 5 分钟内跑通,并且演示效果不低于当前版本。

一把搞定的任务计划

  1. Solution 收敛: 保留 P0 演示路径需要的 BizRoles 和 skills;删除旧 model-registry:8050、 MySQL-only、旧 GIS 服务、pending/stub/deleted command 等用户可见指令。
  2. 自动规划入口: 建立一个薄 skill 作为“快速规划”入口。模型只识别意图并调用自动规划工具, 不负责生成大 JSON plan,也不逐字段构造 F-1 到 F-7 数据。
  3. Backend 确定性推进: COA backend 负责 F-1 到 F-7 的状态推进、SQLite 写入、artifact 生成、 quick-blast、地图/军标/3D 资源服务。
  4. 本地模型/算法包: route、force assignment、weaponeering、EW plan 等能力以本地 Python 包或 MCP stdio 工具提供, Agent 路径和前端按钮路径复用同一套实现。
  5. Frontend 同源化: 前端默认只访问 BA 和 COA backend;F-0 到 F-7 的阶段状态、卡片、地图、军标、3D/仿真、 毁伤结果逐项刷新展示。
  6. SQLite 演示数据: 使用 golden SQLite 或 seed script;支持一键 reset;reset 后同一条 P0 路径可重复演示。
  7. 端到端验收: 用浏览器实测:导入任务包、选择 FP-V6-STRIKE-001、点击创建规划、输入“快速规划”, 5 分钟内完成 F-1 到 F-7,并保留截图或录屏作为验收证据。

完成标准

类别 必须满足的标准
用户路径 用户只需要导入任务包到 F-0、选择 FP-V6-STRIKE-001、点击“创建规划”、 输入“快速规划”;后续 F-1 到 F-7 自动完成。
时间目标 从用户发出“快速规划”到 F-7 完成,完整链路不超过 5 分钟; 5 秒内应出现可见进度反馈,期间每个阶段有状态更新。
模型边界 qwen 3.6 122b int4 只负责意图识别、流程选择和结果解释; 数据生成、状态推进、路径/毁伤/军标/仿真计算由工具和 backend 确定性完成。
依赖边界 默认演示不依赖 MySQL、model-registrygis-servermss-studioguacamolestand-trans-viewer
数据正确性 F-1 到 F-7 每阶段都有明确状态、关键业务数据写入 SQLite,刷新页面后结果仍可恢复。
演示质量 地图底图、目标、航线、态势 overlay、军标、3D/仿真、quick-blast 或等价毁伤展示不降级。
失败定位 失败时能明确显示卡在 F-几、哪个工具/API、哪个数据项;不能表现为对话长时间无响应。
可重复演示 一条命令能 reset demo 数据;reset 后同一条 P0 链路可再次在 5 分钟内跑通。

一、最终目标

部署态目标: 一个 Blade Agent 容器 + 一个 coa 容器。coa 容器内包含后端、前端静态产物、 SQLite demo DB、演示资产、地图/军标资产、轻模型本地包和必要的交互仿真 API。

开发态

BA 容器 + COA 前端 + COA 后端

便于前端热更新、后端调试、BA 会话联调。

部署态

BA 容器 + COA 单容器

COA 单容器 serve SPA,同时提供 API、SQLite、assets、quick-blast、地图和军标能力。

二、已确认的关键结论

  1. BA 使用新版临时 solution / 本地 solution 能力。 不再把 blade-hub 作为 COA 演示默认依赖;BA 启动后必须能直接看到 blade_coa solution 和对应 BizRoles。
  2. SQLite 作为 demo 数据库。 随镜像携带预灌好的 golden SQLite DB;运行时复制到 writable 目录。reset 直接恢复 golden DB, 不再跑 MySQL baseline、migration 或 MySQL seed SQL。
  3. 轻模型不通过 model-registry 服务。 抽成本地 Python 包。Agent 通过 MCP stdio 直接调用;前端按钮路径由 COA backend import 同一包。
  4. 3D 演示保留质量,但不保留 model-registry 默认服务。 GLB、voxelclass、litematic 等作为 artifacts 随 COA 分发;quick-blast API 收进 COA backend。
  5. GIS 和军标能力合并进 COA。 演示需要的是地图视觉、瓦片、overlay 和有限集合军标,不需要默认起 gis-server + mss-studio 两个服务。
  6. stand-trans-viewer 不进入默认部署。 它是独立 3D 工具页,除非存在 COA 内嵌 viewer 无法替代的刚性演示点,否则只保留为开发/高级 profile。

三、服务去留矩阵

组件 当前职责 决策 迁移后承载方式
blade-agent Agent 引擎、ChatView、session、solution/BizRole、sandbox。 保留 默认一个 BA 容器;启用 demo/mock/off 配置,避免依赖 blade-hub/oauth/license/ASR/BladeOS。
coa-service 业务后端、REST、CLI RPC、前端静态文件。 保留并扩展 部署态单一 coa 容器:API + SPA + SQLite + assets + quick-blast + map/symbol。
frontend-jp COA 前端、Agent Kit、F0-F6/F7、3D viewer、地图页面。 部署态并入 开发态独立跑;部署态 Vite build 由 coa-service serve。
mysql 业务数据库。 移出默认 用 golden SQLite DB 替代;reset = 复制 golden DB。
model-registry 小模型注册、HTTP invoke、日志、MCP facade、docker runtime、artifacts。 移出默认 轻模型进入本地 Python 包;3D artifacts/quick-blast 进入 COA;重建模能力保留 optional profile。
mr-seed 启动时为 model-registry 生成/播种 3D demo 场景。 删除默认 预烘焙 artifacts 随镜像或 solution 分发。
blade-hub 技能/资源注册中心、Gitea/BM25 相关。 移出默认 使用 BA 新版临时 solution / 本地 solution 上传能力。
gis-server GIS console、瓦片、overlay、PostGIS/Redis all-in-one。 合并/可选 演示所需瓦片和 overlay API 收进 COA;完整 GIS console 作为高级 profile。
mss-studio NATO/GJB/俄标军标 SVG 渲染及 Studio。 合并/可选 有限 SIDC 集合预渲染为 SVG/PNG sprite,由 COA 静态托管。
stand-trans-viewer 独立 7320 Three.js 建筑/爆炸工具页。 默认不启 COA 内嵌 BuildingViewer 承担演示;独立 viewer 仅作调试/高级工具。
guacamole AFSIM/远程桌面 iframe 投屏。 默认不启 默认演示使用 seeded/mock 推演结果;真实 AFSIM 投屏作为外部集成 profile。

四、目标调用链

Agent 路径

BA Agent理解用户意图,选择 skill / MCP tool。
MCP stdio直接调用轻模型 Python 包。
fires-cli采纳模型结果,走业务命令。
COA Backend写 SQLite,发事件,更新状态。
COA Frontend局部刷新,展示结果。

前端按钮路径

COA Frontend用户点击“一键推荐/推演”。
COA Backend接收业务请求。
本地模型包backend import 同一套轻模型。
SQLite落库、audit、event。
UI展示推荐、地图、3D、毁伤。
边界原则: 模型计算可以绕开 COA Backend;业务采纳、写库、审计、事件和前端刷新仍必须经过 COA Backend。

五、数据与资产策略

SQLite

  • 构建时生成或拷贝 coa_demo.sqlite
  • 启动时复制到 runtime path,如 /app/data/coa.sqlite
  • reset 时覆盖 runtime DB,不执行 MySQL-only SQL。
  • 用完即扔,部署和演示一致。

3D / 地图 / 军标 assets

  • GLB、voxelclass、litematic 作为 artifacts 分发。
  • 瓦片 bundle 作为静态资源分发。
  • 军标按 demo SIDC 集合预渲染。
  • COA backend 统一提供 URL,前端不再直连 :8050:7800:8090

六、实施分解

  1. BA demo 启动确认。 验证新版 BA 能用临时/local solution 加载 blade_coa,并能创建 session、列 BizRoles、启动 ChatView。
  2. SQLite golden DB。 生成可演示的 coa_demo.sqlite,改启动路径绕开 MySQL autoupgrade;reset 改为复制 golden DB。
  3. 轻模型本地包。model-registry/bundled_models 抽出 coa_models,提供 Python API 和 MCP stdio server。
  4. 前端按钮兼容。 后端 import coa_models 支撑非 Agent 场景;业务写路径不变。
  5. 3D artifacts 与 quick-blast 迁入 COA。 静态 artifact 路由和 quick-blast API 进入 coa-service;前端改为相对 URL。
  6. GIS/军标内聚。 将演示所需瓦片、军标 sprite、overlay 数据服务收进 COA,隐藏外部 GIS console 依赖。
  7. compose/profile 整理。 默认只启 BA + COA;model-registry、gis-server、mss-studio、guacamole、stand-trans-viewer 进入 optional profiles。

七、演示质量验收清单

验收项 通过标准
BA 会话 前端能看到 blade_coa BizRoles;能创建会话;ChatView 能发送消息并触发 skill。
核心业务流 Agent 路径和前端按钮路径都能推进 COA 主流程,SQLite 写入和事件刷新正常。
轻模型 MCP stdio 可直接返回 route / force-assign / weaponeer / ew-plan 结果;前端按钮结果一致。
3D 建筑 GLB、voxelclass、litematic 正常加载;结构着色、剖切、毁伤可视化不降级。
quick-blast 交互投弹亚秒级或可接受延迟返回;连投、累积毁伤、坍塌动画正常。
地图与军标 地图底图、目标、航线、态势 overlay、军标视觉效果与现有演示等价。
reset 一键恢复初始 demo 数据;不会依赖 MySQL、不会执行 MySQL-only SQL。
部署规模 部署态默认只需要 BA 容器 + COA 容器;其余服务均非默认依赖。

八、Skill 复杂度评估

结论:当前 solutions/blade_coa/skills 明显偏复杂。复杂点不是 COA 业务本身, 而是 SKILL.md 同时承担了任务入口、操作手册、架构历史、服务依赖说明、 Doctrine 资料、GIS 模板、禁止事项和待办记录,容易降低 Agent 选 skill 与执行 skill 的稳定性。

现场代码观察

观察项 结论 影响
Skill 规模 38SKILL.md,合计约 8794 行;最长的超过 500 行。 Agent 每次加载上下文过重,任务选择和执行更容易漂移。
重复 shared 内容 forbid_direct_db_access.md19 份, gis_interaction_template.md9 份, preflight_block.md12 份。 大量 token 用在重复约束上,而不是当前任务逻辑。
Role 可见范围 enter_planning_sessionresume_oplanview_planning_overview 等基础 skill 挂到多个角色; AOC 能看到大量 leaf skills。 用户和 Agent 都会面临选择负担,容易选到过细或过旧的入口。
过期服务引用 仍有 skill 指向 model-registry:8050、旧 GIS 交互、pending CLI 能力、 已删除或待清理命令。 与“BA + COA 最小部署、本地 MCP stdio 模型包”的目标冲突。

保留什么,砍掉什么

建议的目标 skill 集

目标 skill 职责
enter_or_resume_planning 合并进入会话、恢复 OPLAN、查看 planning overview。
auto_plan_full 一键跑通主流程;只描述输入、工具调用、轮询状态和验收输出。
target_workflow 覆盖目标 vet、JIPTL priority、weaponeering、CDE 等目标链路。
force_and_mission 覆盖 force assignment、route、mission planning。
ew_planning 保留 EW 独立流程,但调用本地 MCP/模型包而不是 model-registry 服务。
publish_and_assess 覆盖 ATO 发布、BDA、JTF assessment、FRAGORD 等后段动作。
wing_brief_workflow 服务 F0-F7/wing brief 演示链路。
simulation_replay 加载 3D/GIS/quick-blast artifacts,做演示回放与结果解释。

推荐标准:普通 skill 控制在 60-120 行;编排型 skill 控制在 150 行以内。 每个 skill 只保留“何时使用、必要输入、调用哪个工具、如何校验、何时停止”。 领域长文档与 doctrine 资料按需引用,不默认灌入 Agent 上下文。

九、仍需验证的风险点

十、推荐最终形态

开发态:blade-agent + coa-frontend + coa-backend

部署态:blade-agent + coa

其中 coa 包含 SPA、API、SQLite、静态演示资产、本地轻模型、MCP-compatible 模型包、 quick-blast、地图/军标资源。其他服务全部降级为 optional profile。