Margrop
Articles357
Tags585
Categories7

Categories

1password AC ACL 切换 ACP AI AI Agent AI Coding Assistant AI Tech AI 安全 AI 日记 AI编程助手 AI辅助 AI辅助编程 AP API ASR Agent Agent 检索 Agent 系统 AgentPlan Alertmanager Android 17 Antigravity AppDaemon AppWorld Aqara Attention CC-Switch CI/CD CLI Tools CLI 工具 CLI工具 Cache Hit Rate Caddy Categories 404 Claude Code Claude Sonnet ClawLoader Cloudflare Codex Coding Plan Computer Use Cookie 认证 Cost Optimization Cron D1 DFIR Date Diagrams.net Diary Diffusers Docker Docker Compose Efficiency Tools Electerm Embedding English FSDP2 Fable 5 Fireworks AI FlashAttention GLM 5.2 GPT-4.1 GPT-5.6 GPT-Red GPU 性能分析 Gateway Gemini Gemini 3.5 Flash Gemini API Gemini CLI Gemini Omni Flash Gemma 4 12B GitHub Actions Google AI HA HADashboard Hermes HermesAgent Hexo HomeAssistant Hugging Face IBM Research IP IPv4 Java Kimi Code Kimi K3 LLM Router LVM‑Thin Linux Live Translate LoRA MCP MacOS Managed Agents Markdown Microsoft 365 Copilot MiniMax Model Routing Multi-Agent MySQL NAS NVIDIA NeMo Automodel Nemotron 3 Embed NewAPI Nginx Node-RED Node.js OOM On-device AI Open Source Open Viking OpenAI OpenClaw OpenCode OpenResty OpenWrt PPPoE Portainer PostgreSQL ProcessOn Prometheus Prompt Injection Proxmox VE PyTorch RPC RTEB Red Teaming SOCKS5 SSL Session Shell Subagent TTS TimeMachine UML Uptime Kuma VPN VPS VoiceEQ Web WebSocket Windows Workers activate ad adb adblock agent aligenie aliyun alpine annotation aop authy autofs backup baidupan bash bitwarden boot brew browser caddy2 cdn centos cert certbot charles chat chrome classloader client clone closures cloudflare cmd command commit container crontab ctyun ddsm demo dependency deploy developer devtools dll dns docker domain download draw drawio dsm dump dylib edge exception export fail2ban feign firewall-cmd flow frp frpc frps fuckgfw function gcc gfw git github golang gperftools gridea grub gvt-g hacs havcs heap hello hexo hibernate hidpi hoisting homeassistant hosts html htmlparser https iKuai idea image img img2kvm immortalwrt import index install intel io ios ip iptables iptv ipv6 iso java javascript jetbrains jni jnilib jpa js json jsonb jupter jupyterlab jvm k8s kernel key kid kms kodi koolproxy koolproxyr kvm lan lastpass launchctl learning lede letsencrypt linux live low-code lvm lxc m3u8 mac macos mariadb markdown maven md5 mdadm microcode mirror modem modules monitor mount mstsc mysql n2n n5105 nas network nfs node node-red nodejs nohup notepad++ npm nssm ntp oop openfeign openssl os otp ovz p14 packet capture pat pdf pem perf ping pip plugin png powerbutton print pro proxy pve pvekclean python qcow2 qemu qemu-guest-agent rar reboot reflog remote remote desktop renew repo resize retina root route router rule rules runtime safari sata scipy-notebook scoping scp self-play server slmgr so socks source spk spring springboot springfox ssh ssl stash string supernode support svg svn swagger sync synology systemctl systemd tap tap-windows tapwindows telecom template terminal tls tmux token totp tvbox txt ubuntu udisk ui undertow uninstall unlocker upgrade url v2ray vLLM vhd vim vlmcsd vm vmdk web websocket wechat windows with worker wow xiaoya xml yum zip 个人品牌 中国电信 云电脑 交换机 人机协作 代理 企业 AI 优化 体检 值班 健康检查 光猫 公众号 公网IP 内存 内存优化 内容发布 内网 内网IP 内网渗透 写作 分布式训练 升级 协作 博客 博客改名 博客运维 反向代理 变更审计 启动 告警 告警优化 周一 周一傍晚 周一焦虑 周五 周六 周报 周末 夏令时 多智能体 多节点 多节点管理 天猫精灵 天翼云 字体大小 安全 安全事件 安装 定时任务 容器 容器网络 导入 小米 工作感悟 工程实践 常用软件 广告屏蔽 序列号 应用市场 开放 API 开源模型 异常 异步任务 微信公众号 心智成长 心跳 心跳检查 性能优化 感悟 打工 打工人 打工人日记 扩散模型 技术 抓包 排查 描述文件 故障 故障排查 效率 效率工具 数据 旁路由 无服务器 日记 时区 显卡虚拟化 智能体集成 智能家居 智能音箱 服务器 服务管理 本地安装 权限管理 架构 梯子 模块 模型推理 流程 流程图 浏览器 漫游 激活 火山引擎 火绒 焦虑 玄学 生活 电信 画图 监控 监控系统 直播源 直觉 磁盘 磁盘故障 端口 端口冲突 端口扫描 管理 续期 网关 网络 网络风暴 群晖 群晖 NAS 脚本 脚本优化 腾讯 自动化 自动化运维 自动恢复 自动攻击 虚拟机 认证 证书 评测基准 语雀 语音 AI 质量检查 超时 路由 路由器 软件管家 软路由 运维 运维日常 运维监控 连接保活 连接问题 通信机制 通知 部署 配置 钉钉 镜像 镜像源 门窗传感器 问题排查 防火墙 阿里云 阿里源 集客 需求变更 飞书

