Skip to content

feat(session-routing): 新增基于 Session 标题前缀的可配置 Vendor 自动绑定#260

Merged
ThreeFish-AI merged 1 commit into
feature/1.x.xfrom
ThreeFish-AI/cc-session-vendor-zhipu-switch
Jun 7, 2026
Merged

feat(session-routing): 新增基于 Session 标题前缀的可配置 Vendor 自动绑定#260
ThreeFish-AI merged 1 commit into
feature/1.x.xfrom
ThreeFish-AI/cc-session-vendor-zhipu-switch

Conversation

@ThreeFish-AI

@ThreeFish-AI ThreeFish-AI commented Jun 7, 2026

Copy link
Copy Markdown
Owner

背景与动机

CC 调用经由本代理时,vendor 路由此前仅能通过全局 tiers 优先级或按 session_key/client_category 的 Session Policy 控制,缺少按会话语义自动分流的能力。业务上存在这样的诉求:标题以「# 目标 (Goal)」为前缀的 Session 属于特定类型任务,应稳定走指定 vendor(如 zhipu),而非默认链路。

本 PR 新增基于 Session 标题前缀的 Vendor 自动绑定机制,且将前缀命中条件设计为可配置项(而非代码写死),以满足后续灵活扩展。

主要变更

  • 新增配置模型 TitleVendorBindingprefix + vendor,均带非空约束),挂载于既有 session_policies.title_vendor_bindings 配置段,支持多条规则按序匹配、首次命中生效,置空 [] 即禁用。
  • 默认配置开箱即用:# 目标 → zhipu
  • 核心逻辑 _apply_title_based_policy:在标题提取后、tier 解析前注入,命中前缀时调用 SessionPolicyResolver.upsert() 建立运行时绑定,随后 _resolve_effective_tiers 自然将目标 vendor 提升至首位。
  • 配置透传config → app.py → RequestRouter → _RouteExecutor 全链路打通。

实现要点

  • 复用既有机制:直接复用 SessionPolicyResolver.upsert() 运行时绑定能力,零侵入现有路由逻辑,流式与非流式两条路径一致接入。
  • 仅新 Session 首请求生效:避免覆盖用户经 API 手动设置的绑定,已通过 is_new=False 用例显式锁定该语义。
  • 健壮性兜底:启动期校验绑定引用的 vendor 是否存在(未知则告警而非硬失败,与手动绑定 API 语义对齐);prefix/vendor 施加 min_length=1 约束,杜绝空前缀匹配全量 Session 的误配置。
  • 测试覆盖:新增 17 个用例,覆盖前缀匹配/非匹配/中间匹配/多规则、空标题与空配置、tier 提升、未知 vendor、配置校验,以及流式与非流式端到端绑定;全量 1596 测试通过,ruff lint/format 全绿。

当 Session 标题以配置前缀(默认「# 目标」)开头时,自动将该 Session
绑定到指定 vendor(默认 zhipu),不走默认 vendor 路由。前缀与目标
vendor 均通过 YAML 配置(session_policies.title_vendor_bindings),
支持多条规则、按顺序匹配首次命中生效、置空列表即禁用。

实现复用现有 SessionPolicyResolver.upsert() 运行时绑定机制,在标题
提取后、tier 解析前注入策略,仅对新 Session 首请求生效以避免覆盖手动
绑定。新增启动期 vendor 存在性校验(未知 vendor 告警而非硬失败)与
prefix/vendor 非空约束(杜绝空前缀全量误绑定)。

- config/session_policy.py: 新增 TitleVendorBinding 模型 + 配置字段
- config/config.default.yaml: 默认「# 目标」→ zhipu 绑定
- routing/executor.py: _apply_title_based_policy 方法、启动校验、双路径注入
- routing/router.py + server/app.py: 配置透传
- tests: 新增 17 个用例(前缀匹配/边缘/校验/流式与非流式端到端)

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
@ThreeFish-AI ThreeFish-AI merged commit 728d86a into feature/1.x.x Jun 7, 2026
6 checks passed
@ThreeFish-AI ThreeFish-AI deleted the ThreeFish-AI/cc-session-vendor-zhipu-switch branch June 11, 2026 07:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant