Relyt AI Open API 支持将流式响应发送给客户端,从而为特定请求提供部分结果。此功能通过 服务器推送事件(SSE) 标准实现。

如何理解流式响应

每个请求的响应由一系列响应块组成。当为请求启用流式传输模式时,Relyt AI 将实时向客户端发送更新,持续传送响应块,直到所有数据完全返回。

响应块的结构如下:

{
    "id": "<group_id>",
    "model": "",
    "choices": [
        {
            "delta": {
                "content": "<content>"
            },
            "index": 0
        }
    ],
    "created": 1731664172,
    "group_id": "<group_id>",
    "group_name": "<group_name>",
    "stage": "<block_stage>"
}

每个流式响应块包含以下字段:

  • idgroup_id:响应块所属组的 ID。

    流式响应中的组是响应块的集合。例如,在一个常规任务中,Analyze 阶段的每个步骤都是一个组,而整个 Respond 阶段是另一个组。

  • content:响应块的内容,具体内容会根据块的类型有所不同。有关详细信息,请参阅 内容说明

  • created:表示内容创建时间的时间戳。

  • group_id:响应块所属组的 ID。

  • group_name:组的名称,例如 Conclusions

  • stage:响应块所属的阶段。共有两个阶段:AnalyzeRespond

内容说明

每个响应块中 content 的值根据块的内容类型不同而有所变化:

  • 当块的内容类型为 MESSAGE 时:

    内容为一段文本。

  • 当块的内容类型为 CODE 时:

    内容为一个 Markdown 格式的代码片段。

  • 当块的内容类型为 TABLE 时:

    内容表示一个表格,包含以下内容:

    • name.csv 文件名。

    • url:文件的 S3 键或 URL。

    • expired_aturl 的过期时间。为了将表格保留供以后使用,请确保在其过期之前下载它。

  • 当块的内容类型为 IMAGE 时:

    内容表示一张图片,包含以下内容:

    • name:图片名称。

    • url:图片的 S3 键或 URL。

    • expired_aturl 的过期时间。为了将图片保留供以后使用,请确保在其过期之前下载它。

  • 当块的内容类型为 SOURCES 时:

    内容表示响应块的来源,包含以下内容:

    • source:数据源的文件名。

    • datasource_id:数据源的 ID。

    • dataset_id:数据集的 ID。

    • file_type:数据源文件的扩展名。

  • 当块的内容类型为 QUESTIONS 时:

    内容表示 Relyt AI 提示的后续问题。

让我们来看一个示例。

有关 POST /v2/jobs 端点的详细信息,请参阅 创建任务

Python request
import requests

url = "http://app.ai.relyt.cn/app/api/v2/team/jobs"

payload = {
    "session_id": "cxxdgegeegeg3433fff",
    "user_id": "tmm-dafasdfasdfasdf",
    "stream": True,
    "question": "出发城市和到达城市的组合中,哪一对组合最为常见",
    "dataset_id": "cm1gjmg8e0057r3x22v1fdu8m",
    "datasource_ids": ["cm1gjmmoo0001h0x24uk1xgu9"],
    "output_language": "ZH-CN",
    "job_mode": "AUTO"
}
headers = {
    "x-pd-api-key": "<api-key>",
    "Content-Type": "application/json"
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

The response is simlilar to this:

如果不启用流式传输,Relyt AI 仅在整个响应准备好后才返回响应。

我们以相同的请求为例进行清晰的对比。唯一的不同是将 stream 设置为 False

import requests

url = "https://app.ai.relyt.cn/app/api/v2/team/jobs"

payload = {
    "session_id": "cxxdgegeegeg3433fff",
    "user_id": "tmm-dafasdfasdfasdf",
    "stream": False,
    "question": "出发城市和到达城市的组合中,哪一对组合最为常见?",
    "dataset_id": "cm1gjmg8e0057r3x22v1fdu8m",
    "datasource_ids": ["cm1gjmmoo0001h0x24uk1xgu9"],
    "output_language": "ZH-CN",
    "job_mode": "AUTO"
}
headers = {
    "x-pd-api-key": "$PROJECT_API_KEY",
    "Content-Type": "application/json"
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)

如下为响应示例: