后端技术栈方案
版本号:v0.1.0
最后更新:2026-04-04
1. 目的
本文档用于定义本项目第一阶段的后端技术栈选择,并说明每一层技术的职责边界与选择理由。
2. 设计目标
后端技术栈应满足以下要求:
- 能支撑 AI 编排工作流
- 能支撑算法链执行
- 能支撑结构化实验记录
- 能与 Flutter 终端稳定通信
- 能支持后续扩展到更多模态和更多实验类型
3. 总体建议
第一阶段建议采用混合后端架构:
- API 层:Python + FastAPI
- AI 编排层:Python
- 算法执行层:Rust
- 模型服务层:vLLM + Gemma 4
- 数据存储层:PostgreSQL
4. 为什么不建议单语言统一
如果后端全部使用单一语言,会在某一侧明显吃亏:
- 全 Dart:模型编排与算法生态不占优
- 全 Rust:第一阶段开发速度较慢,模型编排迭代成本高
- 全 Python:算法执行层和本地可复用核心不够理想
因此第一阶段更合理的做法是:
- 用 Python 负责“快迭代、强表达”的编排层
- 用 Rust 负责“高性能、可复用”的算法执行层
5. API 层选型:FastAPI
5.1 职责
API 层负责:
- Flutter 终端访问入口
- 音频样本上传
- 分析任务发起
- 实验过程查询
- 结论查询
- WebSocket 实时状态推送
5.2 选择理由
FastAPI 适合第一阶段,原因包括:
- 开发效率高
- 类型与 schema 表达清晰
- 适合结构化 API
- 适合快速构建内部平台接口
- 和 Python 编排层天然协同
6. AI 编排层选型:Python 服务
6.1 职责
AI 编排层负责:
- 读取
Observation、Evidence、ExperimentSummary
- 构造 AI 输入
- 调用 Gemma 4
- 生成结构化
OrchestratorPlan
- 输出阶段性结论和最终结论
6.2 选择理由
Python 适合这一层,原因包括:
- LLM 适配生态成熟
- JSON schema 和结构化输出处理方便
- prompt 与编排策略迭代速度快
- 更适合快速试错与优化
7. 算法执行层选型:Rust
7.1 职责
算法执行层负责:
- 执行本地和远端算法链
- 跑基础探针和验证模块
- 生成结构化证据
- 生成评分与失败原因
7.2 选择理由
Rust 适合这一层,原因包括:
- 性能稳定
- 便于控制资源消耗
- 适合做可复用核心库
- 可与 Flutter 终端本地核心共享部分实现
8. 模型服务层选型:vLLM + Gemma 4
8.1 职责
模型服务层负责:
- 承载 Gemma 4
- 为 AI 编排层提供稳定推理接口
8.2 选择理由
第一阶段建议把 Gemma 4 放在后端,而不是手机本地,原因包括:
- 编排任务比终端展示更适合后端集中运行
- 便于统一模型版本和行为
- 便于控制成本与日志
- 便于后续扩展到更复杂实验循环
9. 数据存储层选型:PostgreSQL
9.1 职责
数据存储层负责保存:
- Observation 元数据
- Evidence
- Experiment
- ScoreCard
- Conclusion
- 会话状态
9.2 选择理由
PostgreSQL 适合本项目第一阶段,原因包括:
- 结构化数据支持成熟
- 事务与查询能力稳定
- 适合实验树和状态流转管理
jsonb 适合保存部分灵活证据结构
10. 第一阶段暂不引入的基础设施
第一阶段建议暂不引入:
- 复杂微服务网格
- 大规模消息中间件
- 分布式工作流平台
- 多数据库混搭
原因:
- 当前阶段重点是跑通最小实验闭环
- 过早引入复杂基础设施会拖慢主线
11. 第一阶段推荐后端结构
Flutter App
-> FastAPI API
-> Python Orchestrator
-> Rust Experiment Runner
-> PostgreSQL
-> vLLM (Gemma 4)
12. 结论
第一阶段后端建议采用:
FastAPI 作为 API 与会话入口
Python 作为 AI 编排层
Rust 作为算法执行层
vLLM + Gemma 4 作为模型服务层
PostgreSQL 作为实验数据存储层
该方案在开发效率、性能、结构清晰度和后续扩展性之间较为平衡。