aps-agent/docs/adr/0011-model-endpoint.md

42 lines
2.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ADR-0011:模型与端点(DeepSeek + 本机配置文件)
- **状态**:已接受
- **日期**:2026-09-28
- **决策人**:技术负责人
- **相关**:任务表 A0(决策 D15);ADR-0006(引擎运行形态);ADR-0009(交付形态)
## 背景
引擎要真跑起来就必须调模型。这件事有两个必须现在定的点:用哪个端点,以及密钥放在哪。密钥的处置还牵动一条硬规则——凭据不进模型上下文、不进日志、不进仓库(架构设计 5.1)。
## 选项
| 选项 | 做法 | 代价 | 不选的理由 |
| --- | --- | --- | --- |
| A DeepSeek + 本机配置文件 | 端点用 DeepSeek 的 OpenAI 兼容接口;密钥写在本机配置文件里 | 依赖外部服务可用性 | 选定 |
| B 内网自建网关 | 部署兼容网关,统一收口 | 需要运维与卡资源 | 首版没有现成网关;接口按 OpenAI 兼容写,将来换端点只改配置 |
| C 密钥进环境变量 | 全部走 env | CI 里方便 | 本地开发与桌面端每次都要设环境变量;env 还会被子进程继承,容易外泄 |
## 结论
选 A,并定下配置的三条规则:
| 项 | 结论 |
| --- | --- |
| 端点 | `https://api.deepseek.com/v1`(OpenAI 兼容),模型 `deepseek-chat` |
| 密钥位置 | 本机配置文件 `~/.aps/config.json` 的 `llm.apiKey`;也可用 `APS_CONFIG_FILE` 指定其它路径 |
| 优先级 | 环境变量 > 配置文件 > 默认值(方便 CI 与临时覆盖) |
| 泄露防线 | 密钥不进仓库、不进日志、不进 API 响应;配置对象提供脱敏视图供日志使用 |
| 不可用时 | 模型未配置不阻塞平台启动:默认走假引擎,需要真引擎时报明确错误(A3.3 落地) |
## 影响
- **对代码**:新增 `server/config.ts`;引擎适配层从它取端点与密钥,不自己读环境
- **对任务**:A3.3 子进程接入时把配置注入 Pi 子进程的启动环境;A10.8 发版清单要核对密钥不随包分发
- **对文档**:`.env.example` 改为平台自己的变量;术语表无需改
- **不这么做的后果**:密钥散在代码与 shell 历史里,且子进程继承全部环境变量,泄露面变大
## 遗留
- 生产是否改用内网网关:A10 之前定,届时只改 `llm.baseUrl`
- 是否支持多模型切换(同一个平台配置多个端点):首版不做,等有第二个使用场景再评估