--- id: T-599 title: AI工场 BYOK OpenAI Provider 契约、白名单与套餐校验对齐 phase: 8 deps: [T-596] status: TODO created: 2026-07-11 --- ## 问题 / 背景 BYOK 第一期开 OpenAI Provider 时,最大的风险不是 UI,而是绕过 cmhub 授权、把用户 Key 泄露到日志,或让客户端恢复任意 URL 直连。必须先和 cmhub 固化 Provider 白名单、设备授权、套餐校验、错误码和异步任务契约,再写客户端代码。 ## 方案 - 核对 cmhub BYOK V1.5 API:device credential、product、provider、model_alias、task secret、submit/poll、download、错误码、零点数使用记录和幂等键。 - 第一阶段只允许 OpenAI Provider;允许的模型能力由服务端白名单提供,不允许客户端填写任意 URL 或任意模型名。 - 明确 OpenAI 模型档位: - 文本/提示词辅助默认用 T-597 推荐的平衡档,允许高质量/省点档。 - 图像生成/编辑优先使用服务端白名单中的 GPT Image 2 等图像能力别名。 - 无有效套餐/设备授权时,服务端必须拒绝 submit;客户端只展示中文原因,不本地绕过。 - 明确 BYOK `points_cost=0` 的账本语义:不扣 cmhub 点数,但仍记录使用次数、provider、call_id/task_id 和“费用由模型服务商收取”。 ## 验收要点 - 有版本化契约文档或接口样例,覆盖成功、无套餐、设备不匹配、Provider 禁用、模型不允许、Key 无效、内容被拒、上游失败、任务超时。 - 明确 Key 不出现在 request_payload、CallRecord 明文字段、队列日志、遥测、异常监控或导出文件。 - 明确 submit 之后的任务状态与 T-590/T-594 的 image_studio_jobs 生命周期兼容。 - 若 cmhub 契约缺失,任务转 `BLOCKED`,不进入 T-600/T-601。 - 本任务不写生产代码;可补文档和 mock 契约。验证至少运行 `git diff --check`。 ## 边界(不改什么) - 不实现 UI、不保存 Key、不发真实 OpenAI 请求。 - 不支持任意 Provider、任意 URL、客户端 direct 或同步长等待。 - 不改变 cmhub 托管模型默认路径。 ## 执行记录 (完成后记录契约来源、白名单结论和是否解除后续实现阻塞。)