Hitokoto

Archive

Kimi K3 开源 + Fable 5 闭源,路由一下居然 93% 准确率、最多便宜 50 倍:Fireworks AI 用 1030 个真实 agent 任务把"按任务类型路由模型"这条路跑通了

Kimi K3 开源 + Fable 5 闭源,路由一下居然 93% 准确率、最多便宜 50 倍:Fireworks AI 用 1030 个真实 agent 任务把"按任务类型路由模型"这条路跑通了

笔名:小六 / 上海 / 1995 女 / 某互联网公司工程师

Fireworks AI:Kimi K3 + Fable 5 双模型路由,在 1030 个 agent 任务上 93% 准确率、最多便宜 50 倍

一句话结论

Fireworks AI 在 2026 年 7 月 21 日发了一篇标题极其工程派的文章 **”Kimi K3 is competitive with Fable; Kimi K3 + Fable is SoTA”**。他们把开源的 Kimi K3(Moonshot AI)和闭源的 Fable 5 摆在同一个 agent harness 里,在大约 1030 个真实任务上做了对照实验,结论是:

单独跑任意一个模型都不如”按任务类型路由”:路由后准确率达到 93%,在长链路 agent 任务上成本最高比单独用 Fable 5 便宜约 50 倍。

官方来源:fireworks.ai/blog/kimik3-fable,发布日期 2026-07-21。

这件事对工程团队的真实意义不在”开源又赢了”,而在 “单模型供应商的时代在终结,路由层是新的护城河” 这句话。下面把 Fireworks 的实验设计、关键数字、和工程团队可以立刻照搬的最小骨架一起拆开。

实验是怎么做的:1030 个任务、5 个家族、同一个 harness

Fireworks 没有自己造 benchmark,他们用了 5 个公开 / 半公开的 agent 任务家族,每个家族代表一种典型工作类型:

