ai-robot-channel/docs/progress/ai-robot-mca-progress.md

199 lines
7.2 KiB
Markdown
Raw Normal View History

# 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)
- [x] Phase 1: 基础设施 (100%) ✅ [tasks.md: TASK-001 ~ TASK-005]
- [x] Phase 2: 渠道适配层 (100%) ✅ [tasks.md: TASK-010 ~ TASK-013]
- [x] Phase 3: 消息路由层 (100%) ✅ [tasks.md: TASK-020 ~ TASK-023]
- [ ] Phase 4: AI 服务客户端 (0%) ⏳ [tasks.md: TASK-030 ~ TASK-033]
- [ ] Phase 5: 集成测试 (0%) ⏳ [tasks.md: TASK-040 ~ TASK-042]
---
## 🔄 Current Phase
### Goal
完成 AI 服务 DTO 定义、AiServiceClient 实现、熔断与降级、清理旧代码。
### Sub Tasks
- [ ] TASK-030: 定义 AI 服务 DTO ⏳ [AC-MCA-04-REQ, AC-MCA-05]
- [ ] TASK-031: 实现 AiServiceClient ⏳ [AC-MCA-04, AC-MCA-05]
- [ ] TASK-032: 实现熔断与降级 ⏳ [AC-MCA-06, AC-MCA-07]
- [ ] TASK-033: 删除旧 AiService ⏳
### Next Action (Must be Specific)
**Immediate**: 创建 `ChatRequest.java`、`ChatResponse.java` AI 服务 DTO。
**Details**:
1. file: `src/main/java/com/wecom/robot/dto/ai/ChatRequest.java`
2. action: 定义 ChatRequest DTO包含 sessionId、currentMessage、channelType、history 字段
3. reference:
- `spec/ai-robot/design.md` 第 6.1 节AI 服务调用)
- `spec/ai-robot/openapi.deps.yaml`AI 服务契约)
4. constraints:
- 字段与 openapi.deps.yaml 一致
- 包含映射方法 (InboundMessage → ChatRequest)
- 代码/注释必须包含 [AC-MCA-04-REQ] 标注
---
## 🏗️ Technical Context
### Module Structure (Only What Matters)
```
src/main/java/com/wecom/robot/
├── dto/
│ ├── InboundMessage.java # TASK-001 ✅
│ ├── OutboundMessage.java # TASK-001 ✅
│ ├── SignatureInfo.java # TASK-001 ✅
│ └── ai/
│ ├── ChatRequest.java # TASK-030
│ └── ChatResponse.java # TASK-030
├── config/
│ ├── AiServiceConfig.java # TASK-002 ✅
│ └── ChannelConfig.java # TASK-002 ✅
├── adapter/
│ ├── ChannelAdapter.java # TASK-010 ✅
│ ├── ServiceStateCapable.java # TASK-010 ✅
│ ├── TransferCapable.java # TASK-010 ✅
│ ├── MessageSyncCapable.java # TASK-010 ✅
│ ├── WeChatAdapter.java # TASK-011 ✅
│ └── ChannelAdapterFactory.java # TASK-012 ✅
├── service/
│ ├── MessageRouterService.java # TASK-020 ✅
│ ├── AiServiceClient.java # TASK-031
│ └── impl/
│ ├── MessageRouterServiceImpl.java # TASK-021 ✅
│ └── AiServiceClientImpl.java # TASK-031
├── util/
│ └── IdempotentHelper.java # TASK-005 ✅
└── entity/
└── Session.java # TASK-003 ✅
```
### 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 命名混乱
- decision: ChannelAdapter 接口分离为核心能力和可选能力
reason: 不同渠道支持的能力不同,接口分离允许按需实现
impact: WeChatAdapter 实现全部接口,其他渠道可按需实现
### Code Snippets (Reference)
```java
// 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);
}
```
---
## 🧾 Session History
### 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
### 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
### 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
3. 直接执行 Next ActionTASK-030: 创建 ChatRequest/ChatResponse DTO
4. 每完成一个子任务,更新本进度文档并提交 Git。