2026-02-23 16:57:55 +00:00
|
|
|
|
# ai-robot-MCA - Progress
|
|
|
|
|
|
|
|
|
|
|
|
> 多渠道适配主框架架构改造进度文档
|
|
|
|
|
|
> 遵循 `docs/session-handoff-protocol.md` 协议
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 📋 Context
|
|
|
|
|
|
|
|
|
|
|
|
- module: `ai-robot`
|
|
|
|
|
|
- feature: `MCA` (Multi-Channel Adapter)
|
|
|
|
|
|
- status: 🔄 进行中
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 🔗 Spec References (SSOT)
|
|
|
|
|
|
|
|
|
|
|
|
- agents: `AGENTS.md`
|
|
|
|
|
|
- contracting: `spec/contracting.md`
|
|
|
|
|
|
- requirements: `spec/ai-robot/requirements.md`
|
|
|
|
|
|
- openapi_provider: `spec/ai-robot/openapi.provider.yaml`
|
|
|
|
|
|
- openapi_deps: `spec/ai-robot/openapi.deps.yaml`
|
|
|
|
|
|
- design: `spec/ai-robot/design.md`
|
|
|
|
|
|
- tasks: `spec/ai-robot/tasks.md`
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 📊 Overall Progress (Phases)
|
|
|
|
|
|
|
2026-02-23 17:04:25 +00:00
|
|
|
|
- [x] Phase 1: 基础设施 (100%) ✅ [tasks.md: TASK-001 ~ TASK-005]
|
2026-02-23 17:26:27 +00:00
|
|
|
|
- [x] Phase 2: 渠道适配层 (100%) ✅ [tasks.md: TASK-010 ~ TASK-013]
|
2026-02-23 17:31:36 +00:00
|
|
|
|
- [x] Phase 3: 消息路由层 (100%) ✅ [tasks.md: TASK-020 ~ TASK-023]
|
2026-02-24 02:31:27 +00:00
|
|
|
|
- [x] Phase 4: AI 服务客户端 (100%) ✅ [tasks.md: TASK-030 ~ TASK-033]
|
2026-02-23 16:57:55 +00:00
|
|
|
|
- [ ] Phase 5: 集成测试 (0%) ⏳ [tasks.md: TASK-040 ~ TASK-042]
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 🔄 Current Phase
|
|
|
|
|
|
|
|
|
|
|
|
### Goal
|
2026-02-24 02:31:27 +00:00
|
|
|
|
完成集成测试,验证多渠道适配框架的完整功能。
|
2026-02-23 16:57:55 +00:00
|
|
|
|
|
|
|
|
|
|
### Sub Tasks
|
2026-02-24 02:31:27 +00:00
|
|
|
|
- [x] TASK-030: 定义 AI 服务 DTO ✅ [AC-MCA-04-REQ, AC-MCA-05]
|
|
|
|
|
|
- [x] TASK-031: 实现 AiServiceClient ✅ [AC-MCA-04, AC-MCA-05]
|
|
|
|
|
|
- [x] TASK-032: 实现熔断与降级 ✅ [AC-MCA-06, AC-MCA-07]
|
|
|
|
|
|
- [x] TASK-033: 删除旧 AiService ✅
|
|
|
|
|
|
- [ ] TASK-040: 集成测试 ⏳
|
|
|
|
|
|
- [ ] TASK-041: 端到端测试 ⏳
|
|
|
|
|
|
- [ ] TASK-042: 性能测试 ⏳
|
2026-02-23 16:57:55 +00:00
|
|
|
|
|
|
|
|
|
|
### Next Action (Must be Specific)
|
|
|
|
|
|
|
2026-02-24 02:31:27 +00:00
|
|
|
|
**Immediate**: 执行 Phase 5 集成测试任务。
|
2026-02-23 16:57:55 +00:00
|
|
|
|
|
|
|
|
|
|
**Details**:
|
2026-02-24 02:31:27 +00:00
|
|
|
|
1. task: TASK-040 集成测试
|
|
|
|
|
|
2. action: 编写集成测试验证消息路由流程
|
2026-02-23 16:57:55 +00:00
|
|
|
|
3. reference:
|
2026-02-24 02:31:27 +00:00
|
|
|
|
- `spec/ai-robot/tasks.md` TASK-040 定义
|
2026-02-23 16:57:55 +00:00
|
|
|
|
4. constraints:
|
2026-02-24 02:31:27 +00:00
|
|
|
|
- 测试覆盖 InboundMessage → AI Service → OutboundMessage 完整流程
|
|
|
|
|
|
- 验证幂等性、熔断降级逻辑
|
2026-02-23 16:57:55 +00:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 🏗️ Technical Context
|
|
|
|
|
|
|
|
|
|
|
|
### Module Structure (Only What Matters)
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
src/main/java/com/wecom/robot/
|
|
|
|
|
|
├── dto/
|
2026-02-23 17:31:36 +00:00
|
|
|
|
│ ├── InboundMessage.java # TASK-001 ✅
|
|
|
|
|
|
│ ├── OutboundMessage.java # TASK-001 ✅
|
|
|
|
|
|
│ ├── SignatureInfo.java # TASK-001 ✅
|
2026-02-23 16:57:55 +00:00
|
|
|
|
│ └── ai/
|
|
|
|
|
|
│ ├── ChatRequest.java # TASK-030
|
|
|
|
|
|
│ └── ChatResponse.java # TASK-030
|
|
|
|
|
|
├── config/
|
2026-02-23 17:31:36 +00:00
|
|
|
|
│ ├── AiServiceConfig.java # TASK-002 ✅
|
|
|
|
|
|
│ └── ChannelConfig.java # TASK-002 ✅
|
2026-02-23 16:57:55 +00:00
|
|
|
|
├── adapter/
|
2026-02-23 17:31:36 +00:00
|
|
|
|
│ ├── ChannelAdapter.java # TASK-010 ✅
|
|
|
|
|
|
│ ├── ServiceStateCapable.java # TASK-010 ✅
|
|
|
|
|
|
│ ├── TransferCapable.java # TASK-010 ✅
|
|
|
|
|
|
│ ├── MessageSyncCapable.java # TASK-010 ✅
|
|
|
|
|
|
│ ├── WeChatAdapter.java # TASK-011 ✅
|
|
|
|
|
|
│ └── ChannelAdapterFactory.java # TASK-012 ✅
|
2026-02-23 16:57:55 +00:00
|
|
|
|
├── service/
|
2026-02-23 17:31:36 +00:00
|
|
|
|
│ ├── MessageRouterService.java # TASK-020 ✅
|
2026-02-23 16:57:55 +00:00
|
|
|
|
│ ├── AiServiceClient.java # TASK-031
|
|
|
|
|
|
│ └── impl/
|
2026-02-23 17:31:36 +00:00
|
|
|
|
│ ├── MessageRouterServiceImpl.java # TASK-021 ✅
|
2026-02-23 16:57:55 +00:00
|
|
|
|
│ └── AiServiceClientImpl.java # TASK-031
|
|
|
|
|
|
├── util/
|
2026-02-23 17:31:36 +00:00
|
|
|
|
│ └── IdempotentHelper.java # TASK-005 ✅
|
2026-02-23 16:57:55 +00:00
|
|
|
|
└── entity/
|
2026-02-23 17:31:36 +00:00
|
|
|
|
└── Session.java # TASK-003 ✅
|
2026-02-23 16:57:55 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### Key Decisions (Why / Impact)
|
|
|
|
|
|
|
|
|
|
|
|
- decision: 统一消息模型 (InboundMessage/OutboundMessage)
|
|
|
|
|
|
reason: 实现渠道无关的消息处理,Controller 层负责验签/解析,Router 层处理统一消息
|
|
|
|
|
|
impact: 后续新增渠道只需实现 ChannelAdapter,无需修改核心路由逻辑
|
|
|
|
|
|
|
|
|
|
|
|
- decision: 使用 Resilience4j 实现熔断
|
|
|
|
|
|
reason: 与 Spring Boot 2.7 兼容良好,支持断路器、限流、超时
|
|
|
|
|
|
impact: AI 服务调用具备熔断/降级能力,提升系统稳定性
|
|
|
|
|
|
|
|
|
|
|
|
- decision: 内部字段统一用 `content`,AI 服务契约用 `currentMessage`
|
|
|
|
|
|
reason: 保持内部命名一致性,映射在 AiServiceClient 层处理
|
|
|
|
|
|
impact: 避免后续 DTO 命名混乱
|
|
|
|
|
|
|
2026-02-23 17:31:36 +00:00
|
|
|
|
- decision: ChannelAdapter 接口分离为核心能力和可选能力
|
|
|
|
|
|
reason: 不同渠道支持的能力不同,接口分离允许按需实现
|
|
|
|
|
|
impact: WeChatAdapter 实现全部接口,其他渠道可按需实现
|
|
|
|
|
|
|
2026-02-23 16:57:55 +00:00
|
|
|
|
### Code Snippets (Reference)
|
|
|
|
|
|
|
|
|
|
|
|
```java
|
2026-02-23 17:31:36 +00:00
|
|
|
|
// ChannelAdapter 接口定义 (design.md 3.1)
|
|
|
|
|
|
public interface ChannelAdapter {
|
|
|
|
|
|
String getChannelType();
|
|
|
|
|
|
boolean sendMessage(OutboundMessage message);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// MessageRouterService 接口定义 (design.md 3.2)
|
|
|
|
|
|
public interface MessageRouterService {
|
|
|
|
|
|
void processInboundMessage(InboundMessage message);
|
|
|
|
|
|
void routeBySessionState(Session session, InboundMessage message);
|
|
|
|
|
|
void dispatchToAiService(Session session, InboundMessage message);
|
|
|
|
|
|
void dispatchToManualCs(Session session, InboundMessage message);
|
|
|
|
|
|
void dispatchToPendingPool(Session session, InboundMessage message);
|
2026-02-23 16:57:55 +00:00
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 🧾 Session History
|
|
|
|
|
|
|
2026-02-24 03:43:44 +00:00
|
|
|
|
### Session #5 (2026-02-24)
|
|
|
|
|
|
- completed:
|
|
|
|
|
|
- L2 契约升级: openapi.provider.yaml L0 → L2 ✅
|
|
|
|
|
|
- L2 契约对齐: DTO 添加 validation 注解 ✅
|
|
|
|
|
|
- L2 契约对齐: Controller 添加 @Valid 校验 ✅
|
|
|
|
|
|
- L2 契约对齐: 创建全局异常处理器 ✅
|
|
|
|
|
|
- changes:
|
|
|
|
|
|
- 更新 spec/ai-robot/openapi.provider.yaml (L0 → L2)
|
|
|
|
|
|
- 更新 src/main/java/com/wecom/robot/dto/ApiResponse.java (code=200 → 0, 添加注解)
|
|
|
|
|
|
- 更新 src/main/java/com/wecom/robot/dto/SessionInfo.java (添加 @NotBlank, @Size, channelType 字段)
|
|
|
|
|
|
- 更新 src/main/java/com/wecom/robot/dto/MessageInfo.java (添加 @NotBlank, @Size)
|
|
|
|
|
|
- 更新 src/main/java/com/wecom/robot/dto/AcceptSessionRequest.java (添加 @NotBlank, @Size)
|
|
|
|
|
|
- 更新 src/main/java/com/wecom/robot/dto/SendMessageRequest.java (添加 @NotBlank, @Size)
|
|
|
|
|
|
- 更新 src/main/java/com/wecom/robot/controller/SessionController.java (添加 @Valid, channelType 参数)
|
|
|
|
|
|
- 新增 src/main/java/com/wecom/robot/config/GlobalExceptionHandler.java
|
|
|
|
|
|
- commits: f09f22f, 0786e6a
|
|
|
|
|
|
|
2026-02-24 02:31:27 +00:00
|
|
|
|
### Session #4 (2026-02-24)
|
|
|
|
|
|
- completed:
|
|
|
|
|
|
- TASK-001: 定义统一消息模型 DTO ✅
|
|
|
|
|
|
- TASK-002: 新增配置类 ✅
|
|
|
|
|
|
- TASK-003: 数据库 Schema 变更 ✅
|
|
|
|
|
|
- TASK-004: 添加 Resilience4j 依赖 ✅
|
|
|
|
|
|
- TASK-005: 消息幂等性工具类 ✅
|
|
|
|
|
|
- TASK-030: 定义 AI 服务 DTO ✅
|
|
|
|
|
|
- TASK-031: 实现 AiServiceClient ✅
|
|
|
|
|
|
- TASK-032: 实现熔断与降级 ✅
|
|
|
|
|
|
- TASK-033: 删除旧 AiService ✅
|
|
|
|
|
|
- changes:
|
|
|
|
|
|
- 新增 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
|
|
|
|
|
|
- 新增 src/main/java/com/wecom/robot/config/AiServiceConfig.java
|
|
|
|
|
|
- 新增 src/main/java/com/wecom/robot/config/ChannelConfig.java
|
|
|
|
|
|
- 新增 src/main/java/com/wecom/robot/config/RestTemplateConfig.java
|
|
|
|
|
|
- 新增 src/main/java/com/wecom/robot/util/IdempotentHelper.java
|
|
|
|
|
|
- 新增 src/main/java/com/wecom/robot/dto/ai/ChatRequest.java
|
|
|
|
|
|
- 新增 src/main/java/com/wecom/robot/dto/ai/ChatResponse.java
|
|
|
|
|
|
- 新增 src/main/java/com/wecom/robot/dto/ai/ChatMessage.java
|
|
|
|
|
|
- 新增 src/main/java/com/wecom/robot/service/AiServiceClient.java
|
|
|
|
|
|
- 新增 src/main/java/com/wecom/robot/service/impl/AiServiceClientImpl.java
|
|
|
|
|
|
- 新增 src/main/resources/db/migration/V1__add_channel_type.sql
|
|
|
|
|
|
- 删除 src/main/java/com/wecom/robot/service/AiService.java
|
|
|
|
|
|
- 删除 src/main/java/com/wecom/robot/config/AiConfig.java
|
|
|
|
|
|
- 更新 src/main/resources/application.yml (添加 ai-service, channel, resilience4j 配置)
|
|
|
|
|
|
- 更新 src/main/java/com/wecom/robot/service/impl/MessageRouterServiceImpl.java
|
|
|
|
|
|
- 更新 src/main/java/com/wecom/robot/controller/DebugController.java
|
|
|
|
|
|
- 更新 pom.xml (添加 Resilience4j 依赖)
|
|
|
|
|
|
- commits: 多个独立 commit
|
|
|
|
|
|
|
2026-02-23 17:31:36 +00:00
|
|
|
|
### Session #3 (2026-02-24)
|
|
|
|
|
|
- completed:
|
|
|
|
|
|
- TASK-010: 定义 ChannelAdapter 接口 ✅
|
|
|
|
|
|
- TASK-011: 实现 WeChatAdapter ✅
|
|
|
|
|
|
- TASK-012: 创建 ChannelAdapterFactory ✅
|
|
|
|
|
|
- TASK-013: 重构 WecomCallbackController ✅
|
|
|
|
|
|
- TASK-022: 重构 MessageProcessService ✅
|
|
|
|
|
|
- changes:
|
|
|
|
|
|
- 新增 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
|
|
|
|
|
|
- 新增 src/main/java/com/wecom/robot/adapter/WeChatAdapter.java
|
|
|
|
|
|
- 新增 src/main/java/com/wecom/robot/adapter/ChannelAdapterFactory.java
|
|
|
|
|
|
- 更新 src/main/java/com/wecom/robot/controller/WecomCallbackController.java
|
|
|
|
|
|
- 更新 src/main/java/com/wecom/robot/service/MessageProcessService.java
|
|
|
|
|
|
- commits: 4e9c5ba, 2631c53, 07561fe
|
|
|
|
|
|
|
2026-02-23 17:26:27 +00:00
|
|
|
|
### Session #2 (2026-02-24)
|
|
|
|
|
|
- completed:
|
|
|
|
|
|
- TASK-020: 定义 MessageRouterService 接口
|
|
|
|
|
|
- TASK-021: 实现 MessageRouterServiceImpl
|
|
|
|
|
|
- 创建 `src/main/java/com/wecom/robot/service/MessageRouterService.java`
|
|
|
|
|
|
- 创建 `src/main/java/com/wecom/robot/service/impl/MessageRouterServiceImpl.java`
|
|
|
|
|
|
- 实现 5 个核心方法:processInboundMessage, routeBySessionState, dispatchToAiService, dispatchToManualCs, dispatchToPendingPool
|
|
|
|
|
|
- 实现幂等性检查(基于 Redis SETNX)
|
|
|
|
|
|
- changes:
|
|
|
|
|
|
- 新增 src/main/java/com/wecom/robot/service/MessageRouterService.java
|
|
|
|
|
|
- 新增 src/main/java/com/wecom/robot/service/impl/MessageRouterServiceImpl.java
|
|
|
|
|
|
- 更新 docs/progress/ai-robot-mca-progress.md
|
|
|
|
|
|
- 更新 spec/ai-robot/tasks.md
|
|
|
|
|
|
- commits: b9792c8, 0b6fcf5
|
|
|
|
|
|
|
2026-02-23 17:32:04 +00:00
|
|
|
|
### Session #2 (2026-02-24)
|
|
|
|
|
|
- completed:
|
|
|
|
|
|
- TASK-020: 定义 MessageRouterService 接口
|
|
|
|
|
|
- TASK-021: 实现 MessageRouterServiceImpl
|
|
|
|
|
|
- TASK-022: 重构 MessageProcessService
|
|
|
|
|
|
- TASK-023: 更新 SessionManagerService 支持 channelType
|
|
|
|
|
|
- 创建 `src/main/java/com/wecom/robot/service/MessageRouterService.java`
|
|
|
|
|
|
- 创建 `src/main/java/com/wecom/robot/service/impl/MessageRouterServiceImpl.java`
|
|
|
|
|
|
- 更新 Session 实体添加 channelType 字段
|
|
|
|
|
|
- 更新 SessionManagerService 支持按渠道类型创建和筛选会话
|
|
|
|
|
|
- 实现 5 个核心方法:processInboundMessage, routeBySessionState, dispatchToAiService, dispatchToManualCs, dispatchToPendingPool
|
|
|
|
|
|
- 实现幂等性检查(基于 Redis SETNX)
|
|
|
|
|
|
- changes:
|
|
|
|
|
|
- 新增 src/main/java/com/wecom/robot/service/MessageRouterService.java
|
|
|
|
|
|
- 新增 src/main/java/com/wecom/robot/service/impl/MessageRouterServiceImpl.java
|
|
|
|
|
|
- 更新 src/main/java/com/wecom/robot/service/MessageProcessService.java
|
|
|
|
|
|
- 更新 src/main/java/com/wecom/robot/entity/Session.java
|
|
|
|
|
|
- 更新 src/main/java/com/wecom/robot/service/SessionManagerService.java
|
|
|
|
|
|
- 更新 docs/progress/ai-robot-mca-progress.md
|
|
|
|
|
|
- 更新 spec/ai-robot/tasks.md
|
|
|
|
|
|
- commits: b9792c8, 0b6fcf5, db378af, a8d7474
|
|
|
|
|
|
|
2026-02-23 16:57:55 +00:00
|
|
|
|
### Session #1 (2026-02-24)
|
|
|
|
|
|
- completed:
|
|
|
|
|
|
- 创建 spec/ai-robot/ 目录结构
|
|
|
|
|
|
- 编写 requirements.md (v0.2.0)
|
|
|
|
|
|
- 编写 openapi.deps.yaml (L0)
|
|
|
|
|
|
- 编写 openapi.provider.yaml (L0)
|
|
|
|
|
|
- 编写 design.md (v0.2.0)
|
|
|
|
|
|
- 编写 tasks.md (20 个任务)
|
|
|
|
|
|
- 所有规范文件已提交到 Git
|
|
|
|
|
|
- changes:
|
|
|
|
|
|
- 新增 spec/ai-robot/requirements.md
|
|
|
|
|
|
- 新增 spec/ai-robot/openapi.deps.yaml
|
|
|
|
|
|
- 新增 spec/ai-robot/openapi.provider.yaml
|
|
|
|
|
|
- 新增 spec/ai-robot/design.md
|
|
|
|
|
|
- 新增 spec/ai-robot/tasks.md
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 🚀 Startup Guide
|
|
|
|
|
|
|
|
|
|
|
|
1. 读取本进度文档,定位当前 Phase 与 Next Action。
|
|
|
|
|
|
2. 打开并阅读 Spec References 指向的模块规范(requirements/openapi/design/tasks)。
|
2026-02-23 17:31:36 +00:00
|
|
|
|
3. 直接执行 Next Action(TASK-030: 创建 ChatRequest/ChatResponse DTO)。
|
2026-02-23 16:57:55 +00:00
|
|
|
|
4. 每完成一个子任务,更新本进度文档并提交 Git。
|