什么是 Fusion Gateway?
想象你有三位顶尖同事激烈争论你的问题,然后一位资深主编裁定谁的论点更有说服力——这套软件做的就是这件事。
一句话讲清楚
你每天都在用AI 编程助手。它们很强——但任何单一 AI 都有盲区:容易过度自信,或者只从一个角度看问题。
Fusion Gateway 是一个代理服务器,它拦截你向 AI 发出的请求,暗中同时咨询多个 AI 模型,取各家之长,返回一个综合后的最佳答案。
你向 Claude Code 提出一个难题。不是一个 AI 独自思考,而是三个 AI 从不同角度同时思考——一个专注架构设计,一个专注落地实现,一个专门找漏洞。第四个 AI 读完三份答案后做出最终裁决。你拿到的是那个经过综合、打磨过的最终答案。
四个"虚拟"模型
从外部看,Fusion Gateway 就像一个普通的OpenAI 兼容 API。你只需指定四个特殊模型名,每个名字触发不同的处理策略:
跟着一次请求从头走到尾
假设你输入:"设计一个 Yocto 系统的 OTA 更新方案"。你用的是 fusion-auto。幕后发生了什么?
/ 你
注册表
分配器
(×3)
理解这些能给你带来什么?
作为一个使用 AI 编程工具的人,理解这套架构会给你三项超能力:
你可以强制指定路由:快速修改用 fusion-single,架构决策用 fusion-critical。当你比系统更清楚时,别让自动路由替你做决定。
每次请求都会在 runs/ 下保存调试文件。答案有问题时,可以看每个工作节点说了什么、裁决者保留了哪些内容。
fusion-fast 每个问题消耗 4 次 API 调用(3 个工作节点 + 1 个裁决者)。预算追踪器在接近每小时/每日限额时自动降级为 single 模式。
四种角色
系统如何决定让哪个 AI 扮演哪个角色——以及为什么"多元视角"才是核心所在。
四种思维,四种职责
Fusion 将每个 AI 模型分配到特定的认知角色。可以把它想象成一个同行评审小组:每位评审人都有不同的职责范围。
专注于系统设计、模块边界和长期演化方向。硬性规则:不允许写实现代码。只能提供接口定义、伪代码和设计权衡。
专注于把想法落地:真实代码、文件结构、错误处理、测试骨架。硬性规则:不讨论架构。默认设计方案已经确定。
发现故障模式、隐性成本、安全风险和边界情况。硬性规则:不允许提供解决方案。只能说"这里会出问题,原因是……"
读取三个工作节点的全部输出,识别共识与分歧,作出裁定,并综合出最终答案。唯一对外发声的角色。
同一个问题,各角色怎么回答
你问:"嵌入式设备上的 OTA 更新失败了该怎么处理?" 下面是每个角色的回应——它们完全独立作答,裁决者在看到这些输出之前不会干预:
如果你让一个 AI 同时"设计 + 实现 + 找风险",它往往会一直待在同一种思维模式里。通过系统提示词强制划定角色边界,才能产生真正的视角多样性——实现者无法讨论架构,评审者无法提供解决方案,这是硬性约束。
模型如何被分配到角色
面对 130+ 个可用模型,系统需要判断谁最擅长什么。它使用 role_assigner.py 中的启发式评分系统。
多样性规则
关键洞察在这里:三个 Claude 模型和一个没什么区别。你需要的是真正的视角多样性,而不是三个来自同一训练血统的 AI。
分配器会施加多样性惩罚:如果某个模型的系列已被另一个工作节点使用,它会扣 −90 分;同公司但不同系列则扣 −45 分。
architect → claude-opus(Anthropic)· implementer → sky/deepseek-v4-pro(DeepSeek)· critic → hewei/MiniMax-M2.7(MiniMax)· judge → claude-opus-4-6(Anthropic)。三个工作节点来自四家不同公司,裁决者选用最适合综合推理的模型。
检验一下你的理解
你在查看工作节点的输出,其中一条写道:"如果写入途中断电,两个分区都会损坏,设备就变砖了。" 这是哪个角色写的?
你用三个模型配置了 Fusion:claude-opus、claude-sonnet 和 claude-haiku,全都来自 Anthropic。问题出在哪里?
Fusion 处理流程
从你的消息到达那一刻,到你看到答案的那一刻——代码所做的每一个决策,用大白话讲清楚。
第一步:路由器决定使用哪种模式
当你使用 fusion-auto 时,路由器会读取你的消息并决定采用哪种策略。它按层次工作——就像一位先检查最严重症状的分诊护士:
消息中是否包含"系统架构"、"architecture"、"production"、"security audit"等词?如果是 → fusion-critical。这些词意味着高风险决策,值得投入更多思考时间。
是否包含"实现"、"重构"、"implement"、"refactor"、"debug"?如果是 → fusion-fast。这些是实质性任务,多视角能带来额外价值。
是否匹配"什么是"、"explain"、"what is"、"rename"、"translate"等简单模式?如果是 → fusion-single。查个定义不需要召开专家小组。
消息是否短于 50 个字符?如果是 → fusion-single。短消息通常是简单问题。否则 → fusion-fast。
Claude Code 会发送一段带有"实现此功能"等指令的长系统提示词。路由器只读取 role: "user" 的消息,因此系统提示词中的词语不会意外触发错误路由。
路由器的代码实现
router.py 中的路由逻辑返回一个包含所有决策细节的数据类,便于调试时记录日志:
next() 遇到第一个匹配就停止——快速且低开销。第二步:三个工作节点同时运行
路由决定后,三个工作节点通过并行执行立刻启动。每个工作节点获得不同的系统提示词,将其锁定在对应角色:
asyncio.gather() 同时启动所有任务并等待全部完成。总等待时间 = 最慢的工作节点耗时,而非所有工作节点耗时之和。工作节点在遇到网络错误时最多重试 2 次(退避时间为 1 秒、2 秒)。其他错误则立即失败。如果成功的工作节点少于 2 个,系统会降级为单模型响应,而不尝试裁决者综合。
第三步:裁决者综合输出
在把任何内容发给裁决者之前,系统会先检查各工作节点的答案是否一致。它使用一种巧妙的字符 n-gram 相似度来比较输出——无需昂贵的嵌入模型:
& = 共有字符序列,| = 所有字符序列合并。相除得到相似度分数(0 到 1)。若工作节点趋于一致(相似度 ≥ 0.12),裁决者使用较短的"综合"提示词;若有分歧,则使用更完整的"仲裁"提示词,要求其明确解决冲突。两种情况下,裁决者的输出都包含两个部分:
内部推理:共识、分歧、裁决结论、独特见解、盲点。保存到磁盘用于调试——不会发给你。
公开答案:最终方案、验证清单和下一步行动。通过 API 提取并返回给你。
第四步:只提取你需要的内容
网关不会直接返回裁决者的完整输出,而是使用正则表达式解析裁决者的 Markdown,只提取配置中指定的公开部分:
每个开启调试的请求会将文件写入 runs/YYYY-MM-DD/<task-id>/:worker.architect.md、worker.implementer.md、worker.critic.md、judge.md(完整输出)、final.md(你收到的内容),以及 metadata.json(路由信息、模型分配、延迟、费用)。旧日志 7 天后自动删除。
检验你的理解
你用 fusion-fast 问了 10 个问题。网关总共发起了多少次上游 API 调用?
用户问道:"这个配置里的 debug 模式有什么用?"fusion-auto 会选择哪条路由?
巧妙的设计
BudgetTracker、健康检查、重试逻辑与收敛检测——让系统在生产环境中稳定运行的工程模式。
自动成本保护
fusion-fast 每次请求消耗 4 次 API 调用。高频用户很快就会触及速率限制。BudgetTracker 监控你的用量,当接近每小时或每日限制时自动降级为 fusion-single:
计数器存在内存中,重启网关后清零。对于分布式部署,你需要共享存储(Redis、数据库)。但对于单用户本地网关,内存计数器快速简单——零数据库依赖。
后台健康检查
上游服务器暴露了 130 多个模型,部分可能离线或损坏。网关可选择性地运行健康检查——但对每次请求都运行 130 次检查会增加 20 秒以上的延迟。因此改为在后台运行:
健康检查运行时,向每个模型发送一个简单问题(如"hello"),超时时间为 15 秒。模型响应则标记为 healthy=True,超时或报错则标记为 healthy=False。角色分配器对不健康的模型扣减 −1000 分,实际上将其排除在外。
工作节点重试逻辑
网络请求会失败,在中国大陆通过代理路由时尤为如此。工作节点不会在第一次超时就放弃,而是以指数退避方式重试网络错误:
只有 TimeoutException 和 NetworkError 会重试——这些是瞬时性故障(代理抖动、短暂拥塞)。其他错误(认证失败、模型不存在、响应格式错误)会立即失败——重试解决不了这类问题。
处理异常的上游响应
上游服务器有时对非流式请求也返回 SSE 流。网关将其规范化为标准 JSON 响应:
delta.content 字段(增量文本片段)并追加到列表中。自动日志清理
每次 fusion-fast 请求会在磁盘上保存 6 个以上的调试文件。高频使用一周后,目录数量会达到数千个。网关在启动时自动清理 7 天前的日志:
runs/ 下的所有目录,每个目录命名格式如"2026-06-15"。最终测验
默认配置:hourly_call_limit=200,auto_downgrade_at=0.9。你只使用 fusion-fast。在自动降级触发之前,你能提问多少次?
一个工作节点调用因 API 密钥错误而返回 401 Unauthorized。会发生什么?
为什么健康检查在后台运行,而不是在每次请求时运行?
你现在掌握了什么
你刚刚从内部学习了 Fusion Gateway 的工作原理——不是通过记忆 API 文档,而是通过追踪真实的数据流并阅读实际代码。你现在能够:
你理解自动路由何时选择各种模式,以及何时手动覆盖。你知道 fusion-fast 消耗 4 次 API 调用,以及 BudgetTracker 存在的原因。
当答案看起来有问题时,你可以读取保存的调试文件,查看每个工作节点的输出,以及裁决者选择保留或丢弃了什么。
你已经了解了评分系统、路由层、重试逻辑。现在你可以向路由器添加自定义关键词、调整多样性惩罚,或更改返回给用户的内容章节。
尝试在本地运行网关(make start CONFIG=config.local.yaml),将 Claude Code 指向它,然后观察 runs/ 目录被调试日志填满。选一个复杂的问题,读取所有工作节点的输出,看看裁决者如何综合它们。那一刻,一切豁然开朗。