【免费下载链接】pandacode
PandaCode: a calm desktop workspace for coding agents
PandaCode 的 Panda Router 是内置的本地模型路由引擎,用 ONNX 小模型在毫秒级时间内读取任务描述,为 Agent 团队的每个 Worker 自动挑出最合适的 AI 模型。整个决策在本地完成,不经过 Python、不经过服务器,任务内容也不离开你的电脑。
为什么需要自动选模型?
在 PandaCode 的自动团队(automatic team)里,一个 Lead(组长 Agent)会把任务分派给多个 Worker。团队的模型池(catalog)可包含所有已安装 harness 的模型,最多 1000 个。
如果每个 Worker 都用最贵的旗舰模型,成本失控;如果都用最便宜的模型,难题做不好。Panda Router 就是来解决"这个任务该派哪个模型"的决策者,它的官方说法是:单次路由在 CPU 上约 10–25 毫秒(见 docs/model-routing.md)。
路由的 4 步流水线
Panda Router 是 PandaOrchestrator v4 的原生 Rust 移植,ONNX Runtime 直接链接进应用。一次路由分四步:
第 1 步:ONNX 任务画像(Profiler)一个 32M 参数、int8 量化的小模型(Ettin-32M)读取"任务文本 + 上下文",上下文包括仓库前 3 大语言、涉及文件数、是否需要工具。它输出一份TaskProfile:
- 类别(13 选 1 的概率分布):实现、修 bug、重构、写测试、代码评审、研究、规划、文档、前端 UI、数据分析、DevOps、数学推理、闲聊;
- 难度:1–10 级分布;
- 技能需求:coding、debugging、reasoning、math、writing、research、review、planning、ui_frontend、data_analysis 共 10 个轴;
- 标志位:需要工具、需要视觉、规格含糊等;外加 24 项检查表与预期输出长度。
输入文本超过 6000 字符时只取头尾(见 profile.rs 的format_input),所以超长任务描述也不会拖慢路由。
第 2 步:确定性匹配(Matcher)内置的模型卡片目录(cards.json + pandacode_cards.json,共 60 多张卡片,每张记录 10 轴能力 θ/σ、单价、上下文长度、TTFT、是否支持工具与视觉)与任务画像逐一对账,用 IRT(项目反应理论)模型算出每个模型在 10 个难度等级上的成功概率,见 matcher.rs。
第 3 步:学习式成功头(Success Head)一个基于历史数据训练的 logit 头(success.rs + success_head.json)对每张"训练覆盖"的卡片校准 P(success),并给出置信下界——决策时用的是下界而不是均值,更保守、更稳。
第 4 步:v4 策略决策(Policy)在成本、延迟、成功率下界之上按你选的模式挑模型,同时生成一条最多 3 级的升级阶梯(escalation ladder),见 policy.rs:
| 模式 | 决策规则 | 适合场景 |
|---|---|---|
| Cheap(廉价) | 成功率下界 ≥ 最低门槛(默认 50%,可调 30–90%)中期望成本最低者 | 大批量简单任务 |
| Balanced(均衡,默认) | 效用最大:成功率 − 0.3 × 归一化期望成本,失败成本计入 | 日常团队工作 |
| Best(最佳) | 最可能成功、代价相同时选便宜的 | 重要、易失败的任务 |
模型名字如何对上千张卡片?
Worker 池里的模型名五花八门(ollama/qwen3.8:27b、default · GPT-6 Luna · Codex……)。cards.rs 的resolve_alias按 4 层规则解析:精确 ID → 精确模型串(含 vendor 前缀剥离)→ 忽略大小写/分隔符的宽松匹配 → 数字防护的模糊匹配(阈值 0.75)。
两个关键的防错设计:
- 版本数字防护:
gpt-6-sol绝不会错配成gpt-6.1-sol; - 档位词防护:mini、nano、turbo、pro 等 14 个档位词按整词比较,
gpt-6-luna-mini不会借用gpt-6-luna的卡片("mini 在 gemini 里"这类子串陷阱也不会误伤)。
解析有 8192 条的进程内缓存;没有卡片的模型视为未评级,永远不会被自动选中——除非你在等级表里给了它 S–D 评级,系统会为它生成一张合成卡片让它可路由。
失败之后:升级阶梯与"永不降级"
这是 Panda Router 最有价值的设计。Worker 失败(或被 Lead 的测试/类型检查判为不通过)后,组长用replaces派发替补并重新路由:
- 失败模型被排除;
- 难度分布按贝叶斯后验上调("这个模型都失败了,任务大概比预想更难"),见
after_failure与 panda_router.rs 的escalate_once; - 新选中的模型永远不弱于失败的模型:优先走上一轮阶梯的下一级(
escalation_ladder),否则选更强的(escalation:stronger),再否则选剩下最强者(escalation:strongest_left); - 每个任务最多重试 2 次,三次失败后 Lead 会把失败报告给你,而不是继续烧钱。
分派备注里会写清楚决策来源,例如routed: Haiku · claude (ladder 1/3, opener; policy pick Opus; …),你可以随时知道为什么派了它。
自动下载与完整性校验(隐私保证)
- 路由过程本身不发起任何网络请求,任务内容绝不上传;
- 唯一的下载是画像模型文件:
model.int8.onnx(31 MB)+tokenizer.json(3.5 MB),约 35 MB,来自固定 commit的上游仓库,下载流式计算SHA-256 校验,失败文件自动清理、10 分钟后才重试(见 model_routing.rs); - 文件存放在应用数据目录
panda-router/v4,旧版 v2 文件在新版加载后自动清除; - Intel Mac 与 x86_64 Linux 没有预构建的 ONNX Runtime,不下载、不加载,直接使用关键词启发式;macOS 13.4 以下同理。
也就是说,"自动升级"对使用者而言是无感的:设置里打开路由 → 团队启用时后台下载 → 下次路由自动切换为 ONNX 模式,路由结果里的profiler字段会标明onnx还是heuristic。
没有 ONNX 时怎么办?
在文件下载完成之前,路由从不阻塞:先用内置的关键词启发式(heuristic.rs)顶替——正则匹配类别词(fix/bug/refactor/pytest…)、按字数与文件数估难度、按难度偏移推技能轴。效果弱于 ONNX 画像,但保证团队随时可用,且结果中会明确标注heuristic。
在哪里开启与调优?
Settings → Agents → Model routing,面板源码见 model-routing.ts:
- Pick worker models with Panda Router:总开关(默认开启);
- Mode:Cheap / Balanced / Best;
- Minimum chance of success:仅 Cheap 模式显示,默认 50%;
- Profiler:Ready / Downloading / Failed 状态,可手动 Download 或 Retry;
- Route(试一试):输入一段任务描述,立即看到选中模型、备选 Top 5、各自的成功率与预估成本。
另外两个实用功能:
- 等级表(Tier list):给模型评 S/A/B/C/D(对应能力 8.9 / 8.0 / 7.0 / 6.0 / 4.5),被评级模型的成功率按
0.7×等级 + 0.3×卡片混合——S 级的弱卡可以打败 D 级的强卡; - Team 菜单:提示框旁的 Team 按钮直接切换Cheap team / Balanced team / Best team,自动开启自动团队并设置全局模式。
源码与文档索引
| 模块 | 路径 | 说明 |
|---|---|---|
| 路由主入口 | src-tauri/src/panda_router.rs | route/escalate、资产清单与 SHA-256 |
| ONNX 画像器 | src-tauri/src/panda_router/onnx.rs | tokenizer + int8 模型加载与批量推理 |
| 启发式画像 | src-tauri/src/panda_router/heuristic.rs | 无 ONNX 时的正则规则画像 |
| IRT 匹配器 | src-tauri/src/panda_router/matcher.rs | P(success) 计算、候选过滤、升级地板 |
| 决策策略 | src-tauri/src/panda_router/policy.rs | 三种模式、失败成本、3 级阶梯 |
| 模型卡片 | src-tauri/src/panda_router/cards.rs | 目录校验、别名解析、模糊匹配 |
| 成功头 | src-tauri/src/panda_router/success.rs | 校准 P、置信下界、失败偏移表 |
| 设置与下载 | src-tauri/src/model_routing.rs | 配置、流式下载、状态机 |
| 团队侧逻辑 | src-tauri/src/architect/routing.rs | profileId: "auto"、replaces失败链 |
| 面板前端 | src/model-routing.ts / model-routing.css | 设置页 |
| 官方文档 | docs/model-routing.md | 行为、模式、隐私、限制 |
| 路由测试 | src-tauri/src/panda_router/tests.rs | 与 Python 参考实现的对齐验证 |
小结
Panda Router 把"为每个 Worker 选模型"变成了一道本地、毫秒级、可解释的优化题:ONNX 小模型负责读懂任务,模型卡片负责量化每个模型,成功头负责校准概率,v4 策略负责在成本与成功率之间权衡,失败后沿阶梯只升不降、最多两次重试。对新手来说你只需要知道一件事——在设置里打开它,选择 Balanced 模式,剩下的交给路由。
【免费下载链接】pandacode
PandaCode: a calm desktop workspace for coding agents
相关推荐
TRACER Embedding选型指南:4个Sentence-Transformers模型对比,为你的LLM路由选对向量
TRACER Embedding选型指南:4个Sentence Transformers模型对比,为你的LLM路由选对向量 TRACER 是一个开源的 LLM
深度揭秘OpenSquilla的SquillaRouter:本地模型路由器如何让每一轮对话都省钱
深度揭秘OpenSquilla的SquillaRouter:本地模型路由器如何让每一轮对话都省钱 OpenSquilla 是一款主打"Token 高效"的开源
AI Agent人工智能大模型MCP ClientsMCP 服务即时通讯LLM 网关工具调用CLI前端桌面应用Agent 记忆为什么选0.5B小模型?Qwen2.5-0.5B-Instruct_rai_1.8.0_npu_16K 与本地大模型对比选型指南
为什么选0.5B小模型?Qwen2.5 0.5B Instruct_rai_1.8.0_npu_16K 与本地大模型对比选型指南 想在普通 PC 上体验 本地大
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考