Skip to content

处理管线

字数
689 字
阅读时间
3 分钟

概述

Gateway 支持同步和异步两种处理模式。同步模式直接在请求线程内完成全部 9 步;异步模式在前 6 步完成后将事件入队,由后台 Worker 异步处理剩余步骤。

同步管线(9 步)

python
result = await gateway.receive(
    channel_id="qq",
    raw_event=event_data,
    headers=headers,
    remote_addr="127.0.0.1",
    raw_body=raw_body,
)
步骤状态说明
1receivedverified安全验证(Token / HMAC / IP)
2rate_limitedIP 和通道维度限流
3unknown_channel路由查找频道适配器
4parsed / parse_failed适配器解析平台事件
5rate_limited用户和会话维度限流
6deduped / duplicated消息去重检查
7dispatched / build_request_failed构建 ChatRequest
8dispatch_failed分发到 AI Core 处理
9delivered / delivery_failed投递回复到频道

异步管线(6 步 + 队列)

异步模式下,步骤 1-6 执行完毕后事件入队,立即返回 200 OK

python
gateway = create_async_gateway_with_storage(data_dir="data")
await gateway.start_worker()

result = await gateway.receive(...)  # 快速返回
# result.queued == True

后台 GatewayWorker 从队列取出事件,执行步骤 7-9,并支持失败重试。

GatewayResult

receive() 返回 GatewayResult

python
@dataclass
class GatewayResult:
    ok: bool                    # 是否成功
    trace_id: str               # 追踪 ID
    channel_id: str             # 频道 ID
    conversation_id: str        # 会话 ID
    status: str                 # 最终状态
    ignored: bool = False       # 是否被忽略
    duplicated: bool = False    # 是否重复消息
    queued: bool = False        # 是否已入队(异步模式)
    error: str = ""             # 错误信息
    data: dict = None           # 附加数据

事件状态一览

每个阶段通过 _record_event() 写入 gateway_logs 统一日志表。状态自动映射为 action/stage/level。MCP 工具调用也记录在 gateway_logssource=mcp)。

管线中可能出现的所有状态:

状态含义
received事件到达网关
verified安全验证通过
rate_limited触发限流
parsed平台事件解析成功
ignored解析后为空/无关事件
deduped通过去重检查
duplicated检测为重复消息
unknown_channel频道 ID 未注册
missing_parser适配器缺少 parse_event 方法
parse_failed平台事件解析异常
build_request_failed构建 ChatRequest 失败
dispatched已分发到 AI Core
dispatch_failedAI Core 处理失败
delivering回复投递中
delivered回复投递成功
built消息已构建但未发送(Web/内部频道)
no_sender无可用发送函数
delivery_failed回复投递失败
partial_failed部分分片投递失败
queued事件已入队(异步模式)
queue_full队列已满,事件丢弃
completed内部任务完成
failed内部任务失败

错误处理

管线中任何步骤失败都会记录对应的事件状态,并返回包含错误信息的 GatewayResult。详细的错误类型参见 节点控制平面 - 错误体系

页面历史