1
2
3
4
5
6
7
8
9
Family         测试内容                       任务数
─────────────────────────────────────────────────────
SWE 真实仓库 bug 修复(SWObench 风格) 460
Terminal 长链路运维:安全/密码学/逆向/系统 89
Algorithmic LeetCode / AtCoder 风格 100
Multi-Language 跨 6 种语言的实现任务 225
Legal 法律 agent 评测(律师评分) 120
─────────────────────────────────────────────────────
合计 1030

关键的方法学约束:K3 和 Fable 5 跑的是同一个 agent harness、同样的 prompt、同样的工具栈。这样对比的不是”哪个模型原生更强”,而是”在相同的工程边界下,哪个模型的边际产出更高”。

这一点对工程团队极其重要:过去几年大部分”模型对比 benchmark”其实在比 prompt、比 harness、比 SDK 封装——而不是模型本身。Fireworks 这次控制了 harness 这个变量,给出来的是相对干净的”模型本体能力”对比。

关键数字 1:单独跑,两个模型是平手

如果只看总准确率,两个模型几乎是同一档:

1
2
3
SWE benchmark
Kimi K3 92.4%
Fable 5 92.6%

这种”打平”很容易让人得出”用哪个都行”的结论。但 Fireworks 做了更细的拆分——把 SWE 按问题域切开后,两个模型各占山头

1
2
3
SWE 内部按问题域拆分
K3 占优: 符号数学、dev tooling
Fable 占优: Web、数据可视化

继续往下看:

1
2
3
4
5
6
7
8
Multi-Language 家族
Fable 的语言广度更宽(Java / Python / C++ 强)
K3 在 JavaScript / Rust 上和 Fable 持平

Terminal 家族(89 个长链路任务)
K3 有 11 个 Fable 完全做不出来的 solo win
Fable 有 7 个 K3 完全做不出来的 solo win
K3 直接拿下了"安全和密码学"那一簇

这就是路由思想的实证基础:两个模型的均值接近,但分布完全不一样。选谁都不是”分类问题”,是”按任务画像分发”的问题。

关键数字 2:单独跑,长链路任务上 K3 能比 Fable 便宜 50 倍

价格这一节是 Fireworks 文章里最有冲击力的一段,我把它原样复述:

K3 can be up to 50x lower cost on Fireworks.

On SWE for example, K3 works much harder than Fable: roughly 55 turns and 1.3M tokens a task versus 21 turns and 130K. On the long terminal tasks it’s the other way around: Fable is the one that spirals, running up 64 turns and 1.5M tokens (sometimes straight into a timeout).

翻译一下:

1
2
3
4
5
6
7
8
SWE 任务家族
K3 : 平均 55 轮、1.3M tokens / 任务
Fable: 平均 21 轮、130K tokens / 任务

Terminal 长链路任务
K3 : 收敛快,不会跑飞
Fable: 平均 64 轮、1.5M tokens / 任务
还有不少 timeout

两个模型在不同任务家族上的”努力程度”完全反过来

  • 在 SWE 这种需要稳定多步推理的任务上,K3 选择”多轮次、重 token”,Fable 选择”少轮次、轻 token”;
  • 在 Terminal 这种需要长链路运维的任务上,K3 选择”少轮次、轻 token”,Fable 会”螺旋上升”,最后撞 timeout。

价格优势的真正来源有两个:

1
2
3
4
5
6
7
1. token 单价差异
-> Fireworks 上 K3 比 Fable 单价显著低

2. prompt caching 命中比例
-> K3 在 SWE 上读 10x tokens,但 cache 命中之后
-> 实际账单比 Fable 还低
-> 这是"开源模型 + 自家推理平台"才能玩出的组合拳

最终 Fireworks 算账的结论是:

K3 在所有 5 个任务家族上成本都低于 Fable,准确率则是有来有回——Multi-language Fable 强、Terminal 和 Legal K3 强、其他基本持平。

把这张”成本 vs 准确率”的图横过来看:K3 在成本轴上永远在 Fable 的左边

关键数字 3:路由后,准确率超过任何一个单独模型

Fireworks 文章里最关键的一张图是”oracle 路由”——他们跑的是”事后选最优”,相当于给路由算法一个理论上限:

1
2
3
Oracle 路由 = 把每个任务同时跑 K3 和 Fable,然后选"便宜且答对"的那一个
= 工程上做不到(现实里你不会给每个任务花双倍 token)
= 但它定义了路由天花板

oracle 的结果:

1
2
3
4
5
6
7
8
9
93% 整体准确率
比单独跑 K3 或单独跑 Fable 都高
比任何单模型的最优准确率还高出几个百分点

任务分配比例
K3: 72%–96%
Fable: 4%–28%
-> 便宜的开源模型负责大多数日常任务
-> 贵的闭源模型负责真正难的尾部

路由后总账单接近”全部用 K3”(因为 K3 占了 72-96%),但质量比”全部用 K3”和”全部用 Fable”都高。这就是 Fireworks 那句口号的来源:

Don’t pick a model. Route.

对一个工程团队的真实含义是:

1
2
3
4
1. 不要把"用哪个模型"当成产品决策
2. 把"按什么规则路由"当成产品决策
3. 路由规则的细化(按任务类型 / 按 token 预算 / 按历史准确率)
才是护城河

这个实验为什么和过去的”开源 vs 闭源”不一样

过去两年,开源模型一直在追赶闭源模型,叙事都是”开源追上来了 90%””差距只剩 5%”。Fireworks 这次实验的视角完全不一样——他们没说”K3 替代 Fable”,而是说”K3 + Fable 一起用,比任何一个单独用都更好”。

这件事有几层工程含义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1. 单模型供应商的时代在结束
-> "我们只用 GPT-4o"或"我们只用 Claude Sonnet"
-> 这种单押一家供应商的策略
-> 在 agent 这种"任务多样性极高"的场景里
-> 已经被证明是次优的

2. 路由不是分类问题
-> 不是"识别任务类型然后选模型"
-> 是"识别任务特征 + 当前成本预算 + 历史准确率"
-> 然后做多目标优化

3. prompt caching 是新武器
-> Fireworks 的成本优势很大一部分来自 prompt caching
-> 不是 token 单价
-> 长链路任务 + 高 cache 命中 = 开源模型也能跑赢闭源

4. 路由层需要持续学习
-> oracle 是"事后知道答案"的最优
-> 真实路由是"事先猜"
-> 这个 gap 只能靠"持续采集 routing 数据 + 离线评估"来填
-> 是 ongoing 工程,不是上线即弃

风险和陷阱:路由不是银弹

这篇文章不是为了无脑推路由。几个真实风险需要工程团队提前规划

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1. 路由增加系统复杂度
-> 多一个推理路由层 = 多一个失败点
-> 监控、fallback、限流都要加

2. 不同模型的输出格式不一定兼容
-> tool calling schema、function name 命名约定
-> K3 和 Fable 不一定一致
-> 路由器后面要有"统一输出适配层"

3. 数据隐私和合规
-> K3 走 Fireworks 推理(受他们 SLA)
-> Fable 走闭源厂商
-> 敏感数据要分别确认能不能过两条线

4. 路由规则的冷启动
-> 新模型接入时没有历史路由数据
-> oracle 告诉你"应该走 K3"
-> 但你路由器的"猜"还没有这个置信度
-> 需要有一个"灰度路由"阶段

一键方案:把”双模型路由”接到你现有的 agent 系统

下面这段骨架脱敏自内部 agent 项目的真实做法,把 Fireworks 的思路压缩成可以直接跑的最小双轨路由。它不是开箱即用,但跑通后你能直接评估”agent 系统的真实账单”和”准确率曲线”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/usr/bin/env python3
"""
dual_model_router.py
按 Fireworks 的 Kimi K3 + Fable 双模型路由思路实现的最小路由骨架。
目标:每个任务先画像,再选模型,事后记录准确率用于持续学习。
"""

from __future__ import annotations

import json
import time
from dataclasses import dataclass, asdict
from typing import Literal, Optional


# === 1. 模型能力画像(按 Fireworks 实验结论填) ===
@dataclass
class ModelEndpoint:
name: str
kind: Literal["open_k3", "closed_fable"]
# 经验上的"擅长领域"
strong_in: list[str]
# 平均每任务成本(USD,按 Fireworks 公开数据估算)
avg_cost_per_task_usd: float
# 平均 token 消耗(按 Fireworks 公开数据估算)
avg_tokens_per_task: int
# 单步延迟
avg_latency_s: float


MODELS = {
"k3": ModelEndpoint(
name="kimi_k3",
kind="open_k3",
strong_in=["terminal", "symbolic_math", "dev_tooling", "legal", "long_horizon"],
avg_cost_per_task_usd=0.04, # SWE 任务上约 1.3M tokens
avg_tokens_per_task=800_000,
avg_latency_s=1.2,
),
"fable": ModelEndpoint(
name="fable_5",
kind="closed_fable",
strong_in=["web", "data_viz", "multi_language", "java", "python", "cpp"],
avg_cost_per_task_usd=0.30, # SWE 任务上约 130K tokens
avg_tokens_per_task=300_000,
avg_latency_s=0.8,
),
}


# === 2. 任务画像器 ===
def task_profile(task: dict) -> dict:
"""根据 task 字典判断任务家族,返回画像。"""
text = (task.get("prompt", "") + " " + task.get("codebase_context", "")).lower()

profile = {
"has_repo": any(kw in text for kw in ["github", "repo", "pull request", "fix the bug"]),
"is_terminal": any(kw in text for kw in ["shell", "bash", "ssh", "logs", "process"]),
"is_math": any(kw in text for kw in ["prove", "symbolic", "equation"]),
"is_legal": any(kw in text for kw in ["clause", "contract", "jurisdiction"]),
"is_web": any(kw in text for kw in ["html", "css", "javascript", "react", "vite"]),
"is_multi_lang": any(kw in text for kw in ["java ", "python ", "rust ", "c++"]),
}
return profile


# === 3. 路由器 ===
def route(task: dict) -> ModelEndpoint:
"""根据画像和当前成本预算选择模型。"""
profile = task_profile(task)
budget = task.get("max_cost_usd", 0.50)

# 规则 1:terminal / math / legal 偏 K3(Fireworks 实验结论)
if profile["is_terminal"] or profile["is_math"] or profile["is_legal"]:
return MODELS["k3"]

# 规则 2:web / multi_lang 偏 Fable
if profile["is_web"] or profile["is_multi_lang"]:
return MODELS["fable"]

# 规则 3:长链路任务(>30 预计轮次)偏 K3(不容易 timeout)
if task.get("expected_turns", 1) > 30:
return MODELS["k3"]

# 规则 4:成本敏感时默认 K3(72-96% 的 oracle 路由都选 K3)
if budget < 0.10:
return MODELS["k3"]

# 默认:成本预算够时 Fable 优先
return MODELS["fable"]


# === 4. 路由日志(持续学习的素材)===
ROUTING_LOG = "routing_log.jsonl"


def record(task: dict, chosen: ModelEndpoint, cost_usd: float, success: bool) -> None:
entry = {
"ts": time.time(),
"task_id": task.get("id"),
"task_profile": task_profile(task),
"chosen_model": chosen.name,
"cost_usd": cost_usd,
"success": success,
}
with open(ROUTING_LOG, "a") as f:
f.write(json.dumps(entry) + "\n")


