vscode-moa
🌐 Languages / 语言: English | 中文(当前 / Current)
面向 VSCode Copilot Chat 的混合专家智能体(MoA) —— 通过原生 vscode.lm API 编排精简的 5 角色流水线(Planner → Recon → Refs → Aggregator → Actor),让多个 LLM 异构协作。
English: Mixture-of-Agents for VSCode Copilot Chat — orchestrates 5-role pipeline through native vscode.lm API. See README.en.md.

⚠️ 默认 Autopilot 模式(v0.21.3+) —— 新安装默认 moa.executionPreset="autopilot" + moa.enableActorInLoop=true。任务收敛后,Actor 角色自动执行 action_items(写文件 / 跑终端命令),由 SafeExecutor 做 .bak.<timestamp> 备份。审计日志:.moa_cache/<task_id>/manifest.json。关闭方式:设 moa.executionPreset="manual"(finalize 仅返回 markdown)或 "supervised"(每轮 Gate-A QuickPick 审批)。
English (summary): v0.21.3+ defaults to autopilot + Actor-in-loop. After convergence, Actor auto-executes action_items with SafeExecutor backup. Opt out via manual or supervised.
它能做什么 / What it does
@moa <your question> 在 Copilot Chat 中运行多模型扇出。三种入口:
| 入口 |
场景 |
形态 |
@moa / @moaloop |
迭代优化直到 Aggregator 收敛 |
Hermes loop,最多 MAX_ITER=12 轮 |
@moasingle |
快速单次 |
1 轮,强制 finalize |
#moa_orchestrate / #moa_continue / #moa_finalize |
从另一个 agent 驱动 loop |
Hermes loop,状态落盘 |
#moa_analyze / #moa_recon / #moa_execute |
单次分析 / 只读收集 / 执行 action_items |
无 loop |
流水线总览 / Pipeline overview
每轮迭代按顺序运行 5 个角色。Aggregator 输出 finalize(完整度 ≥ 0.8)或达到 MAX_ITER=12 时收敛。
flowchart TD
U([👤 User prompt]) --> P
P["📋 Planner (iter 1 only)<br/>Decompose task + emit hints"]
P -- "📦 sub_questions + recon_hints" --> RT{recon_required?}
RT -- yes --> R0["🔀 Recon fan-out (parallel)"]
R0 --> RA1["🔍 Recon [#1](https://github.com/DDL095/vscode-moa/issues/1)<br/>DeepSeek-V4-Flash"]
R0 --> RA2["🔍 Recon [#2](https://github.com/DDL095/vscode-moa/issues/2)<br/>MiniMax-M3"]
RA1 -- "📦 evidence_chunks_1" --> RAGG
RA2 -- "📦 evidence_chunks_2" --> RAGG
RAGG["🔀 Recon Aggregator<br/>GLM-5.2 · Merge + dedupe"]
RAGG == "📦 universal_aggregated_evidence" ==> REF1
RAGG == "📦 universal_aggregated_evidence" ==> REF2
RAGG == "📦 universal_aggregated_evidence" ==> REF3
REF1["💡 Ref advisor_1<br/>DeepSeek-V4-Flash<br/>→ ref_1.json (unique)"]
REF2["💡 Ref advisor_2<br/>MiniMax-M3<br/>→ ref_2.json (unique)"]
REF3["💡 Ref advisor_N<br/>GLM-5.2<br/>→ ref_N.json (unique)"]
REF1 -- "📄 ref_1.json" --> A
REF2 -- "📄 ref_2.json" --> A
REF3 -- "📄 ref_N.json" --> A
A["🔀 Aggregator<br/>GLM-5.2 · 聚合信息并整合判断<br/>completeness + next_action"]
A -- "next_action: actor_needed" --> AC
AC["⚙️ Actor<br/>MiniMax-M3 · write_file / execute"]
AC -. "📦 high-confidence artifacts" .-> RT
A -. "next_action: recon_needed" .-> RT
A -- "finalize OR completeness ≥ 0.8 OR iter ≥ 12" --> F([🏁 Finalize])
📦 = 文件/封装内容传递 · 📄 = JSON 文件
📖 详细数据流 + 每个角色的输入/输出 JSON 结构见 docs/ARCHITECTURE.md。
ℹ️ 渲染说明:GitHub、VSCode Marketplace、VSCode 1.58+ 自带 markdown preview 都原生支持 mermaid。
模型选用指南 / Model selection guide
MoA 是 vendor-agnostic 的 —— 代码中没有硬编码任何 model ID。每一层从 moa.* 配置读取。下面是每种角色适合什么类型的模型的推荐:
| 角色 |
推荐模型特性 |
为什么 |
示例(搭配 GCMP 时) |
| Planner |
逻辑强、长上下文 |
只跑 1 次,要做任务分解 + 生成 sub_questions |
GLM-5.2 / Claude Sonnet |
| Recon |
便宜 + 快 + 工具调用稳定 |
每轮跑 N 个并行,工具调用密集,贵了烧钱 |
DeepSeek-V4-Flash + MiniMax-M3 |
| Recon Aggregator |
强融合推理 |
N 条原始证据流要去重 + 整合,要质量 |
GLM-5.2(CodingPlan) |
| Refs |
多样性优先(不同实验室/训练数据) |
MoA 的核心价值就是异构视角 —— 全用同家族等于没扇出 |
DeepSeek-V4-Flash + MiniMax-M3 + GLM-5.2 + Qwen3 |
| Aggregator |
逻辑 + 综合能力强 |
决定 next_action 和完整度评分,是收敛的真相源 |
GLM-5.2(CodingPlan)/ Claude Sonnet |
| Actor |
依从度高 + 工具调用规范 |
真正执行 write_file / execute,越服从指令越安全 |
MiniMax-M3(TokenPlan)/ GLM-5.2 |
| L3 Summarizer |
便宜 + 擅长压缩 |
大文件(>200k 字符)的预处理,量大但任务简单 |
MiniMax-M3(TokenPlan) |
搭配 GCMP 扩展:仅官方 Copilot 时 MoA 可见模型只有 3-5 个;装上 GCMP 后扩展到 10-30+ 个(DeepSeek-V4-Pro/Flash、GLM-5.2、MiniMax-M3、Qwen3 等),是真正的异构 MoA。
安装 / Install
方式 A — Marketplace(推荐):扩展面板搜 "MoA Bridge",或命令行 code --install-extension dudali095.moa-bridge。
方式 B — GitHub Release:releases 页面下载 .vsix,code --install-extension moa-bridge-X.Y.Z.vsix。
方式 C — 源码构建:
git clone https://github.com/DDL095/vscode-moa.git
cd vscode-moa && npm install
npm run package && code --extensionDevelopmentPath .
首次配置 / First-run config
最简方式 —— 命令面板运行 Moa: Configure Models:8 步引导式流程,除 refs(Step 1)和 recon(Step 3)外每步都提供 "Use aggregator" / "Disable" 哨兵选项作为推荐默认。
手动编辑 settings.json —— 以下是作者本人的工作配置(日常代码 + 深度研究兼顾):
{
"moa.activePreset": "default",
"moa.presets": {
"default": {
"name": "Daily coding + research",
// 4 个 ref advisor —— 来自不同实验室,异构视角
"refModels": [
{ "role": "advisor_1", "model": "DeepSeek-V4-Flash" },
{ "role": "advisor_2", "model": "MiniMax-M3" },
{ "role": "advisor_3", "model": "GLM-5.2" },
{ "role": "advisor_4", "model": "Qwen3" }
],
"aggregator": { "model": "GLM-5.2" }, // 逻辑强,决定收敛
"reconModels": [ // 便宜+快,工具偏好不同
{ "model": "DeepSeek-V4-Flash" },
{ "model": "MiniMax-M3" }
],
"reconAggregator": { "model": "GLM-5.2" }, // 默认 = aggregator
"planner": { "model": "GLM-5.2" }, // 默认 = aggregator
"actor": { "model": "MiniMax-M3" }, // 依从度高
"l3Summarizer": { "model": "MiniMax-M3" } // 大文件压缩
}
}
}
model 字段作为子串匹配 LanguageModelChat.id(如 "GLM-5.2" 匹配 gcmp.zhipu:::GLM-5.2-CodingPlan)。配置持久化到 User + Workspace 两级,跨窗口无需手动同步。
💡 Preset 切换:保存多个 preset(如 code / research / quick),通过 Moa: Switch Preset 一键切换。
用法 / Usage
作为 chat 参与者(最简单):
@moa refactor src/moaRunner.ts to extract the sufficiency loop into its own module
@moa 多视角分析这个 PR 的设计权衡
@moa review the auth flow in src/services/auth/
作为 VSCode LM 工具(可组合,从其他 agent 调用):
| 工具 |
用途 |
#moa_recon |
独立只读文件收集 —— 返回结构化 Markdown 摘要 |
#moa_analyze |
单次 MoA —— N refs + 1 aggregator,无 loop |
#moa_orchestrate |
启动迭代 loop,返回 task_id(支持 deferredResultId 跨 compact) |
#moa_continue |
推进 loop(可选注入 subagent 的 reconResult 填补缺口) |
#moa_finalize |
终止 loop,产出 action_items + summary + gaps |
#moa_execute (v0.20.0+) |
执行 finalized 的 action_items,受审批门约束 |
流水线可视化 / Pipeline visibility
5 个独立 OutputChannel(View → Output 下拉):MoA Planner / MoA Recon / MoA Refs / MoA Aggregator / MoA Actor。每个 channel 含迭代边界 header(═══════ iter N ═══════),方便多迭代时滚动查看。
Actor 执行控制 / Actor execution (v0.20.0+)
Actor 会真正执行 Aggregator 给出的 action_items(写文件 / 跑命令 / 副作用)。4+1 个 executionPreset 模式:
| Preset |
finalize 后自动执行? |
审批弹窗 |
备份 |
适用 |
manual(默认) |
❌ 需调 #moa_execute |
batch(Gate-A QuickPick) |
✅ |
首次/探索性 |
supervised |
✅ |
batch(每轮多选) |
✅ |
有人值守 |
autopilot |
✅ |
none |
✅ |
CI / 可信批处理 |
yolo |
✅ |
none |
❌(不可逆) |
沙盒 |
custom |
由 autoExecuteAfterFinalize 控制 |
由 approvalMode 控制 |
由 safeExecutionMode 控制 |
细粒度 |
每个副作用操作记到 .moa_cache/<task_id>/manifest.json;safeExecutionMode: true 时备份到 <target>.bak.<timestamp>。回滚 = 删新文件 + 把 .bak.<ts> 改回原名。
v0.22:角色注入系统大改造 + 用户主权
主题(用户原话):"VSCode 内长出来的个人 MOA 檞寄生" —— 让用户对 LLM 角色身份有完全主权,同时升级 Planner 为可迭代智能路由。完整设计见 docs/roadmap/v0.22.0-role-injection-overhaul.md v3。
4 大改动
1. Planner mini-loop + role_setup 设计师
Planner 从"单次调用"升级为"可迭代 mini-loop"(默认最多 5 次,绝对上限 20),自评 plan_coverage ≥ 0.9 收敛。iter 2+ 可调 read-only 工具(read_file/list_dir/grep_search/get_errors,每轮 ≤3 次)。plan_coverage < 0.5 时弹 vscode_askQuestions 询问用户。
Planner 新增身份:通过 role_setup 字段设计下游 3 角色(recon / recon_aggregator / actor)的 tone / perspective / tool_priority / cautions / focus。Refs 与 Aggregator 保留多模型可比性,不接受 role_setup(架构红线)。
2. 基础设施层注入(所有调工具的角色)
新建 systemContext.ts + instructionScanner.ts,给 Planner / Recon / Actor 统一注入 4 段动态上下文:
| 注入段 |
内容 |
ENV_CONTEXT |
activeFile / openDocs / workspaceFolders / projectTree / gitRoot / instructionFiles 清单 |
TOOL_EFFICIENCY |
静态工具调用纪律模板 |
CUSTOM_INSTRUCTIONS |
7 路径指令文件扫描(CLAUDE.md / AGENTS.md / copilot-instructions.md 等),不截断 |
RUNTIME_INSTRUCTIONS |
4 文件夹 skills(.github/skills + .claude/skills + ~/.copilot/skills + ~/.claude/skills)的 SKILL.md frontmatter |
3. Recon Aggregator 始终运行 + 自迭代
v0.18 起 parallel 模式下运行;v0.22 起无论 single 还是 parallel 都运行(统一证据清洁度)。支持自迭代(默认 1 次,最大 10),maxIterations > 1 时启用启发式评分(aggregation + fidelity,零额外 LLM 成本)。
4. Role Setup Preset 用户主权系统
类似 moa 模型预设,新增 Role Setup Preset 系统。预设持久化到 ~/.moa/role-setup-presets.json(全局,跨任务/会话)。内置仅 1 个 default 预设(不可删除),用户基于 default 自行修改。
v0.22 命令(11 个)
Role Setup Preset CRUD + 分享:
Moa: Create Role Preset / Switch Role Preset / Edit Role Preset / Delete Role Preset
Moa: Export Role Preset / Import Role Preset(社区分享)
用户主权 + 报告:
Moa: Toggle AI Generation(开/关 AI 自生成预设建议的采纳)
Moa: Toggle Plan Mode Report / Moa: Show Last Plan Mode Report(借鉴 Copilot Plan Agent,但 MoA 为主干)
Moa: Toggle final.md Inline Display(task complete 时把 final.md 关键内容内嵌主会话)
环境诊断:
Moa: Diagnose Environment (v0.22)(12 项信息源可获取性检查)
v0.22 配置项(12 个新增)
完整说明详见 docs/CONFIGURATION.md。最关键 4 项:
| Key |
Default |
Description |
moa.enablePlannerIteration |
true |
Planner mini-loop 开关。关闭则回退到 v0.21.x 单次模式——向后兼容开关。 |
moa.plannerMaxIterations |
5 |
mini-loop 最大迭代(1-20)。1 = 单次模式。 |
moa.plannerCoverageThreshold |
0.9 |
plan_coverage 收敛阈值。 |
moa.reconAggregatorMode |
"default" |
Recon Aggregator 角色提示词来源(default 内置 / planner 用 role_setup 覆盖)。 |
其余 8 项:moa.plannerAllowTools / moa.reconAggregatorMaxIterations / moa.reconAggregatorScoreThreshold / moa.planModeReport.enabled / moa.finalMdInlineDisplay / moa.finalMdInlineThresholds / moa.roleSetup.activePreset / moa.roleSetup.aiGeneration。
升级路径(v0.21.x 用户)
- 不强制使用 role_setup(Planner 可选输出,缺失时下游用 v0.21.x 静态 prompt fallback)
enablePlannerIteration=false 或 plannerMaxIterations=1 → 回退到 v0.21.x 单次 Planner 模式
- 首次启动自动创建
~/.moa/role-setup-presets.json 含 default 预设
本地缓存 / Local cache
所有任务状态持久化到 <workspace>/.moa_cache/<task_id>/:
.moa_cache/<task_id>/
├── state.json # 实时状态(每轮更新)
├── meta.json # 元数据(模型 / 耗时 / 角色分布)
├── timeline.md # 人类可读每轮表格
├── final.md / final.json # Aggregator 综合 / 结构化 action_items
├── manifest.json # SafeExecutor 审计日志(v0.19.1+)
├── autopilot.log # v0.20.0+ 自动执行摘要
└── iteration_001/
├── planner.json
├── recon/advisor_1__<model>.json
├── recon_aggregator.json
├── refs/advisor_N__<model>.json
├── aggregator.json
└── actor.json (if Actor ran)
生命周期:moa.cacheTtlDays(默认 30 天,0 = 永不自动清理);moa.cacheRootDir 可设绝对路径跨工作区共享。
配置参考 / Configuration reference
📖 VSCode 设置 UI 描述在 v0.20.2+ 全部双语化(中文 + 英文)。完整配置项详见 docs/CONFIGURATION.md。本节只列最常用的。
| Key |
Type |
Default |
Description |
moa.presets |
Object |
{} |
命名预设组,每个打包整条流水线。通过 Moa: Switch Preset 切换。 |
moa.activePreset |
string |
"default" |
当前激活的 preset key。 |
moa.parallelRefs |
boolean |
true |
并行扇出 refs(wall-clock = 最慢的 ref)。 |
moa.parallelRecon |
boolean |
true |
并行扇出 Recon agent(当 reconModels 有 2+ 个时)。 |
moa.refDisplayMode |
"thinking" | "verbose" |
"thinking" |
保持 thinking(默认)。verbose 会污染 Copilot 上下文(N refs × M 轮迭代累积数千 token)。 |
moa.enableRecon |
boolean |
true |
切换 Recon 阶段。 |
moa.enableActingAgent |
boolean |
true |
切换 Actor 阶段。 |
moa.forceDirect |
boolean |
false |
⚠️ 绕过多模型安全网,仅在反复失败后用。 |
moa.maxReconRounds |
number (1-20) |
3 |
充分性 loop 上限。 |
moa.executionPreset |
enum |
"manual" |
Actor 执行模式(见上)。 |
moa.cacheTtlDays |
number (0-36500) |
30 |
任务 TTL(天),0 = 永不清理。 |
调试 / Debugging
Moa: Probe Available Tools —— 列出 vscode.lm.tools 中所有已注册工具。
- 5 个 OutputChannel(
View → Output)—— 按角色查看每轮输出。
- 端到端审计:
@moa 的完整 trace 在 .moa_cache/<task_id>/iteration_NNN/;autopilot.log 是人类可读摘要。
- 设
"moa.refDisplayMode": "verbose" 调试 aggregator 融合问题(⚠️ 上下文污染风险)。
与 GCMP 的关系 / Relationship with GCMP
MoA 是 vendor-agnostic 的,不 import、不配置、不依赖 GCMP。但 MoA 装了 GCMP 会更有用 —— 多模型扇出的全部意义就是异构视角,仅官方 Copilot 时多样性有限。
构建与发布 / Build & release
npm install
npm run compile # 开发 bundle
npm run package # 生产 bundle
npx vsce package # 构建 .vsix
发布到 GitHub Releases,每个 release 附带对应 .vsix。
许可证 / License
MIT © DDL095