状态:M1 已交付(2026-08-22),M2 排期 依据:设计 spec(已批准)· 市场调研:Notion AI 官方博客 / Braintrust×Notion / Obsidian Copilot / Granola / ZenML(缓存
.firecrawl/)· 旧项目参照:ai-gateway(providers/fallback/circuit_breaker/key_pool + 40+ chains) 前置决策:充值系统远期(本版本只留桩)
AI 从"单 Provider 直连 + 3 个散装适配器"升级为"Provider 抽象 + 能力声明 + 产出策略"三层平台——为多 AI 能力接入与产出质量定制铺路。
| # | 需求 | 落点 |
|---|---|---|
| 1 | 为充值系统做准备(远期) | 只留桩:命令空间 ai_quota_* 隔离预留;本期做本地用量统计 |
| 2 | 为多 AI 能力接入做准备 | Provider 层(BYOK 多 Provider + 降级链)+ 能力层(声明化 JSON + 薄适配器,旧项目 chains 范式) |
| 3 | 产出质量可定制 | 策略层(能力维度 + 档位预设 + prompt 指令注入);设置页产出偏好面板 |
| 4 | 设置页 AI 配置重构 | AiServicePanel 拆分 4 面板;移除 SiliconFlow 第三方余额卡片;品牌解绑 |
ai_provider.rs:AiProviderConfig + ai_providers.json 存储 + 内置预设模板(SiliconFlow/DeepSeek/OpenRouter/Ollama)ai_provider_client.rs:OpenAI 兼容抽象(chat_text/chat_json 按 Provider 配置;AiClientError 六类契约不动)ai_credentials.rs扩展:per-provider DPAPI 密钥(provider:<id>前缀)- 兼容迁移:旧 ai_settings.json → 自动生成 "SiliconFlow" Provider(用户无感)
- 降级链简单版:Network/Server/Quota 失败自动切下一个(最多一次);Auth/Balance 不降级
- 设置页拆出
AiProviderSettings(列表/添加/编辑/测试/启用);移除余额卡片;审计保留展开态
- ai_provider.rs:配置模型 + 4 预设模板 + 存储 + 旧配置迁移(7 单测)
- ai_credentials.rs:CredentialStore scope 化(per-provider DPAPI 文件;default 兼容旧文件)
- ai_client.rs:from_provider + from_settings_with_store + is_fallbackable + fallback_provider_ids(行数豁免登记)
- commands_ai_providers.rs:presets/list/add/update/remove/save_key/clear_key/set_default/test 九命令 + resolve_default_provider_key(env > per-provider > default 三级链)
- AppState:ai_providers 内存态单点 + ai_providers_path + 首启迁移接线(含密钥复制)
- 前端:AiProviderSettings 面板(列表/添加向导/编辑/测试/密钥内联输入/默认/确认弹窗;行数豁免登记)+ AiServicePanel 瘦身(移除密钥/端点/余额卡片,408→196 行)
- 修复:任务预检密钥源统一(Provider 面板密钥对精修/补充生效);Ollama 免密钥测试连接(AiClientConfig.is_local)
- 验证:cargo test 1521 passed / vitest 48 passed / tsc 零错误 / clippy 新增零警告
- 遗留:显式 provider_ids 任务参数与降级链实际接线(M3);fallbackOrder UI 入口(M3);Ollama 预设默认禁用待用户启用;审计折叠"高级"区(M3,spec §五);AiRefineCard/EnrichPanel 授权文案去 SiliconFlow 特指(M3)
ai_strategy.rs:StrategyDim / StrategyPreset / 指令注入纯函数- 能力声明 JSON 增加
strategy_dims+presets(note_refine 先行) - ai_settings.json 增加
strategy字段(全局默认档位 + 覆盖 map);任务命令接受策略覆盖参数 - 设置页
AiPreferenceSettings(M2 内部分两小步:先档位选择,再逐项微调 UI)
- 3 适配器(refine/enrich/text_filter)全部声明化迁移;prompt 组装管线统一(core + style + strategy + few_shot + output_format)
- 旧命令退役(ai_get_settings 等过渡命令移除)
- 文档:ADR-019 + 本版本文档 + 全量回归(cargo test / vitest / clippy / tsc)
- 方案 B(能力声明化):替代轻量重构(A)与全量平台化(C);对齐旧项目 chains 范式但 JSON 化,新能力 = 声明 + ≤100 行适配器
- 协议不随策略变:策略只改 prompt,响应 schema 与校验器零改动——档位切换不引入新校验面
- 错误契约不动:AiClientError 六类 / AiTaskFailure 四类映射不变,前端映射零改动
- 授权红线不动:enabled + authorized 双条件 gate 保留;密钥永不出本机(DPAPI per-provider)
- 身份诚实:AI 产出仍标记 ai-enhanced,策略不改来源标记
- 余额卡片移除:不展示第三方钱包(SiliconFlow 余额),测试连接保留但只验证密钥有效性
- YAGNI:熔断器/Key 池/流式输出/LLM-judge 评估不纳入本期(网关侧或规模后演进)
- 设置页可添加 ≥2 个 Provider 并切换默认模型;任务按所选 Provider 执行
- Provider 故障(mock 注入)自动降级到下一个,失败原因可见不静默
- 精修任务可选择产出档位(如"极简"),prompt 含对应策略指令,响应校验与档位无关
- 旧配置迁移无感:升级后原密钥/模型自动出现在 SiliconFlow Provider
- 余额卡片不再展示;审计保留展开态
- 全量回归通过(cargo test / clippy / vitest / tsc)
- 设计 spec · v0.11 系列总览 ·
- 调研缓存:
.firecrawl/(notion-ai-way.md / notion-braintrust-eval.md / obsidian-copilot-docs.md / granola-transcription.md / search-*.json)