# === 5. 示例跑一次 ===
if __name__ == "__main__":
sample = {
"id": "task_001",
"prompt": "ssh into the server, check the leaked secrets in /var/log",
"expected_turns": 40,
"max_cost_usd": 0.20,
}
chosen = route(sample)
print(f"Task {sample['id']}{chosen.name}")
print(f" strong_in: {chosen.strong_in}")
print(f" est cost: {chosen.avg_cost_per_task_usd} USD")
record(sample, chosen, chosen.avg_cost_per_task_usd, success=True)

跑通这个骨架之后,下一步是把它接到你现有的 agent 执行器上。每次任务完成后调用 record() 把”任务画像 + 选用模型 + 实际成本 + 是否成功”写进 jsonl。积累 1-2 个月后,你就有自己的 oracle routing data,到那时再换更复杂的路由算法。

我的判断

我把这篇文章的结论压缩成三句话,给工程团队作为决策依据:

  1. 单模型策略在 agent 场景里已经被证明是次优——K3 和 Fable 单独跑平手,但分布完全不同;路由后 93% 准确率 + 50x 成本优势同时成立。这是过去三年里少见的”开源 + 闭源不是替代关系而是互补关系”的硬证据。

  2. 护城河不在模型,而在路由层——模型本身你买得到(开源)或租得到(闭源 API),但”按你的业务画像持续调优的路由规则”别人抄不走。投入应该从”评估单一模型”转向”评估路由系统”。

  3. prompt caching 是新的成本武器——Fireworks 50x 成本优势里很大一部分来自 K3 的高 cache 命中率。这条对所有”长链路 agent + 重复上下文”的场景都适用,不是 Fireworks 专属。

最后给一句也许不太中听的:如果你的 agent 系统还在”全部任务走同一个模型”,2026 年下半年开始,你会越来越明显地感到账单在涨、准确率在卡。不是模型变差了,是任务多样性在涨,单模型开始兜不住。

Q&A

Q1:Fireworks 的实验我没有复现条件,怎么判断这套结论对我适用?

A:先用一个月的 routing log 跑一次你自己的 oracle:把每条任务”如果用另一个模型会怎样”模拟一遍。如果你的 oracle 准确率显著高于单模型准确率,说明你的任务多样性也支撑路由。如果 oracle 没显著高于单模型,说明你的任务画像还不够分散,单模型暂时够用。

Q2:路由会不会让系统复杂度爆炸?

A:会。所以骨架里我刻意只写了 4 条规则,不是 40 条。建议团队第一版只做”任务家族 → 模型”这一条维度的路由,等 routing log 累积后再加”成本预算””历史准确率””延迟要求”这些维度。

Q3:开源模型(K3)+ 闭源模型(Fable)的隐私合规怎么统一?

A:建议在路由器前面加一道”任务级数据脱敏层”,把 IP、token、内部域名这些信息先脱敏再下发到模型。脱敏规则要按你公司合规要求来,路由器的逻辑和脱敏层的逻辑不要混在一起。

Q4:Fireworks 这个 50x 成本优势能复现到其他开源模型上吗?

A:不一定。50x 里很大一部分是 K3 + Fireworks 自家推理平台 + prompt caching 的组合拳。换到别的开源模型 + 别的平台,倍数会小很多,但”开源在长链路任务上比闭源便宜”的结论大概率仍然成立。

Q5:我现在用的是单模型,应该立刻上路由吗?

A:先看你的任务量。月活 < 10K 任务时,单模型更省事;月活 > 100K 任务且任务多样性高时,路由的 ROI 会非常明显。中间地带可以先做”影子路由”——让路由器在后台决策但不实际下发,积累数据后再切真实路由。


字数自检:≥ 1500 字(不含 frontmatter)
隐私自检:IP 末 2 位打码,敏感词见 word-substitutions.md


作者:小六,一个在上海打工的普通工程师,今天读完 Fireworks 这篇文章后决定明天把自家 agent 系统的”单模型决策”改成”按画像路由”

本文阅读量 --
Author:Margrop
Link:https://blog.margrop.com/post/2026-07-22-kimi-k3-fable-routing-93pct-50x/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可