moa

moa

Enables multi-model reasoning via Mixture-of-Agents orchestration, allowing complex task processing with diverse perspectives and reduced hallucinations.

Category
访问服务器

README

MOA

Cloudflare Workers AI 上的 Mixture-of-Agents 服务

基于 Mixture-of-Agents 论文,在 Cloudflare Worker 上实现多层 MoA 推理编排,通过 Anthropic Messages API 和 MCP 两种协议接入 Claude Code / 任意 LLM 客户端。

用多个中小模型组合逼近前沿模型能力——不需要 Claude Fable 5 / gpt-5.6-sol 的预算,也能获得多视角、可复核、低幻觉的复杂任务处理。

背景

OpenRouter 前阵子在 DRACO 深度研究基准上做了个实验:Gemini 3 Flash + Kimi K2.6 + DeepSeek V4 Pro 三个模型 Fusion 起来,得分 64.7%,和 Claude Fable 5 单跑的 65.3% 只差 0.6 个百分点,而单任务成本大约只有一半。详见 OpenRouter Fusion

结论很直接:单个模型不是终点,多个模型合体很多时候比单模型更强。

但 OpenRouter 的 Fusion 是云端服务。我更想要的是:

  • 模型可以换、供应商可以换、路由策略可以改
  • 跑在免费 / 便宜的边缘推理上
  • 最好支持各种 api 格式

于是就有了这个项目。

架构

请求
  │
  ├─ Layer 0: AnySearch 联网检索(可选)
  │    └─ 检索结果注入 <CONTEXT>,为深度研究任务提供证据
  │
  ├─ Layer 1: N 个 proposer 并行(不同模型提供多样化视角)
  │
  ├─ Layer 2: judge 冲突分析
  │    └─ 产出 CONSENSUS / CONFLICTS / OMISSIONS / UNSUPPORTED 清单
  │
  └─ Layer 3: aggregator(synthesizer)
       └─ 基于候选答案 + judge 分析综合最终答案,非简单拼接

功能

功能 说明
Cloudflare Worker + Workers AI env.AI 远程 binding,边缘推理
Anthropic Messages API /v1/messages 非流式 + SSE 流式,Claude Code 透明接入
MCP Streamable HTTP /mcp JSON-RPC,工具 moa_reason
三层 MoA 编排 proposer → judge → synthesizer,可配置为两层
联网搜索 AnySearch / Tavily / SerpAPI 可插拔,best-effort 注入上下文
自由模型组合 12 个前沿模型可选,URL / MCP / 配置页三入口自由组合
模型预设 Preset A(最强)/ B(均衡)/ C(对标 DeepSeek+Kimi+Qwen)
调用限制 预算 / 并发 / 超时 / 重试 / 输出大小全部可配置
中英文支持 auto / zh-CN / en-US
配置页 Web UI 一键生成 curl / MCP JSON 配置

可用模型

短名 Workers AI binding 特点
kimi-k2.7-code @cf/moonshotai/kimi-k2.7-code reasoning + agentic + vision + code
glm-5.2 @cf/zai-org/glm-5.2 reasoning + agentic + code
kimi-k2.6 @cf/moonshotai/kimi-k2.6 reasoning + agentic + vision
nemotron-3-120b-a12b @cf/nvidia/nemotron-3-120b-a12b 120B reasoning
gpt-oss-120b @cf/openai/gpt-oss-120b aggregator 默认,便宜
gpt-oss-20b @cf/openai/gpt-oss-20b fast
gemma-4-26b-a4b-it @cf/google/gemma-4-26b-a4b-it vision + 便宜
qwen3-30b-a3b @cf/qwen/qwen3-30b-a3b-fp8 reasoning
glm-4.7-flash @cf/zai-org/glm-4.7-flash flash
qwen2.5-coder-32b @cf/qwen/qwen2.5-coder-32b-instruct code
mistral-small-3.1-24b @cf/mistralai/mistral-small-3.1-24b-instruct
llama-3.3-70b @cf/meta/llama-3.3-70b-instruct-fp8-fast 70B

预设组合

预设 组合 说明
A kimi-k2.7-code/glm-5.2/nemotron-3-120b-a12b/kimi-k2.6 3 前沿 proposer + kimi-k2.6 aggregator,最强
B kimi-k2.7-code/glm-5.2/nemotron-3-120b-a12b/gpt-oss-120b proposer 全前沿,aggregator 省
C kimi-k2.6/qwen3-30b-a3b/glm-5.2/gpt-oss-120b 对标 DeepSeek+Kimi+Qwen Fusion

组合格式:proposer1/proposer2/.../aggregator(最后一个为 aggregator)。

快速开始

部署

npm install
npm run typecheck

# 配置鉴权 token
cp .dev.vars.example .dev.vars  # 编辑 .dev.vars 填入 token

# 部署到 Cloudflare
npx wrangler secret put MOA_AUTH_TOKEN
npm run deploy

接入 Claude Code

~/.claude/settings.json 中配置:

{
  "env": {
    "ANTHROPIC_AUTH_TOKEN": "<你的 MOA_AUTH_TOKEN>",
    "ANTHROPIC_BASE_URL": "https://<worker-domain>",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "kimi-k2.7-code/glm-5.2/nemotron-3-120b-a12b/kimi-k2.6",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "kimi-k2.7-code/glm-5.2/nemotron-3-120b-a12b/gpt-oss-120b",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "moa-haiku",
    "API_TIMEOUT_MS": "300000"
  }
}

ANTHROPIC_BASE_URL 填 Worker 域名根地址,不要追加 /v1。模型字段可以是别名(moa-opus)或组合字符串(含 /)。

联网搜索(可选)

