通过 SSE 实时订阅会话事件流:助手输出消息、工具调用、状态变更。连接建立后服务端立即下发 : connected 注释行。
前提
已创建会话,详见创建 Session。{session_id} 形如 sesn_xxx...。
接口
GET /sessions/{session_id}/events/stream
请求需带 Accept: text/event-stream。连接建立后服务端立即下发 : connected 注释行,随后实时推送会话事件。
事件信封
data 字段是 Message 对象,公共字段如下:
|
字段 |
类型 |
说明 |
|
|
string |
恒为 |
|
|
string |
事件 ID(前缀 |
|
|
string |
ISO 8601 时间戳 |
|
|
string |
|
|
|
string |
事件类型,见下表 |
|
|
array |
ContentBlock 数组,结构同发送侧 |
|
|
object |
事件附加信息(如 thread_id、call_id 等) |
服务端推送事件类型
|
type |
含义 |
|
|
助手输出消息,可流式分块(按 |
|
|
内置工具调用请求 |
|
|
内置工具执行结果 |
|
|
自托管函数调用请求,需客户端回填 |
|
|
服务端确认收到的函数结果回显 |
|
|
MCP 工具调用请求 |
|
|
MCP 工具执行结果 |
|
|
会话状态变更(含 |
session_status 与 stop_reason
data.content[0].data 携带具体状态:
{
"object": "message",
"type": "session_status",
"content": [{
"type": "data",
"data": {
"session_status": "idle",
"stop_reason": {"type": "end_turn"}
}
}]
}
-
session_status:running|idle|terminated -
stop_reason仅在状态切到idle时出现,三种取值:-
{"type": "end_turn"}:本轮正常结束 -
{"type": "requires_action", "event_ids": [...]}:等待客户端响应(如审批工具调用、回填函数结果),event_ids列出待处理事件 -
{"type": "retries_exhausted"}:重试已耗尽,本轮失败
-
订阅示例
curl -N "$AGENTSTUDIO_URL/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"):
breaktry (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;
}
}
}响应(节选):
: connected
event: message
data: {"object":"message","id":"msg_001","created_at":"2025-10-24T08:15:30.500Z","role":"assistant","type":"message","status":"completed","sequence_number":0,"content":[{"type":"text","text":"开始分析"}]}
event: message
data: {"object":"message","id":"out_8f2a","created_at":"2025-10-24T08:15:32.100Z","role":"assistant","type":"tool_call","status":"completed","content":[{"type":"data","data":{"name":"bash","arguments":{"command":"head -5 /mnt/session/uploads/sales.csv"},"call_id":"call_xxx"}}]}
:keepalive
event: message
data: {"object":"message","id":"msg_002","created_at":"2025-10-24T08:15:35.800Z","role":"assistant","type":"session_status","status":"completed","content":[{"type":"data","data":{"session_status":"idle","stop_reason":{"type":"end_turn"}}}]}