修复SuperAgent自动分发恢复逻辑
This commit is contained in:
@@ -130,6 +130,7 @@
|
||||
- `AGENTBUS_DEFAULT_HOTEL_ID` 是 M005 前旧变量,当前后端不再读取;系统酒店来自 `platform_hotel` 唯一 `ACTIVE` 酒店。
|
||||
- 当前实现不发送 ACK、不发送 `task.result`、不自动回复客户。
|
||||
- M007 自动分发即使开启,也只能在 SourceMessage 入库后通过 dispatch / outbox 异步调用 SuperAgent,不能在 AgentBus WebSocket 回调内同步等待外部返回。
|
||||
- M007 dispatch 创建使用 SourceMessage + dispatch_source 幂等;重复 `RECEIVED` 投递会尝试补偿缺失 outbox,锁已过期的 `RUNNING` 记录会被 worker 重新领取。
|
||||
|
||||
### 3.5 SuperAgent HMAC
|
||||
|
||||
|
||||
@@ -44,8 +44,8 @@ AgentBus WebSocket 收到邮件
|
||||
| --- | --- |
|
||||
| 来源 provider | 必须是 `AGENTBUS` |
|
||||
| 捕获状态 | 必须是 `RECEIVED` |
|
||||
| 幂等结果 | 仅 `SourceMessageCaptureResult.newlyCreated=true` 时触发 |
|
||||
| 重复投递 | 不重复创建 dispatch;如 payload changed,只记录 SourceMessage 重复诊断 |
|
||||
| 幂等结果 | `RECEIVED` 状态会尝试幂等创建 dispatch;数据库唯一键保证不会重复创建 |
|
||||
| 重复投递 | 会再次尝试 `insertIfAbsent` 补偿可能缺失的 dispatch;如 payload changed,只记录 SourceMessage 重复诊断 |
|
||||
| Debug EML | 不参与生产自动分发 |
|
||||
| FAILED Inbox | 不分发,保留入库失败原因供排查 |
|
||||
|
||||
@@ -150,7 +150,7 @@ AgentBus 自动分发发送给 SuperAgent 的 message 第一版应基于 SourceM
|
||||
## 8. 状态流转
|
||||
|
||||
```text
|
||||
PENDING / RETRYABLE_FAILED
|
||||
PENDING / RETRYABLE_FAILED / 过期 RUNNING
|
||||
→ RUNNING
|
||||
→ SUCCEEDED
|
||||
|
||||
@@ -191,11 +191,13 @@ RUNNING / RETRYABLE_FAILED
|
||||
|
||||
## 10. 验收标准
|
||||
|
||||
- AgentBus 新邮件入库成功后,在开启配置时创建一条 dispatch run。
|
||||
- AgentBus 新邮件入库成功后,在开启配置时幂等创建一条 dispatch run。
|
||||
- 重复 AgentBus 邮件投递不会创建第二条 dispatch run。
|
||||
- 如首次入库后 dispatch 创建失败,后续重复 `RECEIVED` 投递可以补偿创建缺失的 dispatch run。
|
||||
- worker 崩溃后,锁过期的 `RUNNING` dispatch 可以被重新领取处理。
|
||||
- Debug EML 不会进入生产 dispatch run。
|
||||
- `FAILED` SourceMessage 不会触发 dispatch。
|
||||
- worker 能领取 `PENDING` 记录并调用 SuperAgent Open API。
|
||||
- worker 能领取 `PENDING`、`RETRYABLE_FAILED` 和锁已过期的 `RUNNING` 记录并调用 SuperAgent Open API。
|
||||
- SuperAgent 调用成功时保存 session、run、raw answer、parsed json、trace 摘要和 `SUCCEEDED` 状态。
|
||||
- SuperAgent SSE 缺少 `end`、缺少最终内容或 `run.completed` 时不能成功。
|
||||
- SSE EOF 后如果已有 `run_id`,使用 `/events` 恢复,不重发初始 POST。
|
||||
@@ -209,8 +211,8 @@ RUNNING / RETRYABLE_FAILED
|
||||
|
||||
- 新增 `platform_superagent_dispatch_run` 表和 `V20__create_superagent_dispatch_run.sql`。
|
||||
- 新增 `SuperAgentDispatchRunEntity`、Mapper、Repository、Service 和配置类。
|
||||
- AgentBus 捕获 `AGENTBUS + RECEIVED + newlyCreated=true` 后,在配置开启时创建 dispatch run。
|
||||
- worker 处理 `PENDING / RETRYABLE_FAILED`,调用共享 SuperAgent Open API client。
|
||||
- AgentBus 捕获 `AGENTBUS + RECEIVED` 后,在配置开启时幂等创建 dispatch run;重复投递可补偿缺失 outbox。
|
||||
- worker 处理 `PENDING / RETRYABLE_FAILED / 锁已过期 RUNNING`,调用共享 SuperAgent Open API client。
|
||||
- Open API client 支持 `Content-Location`、`run_id`、SSE `id`、`Last-Event-ID`、`GET /runs/{run_id}` 和 `GET /runs/{run_id}/events` 恢复。
|
||||
- Debug EML 继续复用共享 Open API client。
|
||||
- dispatch 成功保存 session、run、last event id、raw answer、parsed json、trace 摘要和状态。
|
||||
|
||||
Reference in New Issue
Block a user