执行已发布的工作流,响应方式为流式响应。
调用 API 执行工作流时,对于支持流式输出的工作流,往往需要使用流式响应方式接收响应数据,例如实时展示工作流的输出信息、呈现打字机效果等。
在流式响应中,服务端不会一次性发送所有数据,而是以数据流的形式逐条发送数据给客户端,数据流中包含工作流执行过程中触发的各种事件(event),直至处理完毕或处理中断。处理结束后,服务端会通过 event: Done 事件提示工作流执行完毕。各个事件的说明可参考返回结果。
说明
目前支持流式响应的工作流节点包括输出节点、问答节点和开启了流式输出的结束节点。对于不包含这些节点的工作流,可以使用执行工作流接口一次性接收响应数据。
|
请求方式 |
POST |
|---|---|
|
请求地址 |
|
|
权限 |
|
|
接口说明 |
执行已发布的工作流,响应方式为流式响应。 |
|
参数 |
取值 |
说明 |
|---|---|---|
|
Authorization |
Bearer $Access_Token |
用于验证客户端身份的访问令牌。你可以在扣子编程中生成访问令牌,详细信息,参考准备工作。 |
|
Content-Type |
application/json |
解释请求正文的方式。 |
|
参数 |
类型 |
是否必选 |
说明 |
|---|---|---|---|
|
workflow_id |
String |
必选 |
待执行的 Workflow ID,此工作流应已发布。 |
|
parameters |
map[String]Any |
可选 |
工作流开始节点的输入参数及取值,你可以在指定工作流的编排页面查看参数列表。
|
|
bot_id |
String |
可选 |
需要关联的智能体ID。 部分工作流执行时需要指定关联的智能体,例如存在数据库节点、变量节点等节点的工作流。 说明
|
|
ext |
Map[String][String] |
可选 |
用于指定一些额外的字段,以 Map[String][String] 格式传入。例如某些插件会隐式用到的经纬度等字段。
|
|
app_id |
String |
可选 |
工作流所在的应用 ID。 说明 仅运行扣子应用中的工作流时,才需要设置 app_id。智能体绑定的工作流、空间资源库中的工作流无需设置 app_id。 |
|
workflow_version |
String |
可选 |
工作流的版本号,仅当运行的工作流属于资源库工作流时有效。未指定版本号时默认执行最新版本的工作流。 |
|
connector_id |
String |
可选 |
渠道 ID,用于配置该工作流在什么渠道执行。
说明 不同渠道的用户数据、会话记录等相互隔离,进行数据分析统计时,不支持跨渠道数据调用。 |
说明
在流式响应中,开发者需要注意是否存在丢包现象。
event: Done 的事件为结束标志。开发者应根据 id 确认响应消息整体无丢包现象。node_is_finish : true 的事件为结束标志。开发者应根据 node_seq_id 确认 Message 事件中每条消息均完整返回,无丢包现象。|
参数名 |
参数类型 |
参数描述 |
|---|---|---|
|
id |
Integer |
此消息在接口响应中的事件 ID。以 0 为开始。 |
|
event |
String |
当前流式返回的数据包事件。包括以下类型:
|
|
data |
Object |
事件内容。各个 event 类型的事件内容格式不同。 |
Message 事件中,data 的结构如下:
|
参数名 |
参数类型 |
参数描述 |
|---|---|---|
|
content |
String |
流式输出的消息内容。 |
|
node_title |
String |
输出消息的节点名称,例如输出节点、结束节点。 |
|
node_seq_id |
String |
此消息在节点中的消息 ID,从 0 开始计数,例如输出节点的第 5 条消息。 |
|
node_is_finish |
Boolean |
当前消息是否为此节点的最后一个数据包。 |
|
ext |
Map[String]String |
额外字段。 |
|
usage |
Object of Usage |
资源使用情况,包含本次 API 调用消耗的 Token 数量等信息。 |
|
node_id |
String |
输出消息的节点 ID。 |
|
node_execute_uuid |
String |
节点每次执行的 ID,用于追踪和识别工作流中特定节点的单次执行情况。 |
|
参数 |
类型 |
示例 |
说明 |
|---|---|---|---|
|
input_count |
Integer |
50 |
输入内容所消耗的 Token 数,包含对话上下文、系统提示词、用户当前输入等所有输入类的 Token 消耗。 |
|
output_count |
Integer |
100 |
大模型输出的内容所消耗的 Token 数。 |
|
token_count |
Integer |
150 |
本次 API 调用消耗的 Token 总量,包括输入和输出两部分的消耗。 |
Interrupt 事件中,data 的结构如下:
|
参数名 |
参数类型 |
参数描述 |
|---|---|---|
|
interrupt_data |
Object |
中断控制内容。 |
|
interrupt_data.event_id |
String |
工作流中断事件 ID,恢复运行时应回传此字段,具体请参见恢复运行工作流(流式响应)。 |
|
interrupt_data.type |
Integer |
工作流中断类型,恢复运行时应回传此字段,具体请参见恢复运行工作流(流式响应)。 |
|
interrupt_data.required_parameters |
map<String,WorkflowParameter> |
工作流中断时需要补充的参数信息,采用键值对(key-value)结构:key为参数名称,value为该参数的值。 |
|
node_title |
String |
输出消息的节点名称,例如“问答”。 |
Error 事件中,data 的结构如下:
|
参数名 |
参数类型 |
参数描述 |
|---|---|---|
|
error_code |
Integer |
调用状态码。
|
|
error_message |
String |
状态信息。API 调用失败时可通过此字段查看详细错误信息。 |
curl --location --request POST 'https://api.coze.cn/v1/workflow/stream_run' \
--header 'Authorization: Bearer pat_fhwefweuk****' \
--header 'Content-Type: application/json' \
--data-raw '{
"workflow_id": "73664689170551*****",
"parameters": {
"user_name":"George"
}
}'
id: 0
event: Message
data: {"content":"msg","node_is_finish":false,"node_seq_id":"0","node_title":"Message"}
id: 1
event: Message
data: {"content":"为","node_is_finish":false,"node_seq_id":"1","node_title":"Message"}
id: 2
event: Message
data: {"content":"什么小明要带一把尺子去看电影?\n因","node_is_finish":false,"node_seq_id":"2","node_title":"Message"}
id: 3
event: Message
data: {"content":"为他听说电影很长,怕","node_is_finish":false,"node_seq_id":"3","node_title":"Message"}
id: 4
event: Message
data: {"content":"坐不下!","node_is_finish":true,"node_seq_id":"4","node_title":"Message"}
id: 5
event: Message
data: {"content":"{\"output\":\"为什么小明要带一把尺子去看电影?\\n因为他听说电影很长,怕坐不下!\"}","cost":"0.00","node_is_finish":true,"node_seq_id":"0","node_title":"","token":0}
id: 6
event: Done
data: {}
id: 0
event: Error
data: {"error_code":4000,"error_message":"Request parameter error"}
// 流式执行工作流,触发问答节点,Bot提出问题
id: 0
event: Message
data: {"content":"请问你想查看哪个城市、哪一天的天气呢","content_type":"text","node_is_finish":true,"node_seq_id":"0","node_title":"问答"}
id: 1
event: Interrupt
data: {"interrupt_data":{"data":"","event_id":"7404830425073352713/2769808280134765896","type":2},"node_title":"问答"}
如果成功调用扣子编程的 API,返回信息中 code 字段为 0。如果状态码为其他值,则表示接口调用失败。此时 msg 字段中包含详细错误信息,你可以参考错误码文档查看对应的解决方法。