扣子编程支持流式插件,低代码智能体或工作流在单次调用插件时,可以输出多条消息,每条消息能够以类似打字机的效果逐条动态显示,实现流式输出效果。
流式插件适用于需要实时处理和展示连续消息流的场景,它能够提供动态的消息输出,增强用户体验,例如聊天机器人和实时通知场景。
关于流式插件的相关注意事项如下:
配置流式插件,你的业务接口需要实现 Server-Sent Events (SSE) 传输协议,并遵守扣子编程插件所定义的数据协议规范。
数据结构定义说明如下:
说明
data 是数据对象经过 JSON 序列化后得到的数据,实际流转时是 []byte 类型。在某些日志输出中,可能会看到这些数据被编码为 Base64 格式,这是正常现象。|
字段 |
类型 |
是否必选 |
生效维度 |
字段说明 |
|---|---|---|---|---|
|
id |
string |
必选 |
数据包维度 |
事件 ID。 |
|
event |
string |
必选 |
数据包维度 |
事件名。 |
|
data |
[]byte |
必选 |
数据包维度 |
消息数据,将 JSON 数据序列化为字节切片([]byte),在编辑器中显示为 Base64 编码的字符串。 |
|
data.stream_id |
string |
必选 |
消息维度 |
消息 ID。 |
|
data.output_mode |
Integer |
可选 |
消息维度 |
当前 message 的输出模式:
默认值为 0。 |
|
data.return_type |
Integer |
可选 |
消息维度 |
最后一条 message 输出目标:
默认值为 0,当 |
|
data.content_type |
Integer |
可选 |
数据包维度 |
本次数据包输出内容的类型,仅可传 0 表示文本,默认值为 0。 |
|
data.context_mode |
Integer |
可选 |
消息维度 |
下次对话时,是否将这条消息加入聊天上下文:
默认值为 0。 |
|
data.content |
string |
可选 |
数据包维度 |
业务接口返回内容 ,默认值为 nil。 |
|
data.is_finish |
bool |
必选 |
流维度 |
整个流是否结束。 |
|
data.is_last_msg |
bool |
必选 |
消息维度 |
是否为最后一条消息。 |
|
data.is_last_packet_in_msg |
bool |
必选 |
数据包维度 |
是否为当前 message 的最后一个包。 |
|
data.ext |
map[string]string |
可选 |
数据包维度 |
扩展字段,默认值为 nil。 |
以下是一个流请求的数据包标识示例:
|
message |
数据包维度 |
|||
|---|---|---|---|---|
|
message 1 |
数据包 1 |
数据包 2 |
… |
数据包 End |
|
message 2 |
数据包 1 |
数据包 2 |
… |
数据包 End |
|
… |
… |
… |
… |
… |
|
message End |
数据包 1 |
数据包 2 |
… |
数据包 End |
以下是一个数据包返回示例:
{
"id" : "xxxxx1",
"event": "play",
"data": {
"is_last_msg":false,
"is_finish":false,
"is_last_packet_in_msg":false,
"stream_id":"message1",
"context_mode": 0,
"output_mode": 0 ,
"return_type": 0 ,
"content_type": 0 ,
"content": "{插件输出内容}",
"ext":{
"example1":"{xxx}",
"example2":"1",
}
}
}
实现 SSE 协议时,HTTP 响应头需满足如下要求。
|
响应头(Response Header) |
取值(Value) |
说明 |
|---|---|---|
|
Content-Type |
text/event-stream |
告知客户端该响应为事件流,用于区别普通的 HTTP 响应。 |
|
Connection |
keep-alive |
SSE 是长连接,需保持连接状态,防止客户端会误判数据传输已完成。 |
|
Transfer-Encoding |
chunked |
采用分块传输编码,支持数据的流式推送。 |
按照 SSE 的数据包协议进行返回,确保数据格式符合以下示例。
用 CURL 验证格式:
用 Postman 验证格式:
你已经创建了一个插件,API 接口已经实现 SSE 传输协议,并且 API 接口遵守扣子编程插件所定义的数据协议规范,详情请参考快速搭建智能体列表查询插件。
登录扣子编程。
在页面顶部选择目标工作空间,然后在左侧导航栏中单击资源库。
在插件页签下,单击目标插件。
在插件详情页,单击使用代码编辑工具的图标。
在更新插件页面,单击编辑。
在 openapi (填写 yaml) 区域,找到需要配置为流式输出的接口,在operationId下添加x-runMode: Streaming,以开启该接口的流式输出模式。
代码示例如下:
info:
description: stream output demo
title: Stream Demo
version: v1
openapi: 3.0.1
paths:
/your/stream/api:
post:
operationId: stream
x-runMode: Streaming
requestBody:
content:
application/json:
schema:
type: object
responses:
"200":
content:
application/json:
schema:
type: object
description: empty response
default:
description: ""
summary: stream demo
servers:
- url: https://www.demo.com
配置完成后,你可以调试插件。如果插件输出结果符合预期,你就可以发布插件。
你可以在智能体或工作流中使用流式插件,详情可参考使用插件。
注意
在工作流中使用流式插件,请注意: