后端服务拆分设计
版本号:v0.1.0
最后更新:2026-04-04
1. 目的
本文档用于定义第一阶段后端服务的拆分方式,明确各服务的职责、边界和协作关系。
2. 拆分原则
第一阶段的服务拆分应遵循以下原则:
- 按职责拆分,而不是按技术炫技拆分
- 先保证主链路清晰,再考虑进一步解耦
- 能单体时不强拆,能边界清晰时不混杂
3. 第一阶段服务建议
第一阶段建议逻辑上拆为四个核心部分:
- API 服务
- AI 编排服务
- 实验执行服务
- 模型服务
其中:
- API 服务与 AI 编排服务在第一阶段可以部署在同一 Python 进程或同一应用中
- 模型服务可以独立部署
- 实验执行服务建议独立出来
4. API 服务
4.1 职责
API 服务负责:
- 接收终端请求
- 鉴权与会话入口
- Observation 创建
- 分析任务创建
- 查询 Experiment 和 Conclusion
- 推送状态变更
4.2 不负责
API 服务不负责:
5. AI 编排服务
5.1 职责
AI 编排服务负责:
- 汇总当前上下文
- 调用模型
- 生成假设
- 生成实验计划
- 生成阶段性结论和最终结论
5.2 输入
- Observation 摘要
- Evidence 列表
- Experiment 历史摘要
- 可用链模板与模块摘要
5.3 输出
OrchestratorPlan
InterimConclusion
FinalConclusion
6. 实验执行服务
6.1 职责
实验执行服务负责:
- 读取实验计划
- 用注册表校验计划
- 调用算法模块
- 收集中间输出
- 生成
Evidence
- 生成
ScoreCard
- 记录
failureReasons
6.2 不负责
实验执行服务不负责:
7. 模型服务
7.1 职责
模型服务负责:
- 托管 Gemma 4
- 提供稳定推理接口
- 统一模型版本和配置
7.2 与 AI 编排服务的关系
AI 编排服务是模型服务的调用方。
模型服务不理解实验业务,只负责模型推理。
8. 存储层职责
虽然存储层不是“服务”,但它在拆分设计中非常关键。
建议统一保存:
- Observation
- Evidence
- Experiment
- Conclusion
- Session 状态
这样所有服务都围绕同一批核心实体协作,而不是各自维护私有状态。
9. 推荐协作流程
推荐第一阶段流程如下:
- Flutter 终端上传样本
- API 服务创建 Observation 和分析任务
- API 服务触发本地或远端初始 probe
- AI 编排服务读取当前上下文,生成实验计划
- 实验执行服务执行计划并写回 Experiment/Evidence
- AI 编排服务继续判断是否进入下一轮
- 形成 Conclusion
- API 服务返回给终端
10. 第一阶段部署建议
第一阶段建议偏保守部署:
- API 服务 + AI 编排服务:一起部署
- 实验执行服务:独立部署
- 模型服务:独立部署
- PostgreSQL:独立实例
这样可以在保持边界清晰的同时,避免第一阶段服务过多导致运维复杂。
11. 后续可扩展方向
当系统成熟后,可进一步扩展:
- 独立任务队列
- 独立调度器
- 多执行 worker
- 多模型路由
- 多模态执行器拆分
但这些不应成为第一阶段前置条件。
12. 结论
第一阶段后端服务拆分建议为:
- API 服务
- AI 编排服务
- 实验执行服务
- 模型服务
其中 API 与 AI 编排可暂时合并部署,实验执行与模型服务保持独立,既保证边界清晰,也保持实现可控。