ai-robot-channel/spec/ai-robot/tasks.md

348 lines
12 KiB
Markdown
Raw Normal View History

---
feature_id: "MCA"
title: "多渠道适配主框架任务清单"
status: "draft"
version: "0.1.0"
owners:
- "backend"
last_updated: "2026-02-24"
---
# 多渠道适配主框架任务清单tasks.md
## 任务概览
| 阶段 | 任务数 | 说明 |
|-----|-------|------|
| Phase 1: 基础设施 | 5 | 统一消息模型、配置、数据库 |
| Phase 2: 渠道适配层 | 4 | ChannelAdapter 接口与 WeChatAdapter 重构 |
| Phase 3: 消息路由层 | 4 | MessageRouterService 重构 |
| Phase 4: AI 服务客户端 | 4 | AiServiceClient 实现 |
| Phase 5: 集成测试 | 3 | 端到端测试 |
---
## Phase 1: 基础设施
### TASK-001: 定义统一消息模型 DTO
- **状态**: ✅ 已完成
- **优先级**: P0
- **关联 AC**: AC-MCA-08
- **描述**: 创建 `InboundMessage`、`OutboundMessage`、`SignatureInfo` 等 DTO 类
- **产出物**:
- `src/main/java/com/wecom/robot/dto/InboundMessage.java`
- `src/main/java/com/wecom/robot/dto/OutboundMessage.java`
- `src/main/java/com/wecom/robot/dto/SignatureInfo.java`
- **验收标准**:
- [x] DTO 类包含 design.md 2.1/2.2 定义的所有字段
- [x] 包含 Lombok 注解 (@Data, @Builder)
- [x] 单元测试覆盖字段映射
### TASK-002: 新增配置类
- **状态**: ⏳ 待开始
- **优先级**: P0
- **关联 AC**: AC-MCA-04
- **描述**: 创建 AI 服务配置类和渠道配置类
- **产出物**:
- `src/main/java/com/wecom/robot/config/AiServiceConfig.java`
- `src/main/java/com/wecom/robot/config/ChannelConfig.java`
- `src/main/resources/application.yml` 更新
- **验收标准**:
- [ ] 配置类可正确读取 application.yml
- [ ] 包含默认值
### TASK-003: 数据库 Schema 变更
- **状态**: ⏳ 待开始
- **优先级**: P0
- **关联 AC**: AC-MCA-11
- **描述**: Session 表新增 channel_type 字段
- **产出物**:
- `src/main/resources/db/migration/V1__add_channel_type.sql` (如使用 Flyway)
- 或手动 DDL 脚本
- **验收标准**:
- [ ] DDL 可在线执行
- [ ] 默认值为 'wechat'
- [ ] Session 实体类同步更新
### TASK-004: 添加 Resilience4j 依赖
- **状态**: ⏳ 待开始
- **优先级**: P1
- **关联 AC**: AC-MCA-06, AC-MCA-07
- **描述**: 在 pom.xml 添加 Resilience4j 依赖
- **产出物**:
- `pom.xml` 更新
- **验收标准**:
- [ ] 依赖正确添加
- [ ] 项目可正常构建
### TASK-005: 消息幂等性工具类
- **状态**: ⏳ 待开始
- **优先级**: P0
- **关联 AC**: AC-MCA-11-IDEMPOTENT
- **描述**: 实现基于 Redis 的消息幂等性处理
- **产出物**:
- `src/main/java/com/wecom/robot/util/IdempotentHelper.java`
- **验收标准**:
- [ ] 使用 Redis SETNX 实现
- [ ] TTL 1 小时
- [ ] 单元测试覆盖
---
## Phase 2: 渠道适配层
### TASK-010: 定义 ChannelAdapter 接口
- **状态**: ⏳ 待开始
- **优先级**: P0
- **关联 AC**: AC-MCA-01
- **描述**: 创建核心能力接口和可选能力接口
- **产出物**:
- `src/main/java/com/wecom/robot/adapter/ChannelAdapter.java`
- `src/main/java/com/wecom/robot/adapter/ServiceStateCapable.java`
- `src/main/java/com/wecom/robot/adapter/TransferCapable.java`
- `src/main/java/com/wecom/robot/adapter/MessageSyncCapable.java`
- **验收标准**:
- [ ] 接口定义与 design.md 3.1 一致
- [ ] sendMessage 使用 OutboundMessage 参数
### TASK-011: 实现 WeChatAdapter
- **状态**: ⏳ 待开始
- **优先级**: P0
- **关联 AC**: AC-MCA-02
- **描述**: 将现有 WecomApiService 重构为 WeChatAdapter
- **产出物**:
- `src/main/java/com/wecom/robot/adapter/WeChatAdapter.java`
- **验收标准**:
- [ ] 实现 ChannelAdapter 核心接口
- [ ] 实现 ServiceStateCapable、TransferCapable、MessageSyncCapable
- [ ] 现有功能保持兼容
### TASK-012: 创建 ChannelAdapterFactory
- **状态**: ⏳ 待开始
- **优先级**: P1
- **关联 AC**: AC-MCA-03
- **描述**: 创建渠道适配器工厂,根据 channelType 获取对应适配器
- **产出物**:
- `src/main/java/com/wecom/robot/adapter/ChannelAdapterFactory.java`
- **验收标准**:
- [ ] 支持 wechat 渠道
- [ ] 预留 douyin、jd 扩展点
### TASK-013: 重构 WecomCallbackController
- **状态**: ⏳ 待开始
- **优先级**: P0
- **关联 AC**: AC-MCA-08
- **描述**: Controller 负责验签/解密/解析,构建 InboundMessage
- **产出物**:
- `src/main/java/com/wecom/robot/controller/WecomCallbackController.java` 更新
- **验收标准**:
- [ ] 验签/解密逻辑保持不变
- [ ] 输出 InboundMessage 传递给 MessageRouterService
---
## Phase 3: 消息路由层
### TASK-020: 定义 MessageRouterService 接口
- **状态**: ✅ 已完成
- **优先级**: P0
- **关联 AC**: AC-MCA-08
- **描述**: 创建渠道无关的消息路由服务接口
- **产出物**:
- `src/main/java/com/wecom/robot/service/MessageRouterService.java`
- **验收标准**:
- [x] 接口定义与 design.md 3.2 一致
### TASK-021: 实现 MessageRouterServiceImpl
- **状态**: ✅ 已完成
- **优先级**: P0
- **关联 AC**: AC-MCA-08, AC-MCA-09, AC-MCA-10
- **描述**: 实现消息路由核心逻辑
- **产出物**:
- `src/main/java/com/wecom/robot/service/impl/MessageRouterServiceImpl.java`
- **验收标准**:
- [x] processInboundMessage 实现完整流程
- [x] routeBySessionState 根据状态路由
- [x] 幂等性检查
### TASK-022: 重构 MessageProcessService
- **状态**: ✅ 已完成
- **优先级**: P0
- **关联 AC**: AC-MCA-08
- **描述**: 将现有 MessageProcessService 逻辑迁移到 MessageRouterServiceImpl
- **产出物**:
- `src/main/java/com/wecom/robot/service/MessageProcessService.java` 更新或删除
- **验收标准**:
- [x] 现有功能保持兼容
- [x] 微信专属逻辑移至 WeChatAdapter
### TASK-023: 更新 SessionManagerService
- **状态**: ✅ 已完成
- **优先级**: P0
- **关联 AC**: AC-MCA-11, AC-MCA-12
- **描述**: 支持渠道类型字段
- **产出物**:
- `src/main/java/com/wecom/robot/service/SessionManagerService.java` 更新
- `src/main/java/com/wecom/robot/entity/Session.java` 更新
- **验收标准**:
- [x] 创建会话时记录 channelType
- [x] 支持按 channelType 筛选
---
## Phase 4: AI 服务客户端
### TASK-030: 定义 AI 服务 DTO
- **状态**: ⏳ 待开始
- **优先级**: P0
- **关联 AC**: AC-MCA-04-REQ, AC-MCA-05
- **描述**: 创建 ChatRequest、ChatResponse DTO
- **产出物**:
- `src/main/java/com/wecom/robot/dto/ai/ChatRequest.java`
- `src/main/java/com/wecom/robot/dto/ai/ChatResponse.java`
- **验收标准**:
- [ ] 字段与 openapi.deps.yaml 一致
- [ ] 包含映射方法 (InboundMessage → ChatRequest)
### TASK-031: 实现 AiServiceClient
- **状态**: ⏳ 待开始
- **优先级**: P0
- **关联 AC**: AC-MCA-04, AC-MCA-05
- **描述**: 实现 HTTP 调用 Python AI 服务
- **产出物**:
- `src/main/java/com/wecom/robot/service/AiServiceClient.java`
- `src/main/java/com/wecom/robot/service/impl/AiServiceClientImpl.java`
- **验收标准**:
- [ ] 使用 RestTemplate 调用 /ai/chat
- [ ] 超时 5 秒
- [ ] 正确映射字段
### TASK-032: 实现熔断与降级
- **状态**: ⏳ 待开始
- **优先级**: P1
- **关联 AC**: AC-MCA-06, AC-MCA-07
- **描述**: 使用 Resilience4j 实现熔断和降级
- **产出物**:
- `src/main/java/com/wecom/robot/service/impl/AiServiceClientImpl.java` 更新
- `src/main/resources/application.yml` 更新
- **验收标准**:
- [ ] @CircuitBreaker 注解配置
- [ ] @TimeLimiter 注解配置
- [ ] fallback 方法返回降级回复
### TASK-033: 删除旧 AiService
- **状态**: ⏳ 待开始
- **优先级**: P2
- **关联 AC**: -
- **描述**: 删除旧的 AiService 类,清理相关配置
- **产出物**:
- 删除 `src/main/java/com/wecom/robot/service/AiService.java`
- 删除 `src/main/java/com/wecom/robot/config/AiConfig.java`
- **验收标准**:
- [ ] 无编译错误
- [ ] 无运行时错误
---
## Phase 5: 集成测试
### TASK-040: 微信回调端到端测试
- **状态**: ⏳ 待开始
- **优先级**: P0
- **关联 AC**: AC-MCA-08, AC-MCA-09, AC-MCA-10
- **描述**: 测试微信回调完整流程
- **产出物**:
- `src/test/java/com/wecom/robot/integration/WecomCallbackIntegrationTest.java`
- **验收标准**:
- [ ] 消息正确路由到 AI 服务
- [ ] 消息正确路由到人工客服
- [ ] 幂等性验证
### TASK-041: AI 服务调用测试
- **状态**: ⏳ 待开始
- **优先级**: P0
- **关联 AC**: AC-MCA-04, AC-MCA-05, AC-MCA-06, AC-MCA-07
- **描述**: 测试 AI 服务调用、超时、降级
- **产出物**:
- `src/test/java/com/wecom/robot/service/AiServiceClientTest.java`
- **验收标准**:
- [ ] 正常调用返回正确响应
- [ ] 超时触发降级
- [ ] 熔断触发降级
### TASK-042: 会话管理测试
- **状态**: ⏳ 待开始
- **优先级**: P1
- **关联 AC**: AC-MCA-11, AC-MCA-12
- **描述**: 测试会话创建、状态变更、渠道类型
- **产出物**:
- `src/test/java/com/wecom/robot/service/SessionManagerServiceTest.java`
- **验收标准**:
- [ ] 会话创建包含 channelType
- [ ] 支持按 channelType 筛选
---
## 待澄清事项
| ID | 问题 | 状态 | 备注 |
|----|------|------|------|
| CLARIFY-001 | AI 服务超时时间确认 | ✅ 已确认 | 5 秒 |
| CLARIFY-002 | 降级回复策略确认 | ✅ 已确认 | 返回固定回复 + 转人工 |
| CLARIFY-003 | 历史消息数量限制 | ✅ 已确认 | 50 条openapi.deps.yaml |
| CLARIFY-004 | 渠道扩展优先级 | ✅ 已确认 | WeChat → Douyin → JD |
| CLARIFY-005 | Python AI 服务部署方式 | ⏳ 待确认 | 独立进程 / Docker / K8s |
---
## 任务依赖关系
```
Phase 1 (基础设施)
├── TASK-001 (DTO) ─────────────────────────────────────────┐
├── TASK-002 (配置) ────────────────────────────────────────┤
├── TASK-003 (数据库) ──────────────────────────────────────┤
├── TASK-004 (Resilience4j) ──┐ │
└── TASK-005 (幂等性) ────────┤ │
│ │
Phase 2 (渠道适配层) │ │
│ │ │
├── TASK-010 (接口) ◄────────┼─────────────────────────────┤
├── TASK-011 (WeChatAdapter) ◄┘ │
├── TASK-012 (Factory) │
└── TASK-013 (Controller) ◄─────────────────────────────────┘
Phase 3 (消息路由层) │
│ │
├── TASK-020 (接口) ◄────────┘
├── TASK-021 (实现)
├── TASK-022 (重构)
└── TASK-023 (Session)
Phase 4 (AI 服务客户端) │
│ │
├── TASK-030 (DTO) ◄─────────┘
├── TASK-031 (实现)
├── TASK-032 (熔断)
└── TASK-033 (清理)
Phase 5 (集成测试) │
│ │
├── TASK-040 ◄───────────────┘
├── TASK-041
└── TASK-042
```
---
## 进度统计
| 指标 | 数值 |
|-----|------|
| 总任务数 | 20 |
| 已完成 | 4 |
| 进行中 | 0 |
| 待开始 | 16 |
| 完成率 | 20% |