实现AgentBus自动分发SuperAgent链路

This commit is contained in:
andy
2026-07-12 23:53:50 +08:00
parent c3dad8eae9
commit 53b530d0b3
42 changed files with 2512 additions and 135 deletions

View File

@@ -30,6 +30,16 @@ agentbus:
connect-timeout: 15s
capture:
enabled: true
superagent-dispatch:
# dev 默认不自动调用 SuperAgent需要联调时显式开启。
enabled: ${AGENTBUS_DEV_SUPERAGENT_DISPATCH_ENABLED:${AGENTBUS_SUPERAGENT_DISPATCH_ENABLED:false}}
worker-enabled: ${AGENTBUS_DEV_SUPERAGENT_DISPATCH_WORKER_ENABLED:${AGENTBUS_SUPERAGENT_DISPATCH_WORKER_ENABLED:false}}
batch-size: ${AGENTBUS_DEV_SUPERAGENT_DISPATCH_BATCH_SIZE:${AGENTBUS_SUPERAGENT_DISPATCH_BATCH_SIZE:10}}
max-attempts: ${AGENTBUS_DEV_SUPERAGENT_DISPATCH_MAX_ATTEMPTS:${AGENTBUS_SUPERAGENT_DISPATCH_MAX_ATTEMPTS:3}}
lock-ttl: ${AGENTBUS_DEV_SUPERAGENT_DISPATCH_LOCK_TTL:${AGENTBUS_SUPERAGENT_DISPATCH_LOCK_TTL:5m}}
initial-backoff: ${AGENTBUS_DEV_SUPERAGENT_DISPATCH_INITIAL_BACKOFF:${AGENTBUS_SUPERAGENT_DISPATCH_INITIAL_BACKOFF:30s}}
max-backoff: ${AGENTBUS_DEV_SUPERAGENT_DISPATCH_MAX_BACKOFF:${AGENTBUS_SUPERAGENT_DISPATCH_MAX_BACKOFF:15m}}
worker-fixed-delay-ms: ${AGENTBUS_DEV_SUPERAGENT_DISPATCH_WORKER_FIXED_DELAY_MS:${AGENTBUS_SUPERAGENT_DISPATCH_WORKER_FIXED_DELAY_MS:10000}}
superagent:
task-result:
@@ -41,8 +51,10 @@ superagent:
base-url: ${DEERFLOW_DEV_BASE_URL:${DEERFLOW_BASE_URL:}}
api-key: ${DEERFLOW_DEV_OPEN_API_KEY:${DEERFLOW_OPEN_API_KEY:}}
external-subject-id: ${SUPERAGENT_DEV_DEBUG_EML_EXTERNAL_SUBJECT_ID:${SUPERAGENT_DEBUG_EML_EXTERNAL_SUBJECT_ID:th-hotel-debug-eml-upload}}
agentbus-external-subject-id: ${SUPERAGENT_DEV_AGENTBUS_EXTERNAL_SUBJECT_ID:${SUPERAGENT_AGENTBUS_EXTERNAL_SUBJECT_ID:th-hotel-agentbus-source-message}}
connect-timeout: ${SUPERAGENT_DEV_DEBUG_EML_CONNECT_TIMEOUT:${SUPERAGENT_DEBUG_EML_CONNECT_TIMEOUT:15s}}
read-timeout: ${SUPERAGENT_DEV_DEBUG_EML_READ_TIMEOUT:${SUPERAGENT_DEBUG_EML_READ_TIMEOUT:180s}}
sse-recovery-max-attempts: ${SUPERAGENT_DEV_OPEN_API_SSE_RECOVERY_MAX_ATTEMPTS:${SUPERAGENT_OPEN_API_SSE_RECOVERY_MAX_ATTEMPTS:5}}
aliyun:
oss:

View File

@@ -28,6 +28,16 @@ agentbus:
connect-timeout: 15s
capture:
enabled: true
superagent-dispatch:
# prod 默认关闭自动分发;上线前必须确认 SuperAgent Open API、监控和回滚方案。
enabled: ${AGENTBUS_PROD_SUPERAGENT_DISPATCH_ENABLED:false}
worker-enabled: ${AGENTBUS_PROD_SUPERAGENT_DISPATCH_WORKER_ENABLED:false}
batch-size: ${AGENTBUS_PROD_SUPERAGENT_DISPATCH_BATCH_SIZE:${AGENTBUS_SUPERAGENT_DISPATCH_BATCH_SIZE:10}}
max-attempts: ${AGENTBUS_PROD_SUPERAGENT_DISPATCH_MAX_ATTEMPTS:${AGENTBUS_SUPERAGENT_DISPATCH_MAX_ATTEMPTS:3}}
lock-ttl: ${AGENTBUS_PROD_SUPERAGENT_DISPATCH_LOCK_TTL:${AGENTBUS_SUPERAGENT_DISPATCH_LOCK_TTL:5m}}
initial-backoff: ${AGENTBUS_PROD_SUPERAGENT_DISPATCH_INITIAL_BACKOFF:${AGENTBUS_SUPERAGENT_DISPATCH_INITIAL_BACKOFF:30s}}
max-backoff: ${AGENTBUS_PROD_SUPERAGENT_DISPATCH_MAX_BACKOFF:${AGENTBUS_SUPERAGENT_DISPATCH_MAX_BACKOFF:15m}}
worker-fixed-delay-ms: ${AGENTBUS_PROD_SUPERAGENT_DISPATCH_WORKER_FIXED_DELAY_MS:${AGENTBUS_SUPERAGENT_DISPATCH_WORKER_FIXED_DELAY_MS:10000}}
superagent:
task-result:
@@ -39,8 +49,10 @@ superagent:
base-url: ${DEERFLOW_PROD_BASE_URL:${DEERFLOW_BASE_URL}}
api-key: ${DEERFLOW_PROD_OPEN_API_KEY:${DEERFLOW_OPEN_API_KEY}}
external-subject-id: ${SUPERAGENT_PROD_DEBUG_EML_EXTERNAL_SUBJECT_ID:${SUPERAGENT_DEBUG_EML_EXTERNAL_SUBJECT_ID:th-hotel-debug-eml-upload}}
agentbus-external-subject-id: ${SUPERAGENT_PROD_AGENTBUS_EXTERNAL_SUBJECT_ID:${SUPERAGENT_AGENTBUS_EXTERNAL_SUBJECT_ID:th-hotel-agentbus-source-message}}
connect-timeout: ${SUPERAGENT_PROD_DEBUG_EML_CONNECT_TIMEOUT:${SUPERAGENT_DEBUG_EML_CONNECT_TIMEOUT:15s}}
read-timeout: ${SUPERAGENT_PROD_DEBUG_EML_READ_TIMEOUT:${SUPERAGENT_DEBUG_EML_READ_TIMEOUT:180s}}
sse-recovery-max-attempts: ${SUPERAGENT_PROD_OPEN_API_SSE_RECOVERY_MAX_ATTEMPTS:${SUPERAGENT_OPEN_API_SSE_RECOVERY_MAX_ATTEMPTS:5}}
aliyun:
oss:

View File

