跳转到主要内容
Session & Event

订阅 Event Stream

通过 SSE 实时订阅会话事件

GET
/api/v1/agentstudio/sessions/{session_id}/events/stream
cURL
curl --request GET \
  --url 'https://dashscope.aliyuncs.com/api/v1/agentstudio/sessions/{session_id}/events/stream' \
  --header 'Authorization: Bearer <YOUR_API_KEY>' \
  --header 'Accept: text/event-stream'
{ "object": "message", "id": "msg_001", "created_at": "2025-10-24T08:15:30.500Z", "role": "assistant", "type": "message", "status": "completed", "content": [ { "type": "text", "text": "开始分析" } ] }

事件类型

SSE 帧的 type 取值:
type说明
message助手输出消息,可流式分块
tool_call内置工具调用请求
tool_call_output内置工具执行结果
tool_approval_request工具审批请求;工具是否需要审批以本事件为准,data 携带 batch_idcall_idnameargumentstool_type
tool_approval_response工具审批裁决,双向事件;requires_action 下发纯 interrupt 时,服务端为批次内每个尚未执行的调用(含已裁决但因批次未收齐而未执行的调用)补发 result=deny 并伴随对应 *_call_outputis_error=true),该配对仅用于展示与审计、尽力而为,待审批集合仍以 pending_call_ids 为准
function_call自托管函数调用请求,需客户端回填 function_call_output
function_call_output服务端确认收到的函数结果回显
mcp_callMCP 工具调用请求
mcp_call_outputMCP 工具执行结果
session_status会话状态变更,含 stop_reason
type=error 为独立分支:错误详情位于 Message 顶层的 error 对象(error.code / error.message),不在 content[].data 中。

is_error

tool_call_output / mcp_call_output 出现,写在 Message 顶层(不在 content[].data 内):true 表示执行失败/中断/拒绝。此时 data 仍为 ToolCallOutput / McpCallOutput,至少含 call_idoutput。读顶层 is_error 判成败,读 data.output 取输出。

Delta 增量流

默认情况下,每个事件仅在生成完成后下发一帧完整 Message(status: "completed")。若希望文本类事件(如 messagereasoning)在生成过程中流式逐块推送,可在请求时用 event_deltas[] 查询参数为指定事件类型开启增量流。该参数可重复传入以声明多个类型;未声明的事件类型仍按单帧完整 Message 下发。
curl -N --no-buffer --get \
  'https://dashscope.aliyuncs.com/api/v1/agentstudio/sessions/'"$SESSION_ID"'/events/stream' \
  -H "Authorization: Bearer $API_KEY" \
  --data-urlencode 'event_deltas[]=message' \
  --data-urlencode 'event_deltas[]=reasoning'
开启后,被声明类型的事件按以下顺序推送三类帧,客户端按 event_id 归并到同一事件:
type说明
event_start事件开始帧,event.id 即该事件最终完整 Message 的 idevent.type 为事件类型(message / reasoning);该帧自身不含 object / content
event_delta增量帧,event_id 对应 event_startevent.iddelta.content 为本次新增的 ContentBlock 片段,delta.index 为内容块序号
message / reasoning事件结束时下发的完整 Message(object: "message"status: "completed"),content 为聚合后的完整内容,与未开启增量时一致
event_delta 帧字段:
字段说明
type恒为 event_delta
event_id所属事件 ID,等于 event_startevent.id,也等于最终完整 Message 的 id;用于将增量帧归并到对应事件
delta.type恒为 content_delta
delta.index内容块在 content 数组中的序号
delta.content本次新增的 ContentBlock 片段,如 {"type":"text","text":"…"}
示例流(reasoningmessage 均开启增量):
: connected

event: message
data: {"object":"message","status":"completed","id":"sevt_status_running_xxx","type":"session_status","content":[{"type":"data","data":{"session_status":"running"}}]}

event: message
data: {"type":"event_start","event":{"id":"msg_reasoning_xxx","type":"reasoning"}}

event: message
data: {"object":"message","status":"completed","id":"msg_reasoning_xxx","role":"assistant","type":"reasoning"}

event: message
data: {"type":"event_start","event":{"id":"msg_answer_xxx","type":"message"}}

event: message
data: {"type":"event_delta","event_id":"msg_answer_xxx","delta":{"type":"content_delta","index":0,"content":{"type":"text","text":"快速"}}}

event: message
data: {"type":"event_delta","event_id":"msg_answer_xxx","delta":{"type":"content_delta","index":0,"content":{"type":"text","text":"排序是一种分治算法。"}}}

event: message
data: {"object":"message","status":"completed","id":"msg_answer_xxx","role":"assistant","type":"message","content":[{"type":"text","text":"快速排序是一种分治算法。"}]}

event: message
data: {"object":"message","status":"completed","id":"sevt_status_idle_xxx","type":"session_status","content":[{"type":"data","data":{"session_status":"idle","stop_reason":{"type":"end_turn"}}}]}
拼接文本时按 event_id + delta.index 顺序累加各 event_deltadelta.content;事件结束时下发的完整 Message 携带聚合后的完整内容,可用于校验。reasoning 事件可能只有 event_start 与完整 Message、不含 event_delta(思考预览不携带思考文本)。

鉴权

string
header
必填

DashScope API Key

Header 参数

enum<string>
必填

固定为 text/event-stream

text/event-stream

路径参数

string
必填

查询参数

enum<string>[]

为指定事件类型开启 Delta 增量流,文本内容将在生成过程中逐块推送。可重复传入以声明多个类型(如 message、reasoning);未声明的类型仍以单帧完整 Message 下发。开启后该类型事件先下发 type=event_start 帧(event.id 即最终完整 Message 的 id),随后下发若干 type=event_delta 增量帧(delta.content 为新增的 ContentBlock 片段、delta.index 为内容块序号),最后下发聚合后的完整 Message;客户端按 event_id + delta.index 顺序累加 delta.content

响应

200-text/event-stream
普通事件
string

恒为 message

string

事件 ID(前缀 msg_ 或 out_)。客户端用此 ID 在业务层去重

string

ISO 8601 时间戳

enum<string>
user,assistant,tool
enum<string>

服务端推送事件类型,详见事件类型表。type=error 见独立分支

message,tool_call,tool_call_output,tool_approval_request,tool_approval_response,function_call,function_call_output,mcp_call,mcp_call_output,session_status
string
object[]

ContentBlock 数组:含发送侧的 text/image/video/file/data;响应侧另可出现 audio(工具输出附件)与 refusal(模型拒绝)

boolean

仅 tool_call_output / mcp_call_output 出现,写在 Message 顶层(不在 content[].data 内):true 表示执行失败/中断/拒绝。读顶层 is_error 判成败,读 data.output 取输出

object

事件附加信息(如 thread_id、call_id 等)