会话事件流(SSE)

更新时间:
复制 MD 格式

会话内的全部交互以事件形式记录。通过 API 订阅时以 SSE(Server-Sent Events)事件流推送。

服务端推送事件

智能体处理消息过程中,服务端按以下类型推送事件:

type

说明

message

助手输出消息,可流式分块(按 sequence_number 累加)

tool_call / tool_call_output

内置工具调用请求与执行结果

mcp_call / mcp_call_output

MCP 工具调用请求与执行结果

session_status

会话状态变更,携带 stop_reason(详见管理会话

客户端发送事件

通过 POST /sessions/{session_id}/events 向会话写入事件。

type

说明

message

发送消息,触发智能体进入 running

发送 message 事件触发智能体处理。完整参数详见发送 Event

curl -X POST "https://{workspace_id}.cn-beijing.maas.aliyuncs.com/api/v1/agentstudio/sessions/sesn_xxx/events" \
  -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "input": [
      {
        "role": "user",
        "type": "message",
        "content": [
          {"type": "text", "text": "分析 /mnt/session/uploads/sales.csv 中 Q3 的销售趋势"}
        ]
      }
    ]
  }'
client.sessions.events.send(
    "sesn_xxx",
    events=[user_message("分析 /mnt/session/uploads/sales.csv 中 Q3 的销售趋势")],
)
client.sessions().events().send("sesn_xxx",
    Collections.singletonList(
        ClientEvents.userMessage("分析 /mnt/session/uploads/sales.csv 中 Q3 的销售趋势")));

SSE 订阅

发送 message 事件时,在请求头中设置 Accept: text/event-stream,响应将以 SSE 格式实时推送全部事件。未设置时返回完整的事件列表(需轮询获取增量)。详见 订阅 Event SSE 事件流

curl -N "https://{workspace_id}.cn-beijing.maas.aliyuncs.com/api/v1/agentstudio/sessions/sesn_xxx/events/stream" \
  -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
  -H "Accept: text/event-stream"
with client.sessions.events.stream("sesn_xxx", timeout=120.0) as stream:
    for event in stream:
        if event.type == "message":
            for block in (event.content or []):
                if getattr(block, "type", None) == "text":
                    print(block.text, end="", flush=True)
        elif event.type == "session_status":
            if event.session_status in ("idle", "terminated"):
                break
try (AgentStudioEventStream stream = client.sessions().events().stream("sesn_xxx", 120_000L)) {
    for (Message event : stream) {
        if ("message".equals(event.getType()) && event.getContent() != null) {
            for (ContentBlock block : event.getContent()) {
                if (block instanceof ContentBlock.Text)
                    System.out.print(((ContentBlock.Text) block).getText());
            }
        } else if ("session_status".equals(event.getType())) {
            break;
        }
    }
}

事件筛选

控制台事件面板左上角下拉框可按类型筛选事件,支持以下筛选项:All events、User、Agent、Tool、Tool_output、Error、Model、System。