aps-agent/docs/adr/0002-engine-provider-deploy...

37 lines
2.0 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-0002:引擎与 Provider 的部署形态
- **状态**:已接受
- **日期**:2026-09-22
- **决策人**:技术负责人
- **相关**:任务表 A0.3(决策 D1);设计文档《架构设计》第 6 节
## 背景
平台要调用 APS、ERP、EMS 这些业务系统。Provider(能力适配器)跑在平台进程里,还是跑成独立服务,决定了三件事:实现复杂度、故障隔离程度、以及凭据怎么交给 Provider。
约束:「凭据不进模型上下文、不落日志」是硬要求;首版只有内部团队接入,没有第三方;工厂内网部署。
## 选项
| 选项 | 做法 | 代价 | 不选的理由 |
| --- | --- | --- | --- |
| A 进程内 Provider | Core 按 execution 注入短期凭据,Provider 与平台同进程 | 实现简单、无网络鉴权、调试直接 | 选定 |
| B 跨进程 Provider 服务 | 独立服务,双向认证 + 一次性凭据 | 隔离好、可独立发版 | 首版就把鉴权、序列化、部署复杂度前置 |
## 结论
选 A:首版 Provider 运行在平台信任域内,Core 按 execution 注入短期凭据,Provider 不落库、不缓存。
代价用三条约束兜住:**Provider 不得阻塞事件循环**;**重活走异步任务**;**每类调用带超时**。跨进程模式留给第三方接入或 Provider 需要独立发版时启用。
## 影响
- **对代码**:`providers/` 与 `server/core/execution` 同进程运行;`server/provider-sdk/http.ts` 先写好,供将来切跨进程时复用,不改 Provider 实现
- **对任务**:A2 的假 Provider、A5 的首个真实 Provider 都按进程内实现;B5 的契约化接口做成 HTTP,正是为了将来能平滑切成跨进程
- **对文档**:设计文档《架构设计》第 6 节「Provider 契约」
- **不这么做的后果**:首版做跨进程,团队要先把鉴权体系、序列化协议、服务发现做出来,才写第一个能力
## 遗留
跨进程模式的启动条件:第三方团队接入,或某个 Provider 需要独立发版。到 A8 或更晚再评估,不预先设计。