@@ -30,6 +30,16 @@ agentbus:
connect-timeout: 15s
capture:
enabled: true
superagent-dispatch:
# test 默认不自动调用 SuperAgent联调时分别打开 outbox 和 worker。
enabled: ${AGENTBUS_TEST_SUPERAGENT_DISPATCH_ENABLED:${AGENTBUS_SUPERAGENT_DISPATCH_ENABLED:false}}
worker-enabled: ${AGENTBUS_TEST_SUPERAGENT_DISPATCH_WORKER_ENABLED:${AGENTBUS_SUPERAGENT_DISPATCH_WORKER_ENABLED:false}}
batch-size: ${AGENTBUS_TEST_SUPERAGENT_DISPATCH_BATCH_SIZE:${AGENTBUS_SUPERAGENT_DISPATCH_BATCH_SIZE:10}}
max-attempts: ${AGENTBUS_TEST_SUPERAGENT_DISPATCH_MAX_ATTEMPTS:${AGENTBUS_SUPERAGENT_DISPATCH_MAX_ATTEMPTS:3}}
lock-ttl: ${AGENTBUS_TEST_SUPERAGENT_DISPATCH_LOCK_TTL:${AGENTBUS_SUPERAGENT_DISPATCH_LOCK_TTL:5m}}
initial-backoff: ${AGENTBUS_TEST_SUPERAGENT_DISPATCH_INITIAL_BACKOFF:${AGENTBUS_SUPERAGENT_DISPATCH_INITIAL_BACKOFF:30s}}
max-backoff: ${AGENTBUS_TEST_SUPERAGENT_DISPATCH_MAX_BACKOFF:${AGENTBUS_SUPERAGENT_DISPATCH_MAX_BACKOFF:15m}}
worker-fixed-delay-ms: ${AGENTBUS_TEST_SUPERAGENT_DISPATCH_WORKER_FIXED_DELAY_MS:${AGENTBUS_SUPERAGENT_DISPATCH_WORKER_FIXED_DELAY_MS:10000}}
superagent:
task-result:
@@ -43,8 +53,10 @@ superagent:
base-url: ${DEERFLOW_TEST_BASE_URL:${DEERFLOW_BASE_URL:}}
api-key: ${DEERFLOW_TEST_OPEN_API_KEY:${DEERFLOW_OPEN_API_KEY:}}
external-subject-id: ${SUPERAGENT_TEST_DEBUG_EML_EXTERNAL_SUBJECT_ID:${SUPERAGENT_DEBUG_EML_EXTERNAL_SUBJECT_ID:th-hotel-debug-eml-upload}}
agentbus-external-subject-id: ${SUPERAGENT_TEST_AGENTBUS_EXTERNAL_SUBJECT_ID:${SUPERAGENT_AGENTBUS_EXTERNAL_SUBJECT_ID:th-hotel-agentbus-source-message}}
connect-timeout: ${SUPERAGENT_TEST_DEBUG_EML_CONNECT_TIMEOUT:${SUPERAGENT_DEBUG_EML_CONNECT_TIMEOUT:15s}}
read-timeout: ${SUPERAGENT_TEST_DEBUG_EML_READ_TIMEOUT:${SUPERAGENT_DEBUG_EML_READ_TIMEOUT:180s}}
sse-recovery-max-attempts: ${SUPERAGENT_TEST_OPEN_API_SSE_RECOVERY_MAX_ATTEMPTS:${SUPERAGENT_OPEN_API_SSE_RECOVERY_MAX_ATTEMPTS:5}}
aliyun:
oss:

View File

@@ -28,6 +28,16 @@ agentbus:
max-frame-bytes: 1048576
capture:
enabled: ${AGENTBUS_CAPTURE_ENABLED:true}
superagent-dispatch:
# M007 AgentBus 入库后自动分发 SuperAgent默认关闭联调环境显式开启。
enabled: ${AGENTBUS_SUPERAGENT_DISPATCH_ENABLED:false}
worker-enabled: ${AGENTBUS_SUPERAGENT_DISPATCH_WORKER_ENABLED:false}
batch-size: ${AGENTBUS_SUPERAGENT_DISPATCH_BATCH_SIZE:10}
max-attempts: ${AGENTBUS_SUPERAGENT_DISPATCH_MAX_ATTEMPTS:3}
lock-ttl: ${AGENTBUS_SUPERAGENT_DISPATCH_LOCK_TTL:5m}
initial-backoff: ${AGENTBUS_SUPERAGENT_DISPATCH_INITIAL_BACKOFF:30s}
max-backoff: ${AGENTBUS_SUPERAGENT_DISPATCH_MAX_BACKOFF:15m}
worker-fixed-delay-ms: ${AGENTBUS_SUPERAGENT_DISPATCH_WORKER_FIXED_DELAY_MS:10000}
superagent:
task-result:

View File

@@ -0,0 +1,35 @@
-- M007 AgentBus -> SuperAgent 自动分发outbox 运行表,只记录 AI 调用过程,不创建业务订单或任务。
CREATE TABLE platform_superagent_dispatch_run (
id BIGINT NOT NULL COMMENT 'SuperAgent 自动分发运行 ID',
hotel_id VARCHAR(64) NOT NULL COMMENT '酒店或业务上下文 ID',
source_message_id BIGINT NOT NULL COMMENT '关联的内部 SourceMessage Inbox ID',
source_provider VARCHAR(32) NOT NULL COMMENT '来源 provider例如 AGENTBUS',
source_channel VARCHAR(32) NOT NULL COMMENT '来源 channel例如 OUTLOOK 或 EMAIL',
external_message_id VARCHAR(256) NULL COMMENT '外部邮件消息 ID对应 SourceMessage external_message_id',
external_conversation_id VARCHAR(256) NULL COMMENT '外部邮件会话 ID对应 SourceMessage external_conversation_id',
dispatch_source VARCHAR(64) NOT NULL COMMENT '分发来源代码,第一版使用 AGENTBUS_REALTIME',
idempotency_key VARCHAR(128) NOT NULL COMMENT '发送给 SuperAgent 的稳定幂等键',
request_id VARCHAR(128) NOT NULL COMMENT '写入 X-Request-ID 的调用关联 ID',
dispatch_status VARCHAR(32) NOT NULL COMMENT '分发状态PENDING、RUNNING、SUCCEEDED、RETRYABLE_FAILED、FAILED、IGNORED',
attempt_count INT NOT NULL DEFAULT 0 COMMENT '已尝试次数worker 抢占时递增',
max_attempts INT NOT NULL DEFAULT 3 COMMENT '最大尝试次数',
next_attempt_at DATETIME(6) NULL COMMENT '下次可处理 UTC 时间;终态可为空',
locked_until DATETIME(6) NULL COMMENT 'worker 抢占锁过期 UTC 时间',
superagent_session_id VARCHAR(128) NULL COMMENT 'SuperAgent Open API session ID',
superagent_run_id VARCHAR(128) NULL COMMENT 'SuperAgent run ID',
superagent_run_uri VARCHAR(1024) NULL COMMENT 'SuperAgent run 查询 URI 或路径',
last_event_id VARCHAR(128) NULL COMMENT '最后完整处理的 SSE event id用于 Last-Event-ID 恢复',
superagent_raw_answer LONGTEXT NULL COMMENT 'SuperAgent 最终原始回答',
superagent_parsed_json LONGTEXT NULL COMMENT '从最终回答解析出的 JSON无法解析时为空',
superagent_trace_json LONGTEXT NULL COMMENT 'SuperAgent 公开 trace 摘要 JSON不保存 Secret 或工具敏感入参',
safe_error_code VARCHAR(64) NULL COMMENT '安全错误代码',
safe_error_summary VARCHAR(512) NULL COMMENT '安全错误摘要不包含正文、HTML、附件 URL 或 Secret',
created_at DATETIME(6) NOT NULL COMMENT '记录创建 UTC 时间',
updated_at DATETIME(6) NOT NULL COMMENT '记录更新 UTC 时间',
PRIMARY KEY (id),
UNIQUE KEY uk_superagent_dispatch_source_message (source_message_id, dispatch_source),
KEY idx_superagent_dispatch_status_next (dispatch_status, next_attempt_at),
KEY idx_superagent_dispatch_lock (dispatch_status, locked_until),
KEY idx_superagent_dispatch_external_message (hotel_id, external_message_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
COMMENT='SuperAgent 自动分发 outbox 运行表,记录 SourceMessage 入库后异步调用 SuperAgent 的状态和结果';