@peterwangze/claude-trigger-router 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -8
- package/config/trigger.routing.yaml +67 -0
- package/dist/cli.js +466 -9
- package/dist/cli.js.map +3 -3
- package/docs/release-notes-v1.2.0.md +6 -3
- package/docs/release-notes-v1.3.0.md +39 -0
- package/docs/releasing.md +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,11 +11,21 @@ Claude Trigger Router 是给 Claude Code 用的本地路由代理。
|
|
|
11
11
|
- 想在 Claude Code 外层增加配置校验、健康检查、治理观测和 UI 工作台
|
|
12
12
|
- 想从 `claude-code-router` 迁移到更清晰的 `Models + Router` 配置心智
|
|
13
13
|
|
|
14
|
-
## v1.
|
|
14
|
+
## v1.3.0 发布定位
|
|
15
15
|
|
|
16
|
-
`v1.
|
|
16
|
+
`v1.3.0` 是基础路由常用体验版。它把用户每天最常用的 `Router.default` / `think` / `longContext` / `background` / `webSearch` 五个槽位收口到可复制模板、README 使用说明、`ctr doctor` 诊断、`/ui` 路由解释和 packaged smoke 验收里。
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
这个版本的目标是让新用户能完成基础分流配置,并能看懂当前请求为什么选中某个模型;它不把 SmartRouter 完整模板、benchmark 历史看板、托管级一键部署或更复杂模型池策略纳入发布承诺。完整发布边界见 [docs/release-notes-v1.3.0.md](docs/release-notes-v1.3.0.md)。
|
|
19
|
+
|
|
20
|
+
## 后续路线
|
|
21
|
+
|
|
22
|
+
从用户使用频率看,后续演进会优先回到最常用的基础路由和 SmartRouter 体验:
|
|
23
|
+
|
|
24
|
+
- `v1.4.0`:SmartRouter 常用体验,重点收口规则模板、候选模型配置、路由决策解释、sticky/alignment 切换体感和调优建议。
|
|
25
|
+
- `v1.5.0`:多模型收益运营化,继续补 benchmark 历史看板、人工校准表单和评测/真实 trace 的统一解释。
|
|
26
|
+
- `v1.6.0`:服务化与模型池安全体验,继续补服务端安全默认值、密钥轮换手册、主动 pool health、成本/速率元数据和更多调度策略。
|
|
27
|
+
|
|
28
|
+
完整版本计划见 [docs/superpowers/plans/2026-05-07-core-routing-version-plan.md](docs/superpowers/plans/2026-05-07-core-routing-version-plan.md)。
|
|
19
29
|
|
|
20
30
|
## 功能概览
|
|
21
31
|
|
|
@@ -25,8 +35,8 @@ Claude Trigger Router 是给 Claude Code 用的本地路由代理。
|
|
|
25
35
|
- **基础路由**:用 `Router.default`、`Router.think`、`Router.longContext` 等槽位指定不同任务的默认模型。
|
|
26
36
|
- **SmartRouter**:先用显式规则命中高确定性任务,也可以在规则未命中时让路由模型从候选模型中自动选择。
|
|
27
37
|
- **Governance 观测**:记录 trace、metrics、异常摘要和健康状态,帮助你理解路由选择和运行风险。
|
|
28
|
-
- **路由评测**:`ctr eval --tasks` 查看固定任务契约,`ctr eval --input results.json` 离线评分,`ctr eval --run --models "sonnet;haiku"` 真实调用 CTR 做多模型 A/B
|
|
29
|
-
- **doctor
|
|
38
|
+
- **路由评测**:`ctr eval --tasks` 查看固定任务契约,`ctr eval --input results.json` 离线评分,`ctr eval --run --models "sonnet;haiku"` 真实调用 CTR 做多模型 A/B;追加 `--judge-model` 后可调用一个 LLM 裁判模型给结果打分。
|
|
39
|
+
- **doctor 诊断**:检查配置、服务可启动性、基础路由槽位、上下文窗口提示、鉴权安全状态、模型兼容策略和可选模型探测。
|
|
30
40
|
- **UI 工作台**:`ctr ui` 打开本地页面,查看服务上下文、远程状态、鉴权安全状态、配置草稿、compiled models、capability warnings、治理 trace、metrics 和 Health 摘要。
|
|
31
41
|
- **远程状态基础**:可配置 `Runtime.remote_service`,通过 `/api/remote-status` 查看远程服务健康、compiled model 摘要和治理告警摘要。默认用户不需要配置远程模式。
|
|
32
42
|
|
|
@@ -244,6 +254,27 @@ Router:
|
|
|
244
254
|
|
|
245
255
|
推荐所有路由字段都引用 `Models[].id`,比如上面的 `sonnet`、`reasoner`。
|
|
246
256
|
|
|
257
|
+
## 基础路由五个槽位
|
|
258
|
+
|
|
259
|
+
日常使用优先理解这五个槽位。最小可用配置只需要 `default`;当你开始接入多个模型时,再逐步补 `think`、`longContext`、`background` 和 `webSearch`。
|
|
260
|
+
|
|
261
|
+
| 槽位 | 何时触发 | 推荐放什么模型 |
|
|
262
|
+
|---|---|---|
|
|
263
|
+
| `Router.default` | 普通请求、规则未命中、其他槽位未配置时 | 稳定通用模型 |
|
|
264
|
+
| `Router.think` | 请求包含 `thinking` 时 | 推理能力更强的模型 |
|
|
265
|
+
| `Router.longContext` | 输入超过 `longContextThreshold`,或当前模型 `safe_input_tokens` 不够时 | 上下文窗口更大的模型 |
|
|
266
|
+
| `Router.background` | Claude Code 轻量后台模型请求时 | 便宜、快、可本地化的模型 |
|
|
267
|
+
| `Router.webSearch` | 请求包含 `web_search` 工具时 | 支持搜索工具或搜索结果处理稳定的模型 |
|
|
268
|
+
|
|
269
|
+
可复制模板见 `config/trigger.routing.yaml`。它把五个槽位都写完整,并给模型补了 `metadata.context_window_tokens` / `metadata.safe_input_tokens`,方便 `ctr doctor` 和运行时提前识别大上下文请求。
|
|
270
|
+
|
|
271
|
+
常见误区:
|
|
272
|
+
|
|
273
|
+
- 不要把 `Router.longContext` 指向比默认模型窗口更小的模型。
|
|
274
|
+
- 不确定某个模型是否支持 reasoning 时,先不要放进 `Router.think`;运行 `ctr doctor` 会提示能力不匹配。
|
|
275
|
+
- `background` 可以先不配,未配置时会回到 `default`。
|
|
276
|
+
- `webSearch` 不是“联网开关”,它只是 web search 请求出现时的模型槽位。
|
|
277
|
+
|
|
247
278
|
## 显式规则路由
|
|
248
279
|
|
|
249
280
|
适合能用关键词稳定识别的任务,例如架构设计、代码审查、长文档评审。
|
|
@@ -369,6 +400,7 @@ Health 摘要下方的 action 可以直接把 trace 表切到对应排查视图
|
|
|
369
400
|
ctr eval --tasks
|
|
370
401
|
ctr eval --input results.json
|
|
371
402
|
ctr eval --run --models "sonnet;haiku"
|
|
403
|
+
ctr eval --run --models "sonnet;haiku" --judge-model sonnet
|
|
372
404
|
```
|
|
373
405
|
|
|
374
406
|
输入文件可以是数组,也可以是 `{ "results": [...] }`:
|
|
@@ -379,12 +411,27 @@ ctr eval --run --models "sonnet;haiku"
|
|
|
379
411
|
"taskId": "coding_fix",
|
|
380
412
|
"model": "provider,model",
|
|
381
413
|
"output": "模型输出文本",
|
|
382
|
-
"latencyMs": 1200
|
|
414
|
+
"latencyMs": 1200,
|
|
415
|
+
"humanScore": 0.9,
|
|
416
|
+
"judgeScore": 0.85,
|
|
417
|
+
"calibrationNotes": "人工或外部 LLM 裁判的可选说明",
|
|
418
|
+
"judgeFindings": ["可选裁判发现"]
|
|
383
419
|
}
|
|
384
420
|
]
|
|
385
421
|
```
|
|
386
422
|
|
|
387
|
-
`ctr eval --tasks` 会列出固定任务的 prompt、expected output、关键词、字符数、延迟预算、质量维度和 result template;加 `--json` 可导出给后续自动执行器或外部脚本。当前内置任务覆盖 quick reply、coding、architecture、long context、server auth/deployment 和 model pool incident。评测会输出按模型和任务聚合的 pass rate、quality、speed、latency、best run、维度均分和失败 findings
|
|
423
|
+
`ctr eval --tasks` 会列出固定任务的 prompt、expected output、关键词、字符数、延迟预算、质量维度和 result template;加 `--json` 可导出给后续自动执行器或外部脚本。当前内置任务覆盖 quick reply、coding、architecture、long context、server auth/deployment 和 model pool incident。评测会输出按模型和任务聚合的 pass rate、quality、speed、latency、best run、维度均分和失败 findings;默认是离线 deterministic rubric,不等同于人工复核。
|
|
424
|
+
|
|
425
|
+
如果你已经有人工复核或外部 LLM 裁判结果,可以在输入里补 `humanScore` / `judgeScore`,范围是 `0..1`。报告会生成 calibration summary,并标出 deterministic rubric 与人工/裁判结果差异较大的任务,帮助维护者判断某个模型组合是否真的带来质量提升。
|
|
426
|
+
|
|
427
|
+
也可以让 CTR 自动调用一个裁判模型:
|
|
428
|
+
|
|
429
|
+
```bash
|
|
430
|
+
ctr eval --input results.json --judge-model sonnet --base-url http://127.0.0.1:5678 --api-key <client-or-bootstrap-key>
|
|
431
|
+
ctr eval --run --models "sonnet;haiku" --judge-model sonnet --base-url http://127.0.0.1:5678 --api-key <client-or-bootstrap-key>
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
裁判模型会通过同一个 CTR `/v1/messages` 入口收到固定 JSON rubric 提示,并返回 `judgeScore`、`judgeFindings` 和 `calibrationNotes`。如果裁判响应不可解析、超时或返回 HTTP 错误,报告会记录 `judge_error`,但不会把失败裁判误算进 calibration score。
|
|
388
435
|
|
|
389
436
|
如果本机或远端 CTR 已启动,也可以显式自动跑固定任务集:
|
|
390
437
|
|
|
@@ -392,7 +439,7 @@ ctr eval --run --models "sonnet;haiku"
|
|
|
392
439
|
ctr eval --run --models "sonnet;haiku" --base-url http://127.0.0.1:5678 --api-key <client-or-bootstrap-key>
|
|
393
440
|
```
|
|
394
441
|
|
|
395
|
-
`--run` 会对每个模型逐个调用 `POST /v1/messages`,默认 `--concurrency 2`、`--timeout-ms 30000`、`--max-tokens 768`。多个模型用分号 `;` 分隔,因为 legacy
|
|
442
|
+
`--run` 会对每个模型逐个调用 `POST /v1/messages`,默认 `--concurrency 2`、`--timeout-ms 30000`、`--max-tokens 768`。多个模型用分号 `;` 分隔,因为 legacy 模型引用本身可能包含逗号。追加 `--judge-max-tokens 256` 可调整裁判输出长度。该模式会真实调用模型服务并消耗上游额度;启用 `--judge-model` 时会额外消耗裁判模型额度。
|
|
396
443
|
|
|
397
444
|
如果服务没有启动,`ctr ui` 会提示先运行:
|
|
398
445
|
|
|
@@ -424,6 +471,8 @@ ctr doctor
|
|
|
424
471
|
- 当前监听地址;server/cloud 会提示远程客户端应设置的 `ANTHROPIC_BASE_URL`
|
|
425
472
|
- 当前鉴权状态;如果 server/cloud 或公网监听没有配置 `APIKEY` / managed key,会提示安全风险
|
|
426
473
|
- 如果启用了 `Runtime.remote_service`,会单独检查远程服务可达和 ready 状态
|
|
474
|
+
- 基础路由槽位:`Router.default` / `think` / `longContext` / `background` / `webSearch` 是否能解析到模型
|
|
475
|
+
- 上下文窗口提示:槽位模型是否缺少 `metadata.context_window_tokens` / `metadata.safe_input_tokens`,以及 `Router.longContext` 是否真的比默认模型更适合大上下文
|
|
427
476
|
- 模型兼容策略和请求编译方式
|
|
428
477
|
- capability hint 可能触发的运行时降级
|
|
429
478
|
- 在你确认后,对模型发送最小探测请求
|
|
@@ -481,6 +530,7 @@ GET /api/auth/audit
|
|
|
481
530
|
| `ctr eval --tasks` | 查看固定评测任务、prompt 和 rubric |
|
|
482
531
|
| `ctr eval --input results.json` | 离线固定任务集评测 |
|
|
483
532
|
| `ctr eval --run --models "sonnet;haiku"` | 自动调用 CTR 后评测固定任务集 |
|
|
533
|
+
| `ctr eval --run --models "sonnet;haiku" --judge-model sonnet` | 自动执行并追加 LLM 裁判校准 |
|
|
484
534
|
| `ctr ui` | 打开本地 UI 工作台 |
|
|
485
535
|
| `ctr version` | 查看版本 |
|
|
486
536
|
| `ctr upgrade` | 升级 |
|
|
@@ -508,6 +558,7 @@ setup 会自动探测旧配置,并优先提供迁移选项。迁移后的配
|
|
|
508
558
|
## 更多示例和文档
|
|
509
559
|
|
|
510
560
|
- 最小示例:`config/trigger.example.yaml`
|
|
561
|
+
- 基础路由五槽位示例:`config/trigger.routing.yaml`
|
|
511
562
|
- 高级示例:`config/trigger.advanced.yaml`
|
|
512
563
|
- 配置细节:`docs/configuration-guide.md`
|
|
513
564
|
- Models 迁移:`docs/models-migration-guide.md`
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Claude Trigger Router 基础路由配置示例
|
|
2
|
+
# 用于理解 Router.default / think / longContext / background / webSearch 五个常用槽位。
|
|
3
|
+
# 复制到 ~/.claude-trigger-router/config.yaml 后,先替换 API Key 和上游模型名。
|
|
4
|
+
|
|
5
|
+
HOST: "127.0.0.1"
|
|
6
|
+
PORT: 5678
|
|
7
|
+
|
|
8
|
+
LOG: true
|
|
9
|
+
LOG_LEVEL: "debug"
|
|
10
|
+
|
|
11
|
+
Models:
|
|
12
|
+
- id: sonnet
|
|
13
|
+
api: "https://openrouter.ai/api/v1/chat/completions"
|
|
14
|
+
key: "sk-xxx"
|
|
15
|
+
interface: "openai"
|
|
16
|
+
model: "anthropic/claude-sonnet-4"
|
|
17
|
+
thinking: "auto"
|
|
18
|
+
metadata:
|
|
19
|
+
context_window_tokens: 200000
|
|
20
|
+
safe_input_tokens: 180000
|
|
21
|
+
|
|
22
|
+
- id: reasoner
|
|
23
|
+
api: "https://api.deepseek.com/chat/completions"
|
|
24
|
+
key: "sk-xxx"
|
|
25
|
+
interface: "openai"
|
|
26
|
+
model: "deepseek-reasoner"
|
|
27
|
+
thinking: "high"
|
|
28
|
+
metadata:
|
|
29
|
+
context_window_tokens: 64000
|
|
30
|
+
safe_input_tokens: 56000
|
|
31
|
+
|
|
32
|
+
- id: long_context
|
|
33
|
+
api: "https://openrouter.ai/api/v1/chat/completions"
|
|
34
|
+
key: "sk-xxx"
|
|
35
|
+
interface: "openai"
|
|
36
|
+
model: "google/gemini-2.5-pro"
|
|
37
|
+
thinking: "auto"
|
|
38
|
+
metadata:
|
|
39
|
+
context_window_tokens: 1000000
|
|
40
|
+
safe_input_tokens: 900000
|
|
41
|
+
|
|
42
|
+
- id: fast_background
|
|
43
|
+
api: "http://localhost:11434/v1/chat/completions"
|
|
44
|
+
key: "ollama"
|
|
45
|
+
interface: "openai"
|
|
46
|
+
model: "qwen2.5-coder:latest"
|
|
47
|
+
thinking: "off"
|
|
48
|
+
metadata:
|
|
49
|
+
context_window_tokens: 32768
|
|
50
|
+
safe_input_tokens: 24000
|
|
51
|
+
|
|
52
|
+
Router:
|
|
53
|
+
# 默认槽位:普通对话、代码生成、规则未命中时使用。
|
|
54
|
+
default: "sonnet"
|
|
55
|
+
|
|
56
|
+
# 思考槽位:请求包含 thinking 时优先使用。
|
|
57
|
+
think: "reasoner"
|
|
58
|
+
|
|
59
|
+
# 长上下文槽位:输入超过阈值,或当前模型 safe_input_tokens 不够时使用。
|
|
60
|
+
longContext: "long_context"
|
|
61
|
+
longContextThreshold: 60000
|
|
62
|
+
|
|
63
|
+
# 后台槽位:Claude Code 轻量后台模型请求时使用。
|
|
64
|
+
background: "fast_background"
|
|
65
|
+
|
|
66
|
+
# 联网搜索槽位:请求包含 web_search 工具时使用。
|
|
67
|
+
webSearch: "sonnet"
|