archive: Phase 1 基础设施搭建归档

归档信息:
- 变更名称:phase-1-infrastructure
- 工作流:spec-driven
- 归档位置:openspec/changes/archive/2026-06-23-phase-1-infrastructure/

完成情况:
- ✅ 所有产物完成(proposal, design, specs, tasks)
- ✅ 任务完成:33/35 (94%)
- ⚠️ 2 个任务跳过(混合检索、集成测试,有充分理由)

验收结果:
- ✅ 静态验证:编译通过
- ✅ 脚本验证:16/16 单元测试通过
- ✅ 端到端验证:上传→索引→检索→删除完整流程

Delta Specs:
- 跳过同步(用户选择)
- functional-specs.md 保留在归档目录中

devflow 档案:
- ✅ 已完整回填(brief, evidence, decisions, acceptance)
- ✅ devflow/index.md 状态更新为 archived
This commit is contained in:
zhuyongxin
2026-06-23 19:20:05 +08:00
parent 1793e045e1
commit c86045b33f
9 changed files with 239 additions and 0 deletions
@@ -0,0 +1,171 @@
# Proposal: Phase 1 基础设施搭建
## 问题
当前项目是一个 Demo,需要改造为 MVP 诊断 Agent 系统。Phase 1 需要搭建基础设施:
- 缺少持久化层(MySQL + JPA)
- 缺少分布式会话管理(Redis)
- 代码结构需要重构(包名、分层)
- 缺少文档管理基础功能
## 建议方案
### 1. 数据持久化
**方案**:Spring Data JPA + MySQL + Flyway
**理由**:
- JPA 是 Spring Boot 标准持久化方案
- Flyway 管理数据库版本,团队协作友好
- 3 张表设计已完成(docs/tables/)
**实现**:
1. 添加依赖(spring-boot-starter-data-jpa, mysql-connector-j, flyway-core)
2. 创建 3 个 Flyway 迁移脚本(V001/V002/V003)
3. 创建 JPA 实体类(DiagnosisRecord, CaseLibrary, ApiDocument)
4. 创建 Repository 接口(继承 JpaRepository)
### 2. 会话管理
**方案**:Redis 替代内存 HashMap
**理由**:
- 支持分布式部署
- 自动 TTL(30 分钟)
- Spring Data Redis 集成简单
**实现**:
1. 添加 spring-boot-starter-data-redis 依赖
2. 创建 SessionManager 接口 + RedisSessionManager 实现
3. SessionContext 使用 JSON 序列化
### 3. 代码结构重构
**方案**:包名重构 + 分层优化 + DTO 抽离
**包名重构**:
- `org.example` → `com.superbiz.agent`
- 工具:IDEA Refactor → Rename Package
**分层结构**:
```
com.superbiz.agent/
├── controller/ # REST API
├── service/ # 业务逻辑
├── repository/ # 数据访问
├── domain/
│ ├── entity/ # JPA 实体
│ ├── dto/ # DTO
│ └── enums/ # 枚举
├── agent/ # Agent 层(Phase 2)
├── tool/ # 工具层
├── session/ # 会话管理
└── config/ # 配置
```
**DTO 抽离**:
- Controller 不直接依赖 Entity
- 使用 MapStruct 做对象转换
### 4. 文档管理
**方案**:CRUD + Milvus 向量同步
**功能**:
1. 上传接口:文件 → 文本提取 → 分块 → 向量化 → MySQL + Milvus
2. 查询接口:分页、过滤
3. 删除接口:MySQL + Milvus 同步删除
4. 检索工具:精确匹配(MySQL)+ 语义检索(Milvus)+ RRF 融合
## 范围
**包含**:
- Day 1-2: MySQL 表 + JPA + Repository + Redis 会话
- Day 3: 包名重构 + 分层优化 + DTO 抽离
- Day 4-5: 文档管理 4 个接口 + 混合检索工具
**不包含**:
- Agent 功能(Phase 2)
- 意图识别和 RAG(Phase 2)
- Verifier 和 Harness(Phase 3)
## 非目标
- 性能优化(后续优化)
- 完整的权限控制(MVP 不需要)
- 前端界面(只做后端 API)
## 来自 devflow 的上下文约束
无(这是首个 OpenSpec,devflow 目录为空)
## 风险
1. **包名重构影响范围大**
- 缓解:先提交当前代码,独立分支重构
- 验证:重构后编译通过 + 启动成功
2. **Flyway 首次运行可能失败**
- 缓解:本地 MySQL 先手动测试
- 回退:Flyway 支持 repair 修复
3. **Redis 本地环境依赖**
- 缓解:提供 Docker Compose 配置
- 回退:可降级为内存实现(测试用)
## 关键假设
1. MySQL 8.0+ 和 Redis 6.0+ 可用(本地或 Docker)
2. 现有 Milvus 集成不需要改动
3. 单元测试覆盖率目标:70%+
## 成功标准
1. ✅ 3 张表创建成功,索引完整
2. ✅ Repository 层单元测试通过
3. ✅ Redis 会话存取正常,TTL 生效
4. ✅ 包名重构完成,编译通过
5. ✅ 文档上传/查询/删除接口可用
6. ✅ 混合检索工具返回正确结果
7. ✅ 整体测试覆盖率 ≥ 70%
## 产出文件(预期)
**数据库迁移**:
- `src/main/resources/db/migration/V001__create_diagnosis_record.sql`
- `src/main/resources/db/migration/V002__create_case_library.sql`
- `src/main/resources/db/migration/V003__create_api_document.sql`
**实体类**:
- `com.superbiz.agent.domain.entity.DiagnosisRecord`
- `com.superbiz.agent.domain.entity.CaseLibrary`
- `com.superbiz.agent.domain.entity.ApiDocument`
**Repository**:
- `com.superbiz.agent.repository.DiagnosisRecordRepository`
- `com.superbiz.agent.repository.CaseLibraryRepository`
- `com.superbiz.agent.repository.ApiDocumentRepository`
**会话管理**:
- `com.superbiz.agent.session.SessionManager`
- `com.superbiz.agent.session.RedisSessionManager`
- `com.superbiz.agent.session.SessionContext`
**文档管理**:
- `com.superbiz.agent.controller.DocumentController`
- `com.superbiz.agent.service.DocumentService`
- `com.superbiz.agent.service.TextExtractor`
- `com.superbiz.agent.tool.DocumentSearchTool`
**配置**:
- `pom.xml`(增加依赖)
- `application.yml`(增加 MySQL + Redis 配置)
**测试**:
- `*RepositoryTest.java`
- `*ServiceTest.java`
- `*ControllerTest.java`
## 工期估算
5 天(按实施计划)