为深度研究任务(如 DRACO 基准)启用联网检索:

# wrangler.jsonc 已默认启用 anysearch
# 配置 API key(可选,无 key 也可用,只是限频更低)
npx wrangler secret put ANYSEARCH_API_KEY

支持的搜索引擎:AnySearch(默认)/ Tavily / SerpAPI,通过 MOA_SEARCH_PROVIDER 环境变量切换。

配置

环境变量 默认值 说明
MOA_AUTH_TOKEN 鉴权 token(必设)
MOA_JUDGE_ENABLED false 启用三层 MoA(judge 层)
MOA_SEARCH_PROVIDER none 搜索引擎:anysearch / tavily / serpapi / none
MOA_SEARCH_MAX_RESULTS 5 每次检索返回结果数
MOA_MAX_PROPOSERS 3 proposer 数量上限
MOA_MAX_AI_CALLS 4 单次请求 AI 调用预算
MOA_MAX_CONCURRENT_AGENTS 3 并行 Agent 数
MOA_REQUEST_TIMEOUT_MS 120000 请求超时
MOA_MAX_OUTPUT_TOKENS 16384 单 Agent 输出 token 上限
ANYSEARCH_API_KEY AnySearch API key(可选)
TAVILY_API_KEY Tavily API key
SERPAPI_API_KEY SerpAPI API key

完整配置见 wrangler.jsonc

API 端点

端点 方法 说明
/health GET 健康检查(无需鉴权)
/v1/models GET 模型列表
/v1/messages POST Anthropic Messages API(非流式 + SSE)
/mcp POST MCP JSON-RPC(moa_reason 工具)
/ GET 配置页 Web UI

示例

WORKER_URL="https://your-worker.workers.dev"
TOKEN="<your-token>"

# Messages API — 用预设组合
curl -s $WORKER_URL/v1/messages \
  -H "x-api-key: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"model":"kimi-k2.7-code/glm-5.2/nemotron-3-120b-a12b/kimi-k2.6","max_tokens":1024,"messages":[{"role":"user","content":"解释 Cloudflare Worker 是什么"}]}'

# Messages API — 用别名
curl -s $WORKER_URL/v1/messages \
  -H "x-api-key: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"model":"moa-opus","max_tokens":256,"messages":[{"role":"user","content":"What is 2+2?"}]}'

评测

基础基准(GSM8K / ARC / C-Eval)

bash evalscope/run_eval.sh 10

历史结果:70 题,整体准确率 98.6%。

DRACO 深度研究基准

DRACO 是 Perplexity AI 提出的深度研究评测集(100 个复杂任务,覆盖学术 / 金融 / 法律 / 医疗 / 技术等 10 个领域),考的是搜索、理解、综合、引用能力。OpenRouter 在此基准上测得 Claude Fable 5 单跑 65.3%,而 Gemini 3 Flash + Kimi K2.6 + DeepSeek V4 Pro 的 Fusion 组合 64.7%——本仓库对标该结果,达标阈值 ≥ 60%:

DATASETS="draco" bash evalscope/run_eval.sh 100

DRACO 100 个深度研究任务,4 维度 rubric(factual accuracy / breadth & depth / presentation quality / citation quality),LLM-as-judge 评分。需启用联网搜索。

当前结果(Preset A,AnySearch 免费档):overall 均值 18.6%,中位数 0.0%,仅 10% 任务 ≥ 60%。未达对标 Fable 5 的目标。

拆解后发现主因是基础设施超时而非答案质量:100 题中 59 题 prediction 阶段连接失败(worker 内部 MOA_REQUEST_TIMEOUT_MS=120s 不够 MoA 五步调用),剩余 41 题真有答案的 overall 均值 45.5%、≥60% 占比 24%。也就是说 18.6% 的低分主要被超时拉下去,而非模型能力本身。下一步优先级:(1) 放宽 worker/eval 超时 + 重试,先把 59% 失败率压下来;(2) 给 aggregator 传入检索源并强制引用规范,提升 citation(当前 9.1%);(3) 增加每任务检索次数(当前 maxQueries=1 偏薄)。基础基准(GSM8K / ARC / C-Eval)98.6% 表明推理与知识能力本身可用。

项目结构

src/
├── index.ts              # 入口路由
├── config.ts             # 运行时配置
├── contracts.ts          # 类型定义
├── env.ts                # 环境变量接口
├── anthropic/            # Anthropic Messages API 兼容层
│   ├── route.ts          # /v1/messages 路由
│   ├── stream.ts         # SSE 流式
│   └── models.ts         # 公开模型别名
├── moa/                  # MoA 编排核心
│   ├── orchestrator.ts   # 多层编排(Layer 0-3)
│   ├── search.ts         # 联网搜索 provider
│   ├── prompts.ts        # proposer/judge/aggregator prompt
│   ├── profiles.ts       # 执行计划
│   └── model-selection.ts # 模型组合解析
├── workers-ai/           # Workers AI 适配
│   ├── adapter.ts        # 调用 + 重试
│   └── models.ts         # 模型白名单 + 预设
├── mcp/                  # MCP 协议
└── limits/               # 预算/并发/超时
evalscope/                # 评测脚本
wrangler.jsonc            # Cloudflare Worker 配置

本地开发

npm install
cp .dev.vars.example .dev.vars  # 填入本地测试 token
npm run dev                      # http://127.0.0.1:8787

技术栈

  • Cloudflare Workers AI(边缘推理,12+ 模型可选)
  • TypeScript + Wrangler 4
  • Anthropic Messages API 兼容协议
  • MCP(Model Context Protocol)Streamable HTTP
  • AnySearch / Tavily / SerpAPI(联网搜索)
  • EvalScope(评测框架)

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选