读取 Chat Completions 流式响应

向 Chat Completions 请求添加 stream: true,以服务器发送事件(SSE)持续读取生成增量。此页只说明 Chat Completions 的流式事件;Responses 和 Anthropic Messages 使用各自的事件结构。

POST https://token.moi.matrixorigin.cn/v1/chat/completions

调用前准备

请求地址为 https://token.moi.matrixorigin.cn/v1/chat/completions。准备具有 Genesis 权限的访问凭据,以及支持 Chat Completions 流式输出的模型 ID。

下方示例使用:

  • $GENESIS_ACCESS_TOKEN:实际访问令牌或服务账号 API Key,通过 Authorization Header 传递。

  • $MODEL_ID:要调用的模型 ID,填入请求体的 model 字段。

请求头

请求头

是否必填

说明

Authorization

使用 Bearer <GENESIS_ACCESS_TOKEN> 传递访问凭据。

Content-Type

设置为 application/json

Accept

可设置为 text/event-stream

请求体

请求体包含以下字段。

字段

类型

是否必填

说明

model

string

支持 Chat Completions 流式输出的模型 ID。

messages

array

按顺序提交的消息列表。

stream

boolean

必须设为 true

请求示例

curl -N -X POST "https://token.moi.matrixorigin.cn/v1/chat/completions" \
  -H "Authorization: Bearer $GENESIS_ACCESS_TOKEN" \
  -H 'Content-Type: application/json' \
  -H 'Accept: text/event-stream' \
  -d '{
    "model": "'"$MODEL_ID"'",
    "messages": [
      {
        "role": "user",
        "content": "用一句话说明主键的作用。"
      }
    ],
    "stream": true
  }'

-N 使 curl 不缓冲输出,便于逐行读取 SSE 事件。

成功响应

成功时响应媒体类型为 text/event-stream。每个 data: 行包含一个 chat.completion.chunk,末尾事件为 data: [DONE]

data: {"object":"chat.completion.chunk","choices":[{"delta":{"content":"主键"}}]}

data: {"object":"chat.completion.chunk","choices":[{"delta":{"content":"用于唯一标识表中的每一行。"}}]}

data: [DONE]

单个 data: 行中的 JSON 负载具有以下结构;delta.content 缺失时不应追加文本:

{
  "object": "chat.completion.chunk",
  "choices": [
    {
      "delta": {
        "content": "主键"
      }
    }
  ]
}

单个 data: 行中用于读取增量内容的字段如下。

字段路径中的 [] 表示数组中的每一项。例如,choices[].delta.content 表示 choices 数组中每一项的 delta.content 字段。

字段或事件

类型

说明

object

string

事件对象类型,示例为 chat.completion.chunk

choices

array

当前事件的增量列表。

choices[].delta

object

增量对象。

choices[].delta.content

string,可选

存在时追加到当前文本。

[DONE]

事件标记

正常结束标记。收到该标记后再将结果标记为完成。

网络分片可能将一条 SSE 事件拆开。客户端应按事件边界解析,并在收到 [DONE] 前保留未完成状态。

错误响应

流开始前的错误使用普通 HTTP 状态和 JSON 错误正文处理;流开始后的错误可能表现为事件异常或连接中断。错误对象由兼容的模型服务返回;除 error.message 外的字段可能省略。

错误对象字段

{
  "error": {
    "message": "<可读错误信息>",
    "type": "<错误类型,可能省略>",
    "code": "<错误代码,可能省略>"
  }
}

建立流前的错误正文中可能出现以下字段。

字段

类型

说明

error.message

string

建立流前返回的可读错误信息。

error.type

string,可选

上游错误类别。

error.code

string 或 null,可选

上游错误代码。

常见错误

下表说明建立流前或读取事件时应执行的操作。

阶段或 HTTP 状态码

错误代码或现象

常见原因

建议操作

建立流前:400

请求体或 stream 参数无效。

修正请求后重新建立连接;不要开始解析 SSE。

建立流前:401

凭据无效或没有模型权限。

修正认证信息和模型访问范围。

建立流前:403

凭据无效或没有模型权限。

修正认证信息和模型访问范围。

建立流前:429

请求受限或服务暂时不可用。

降低请求频率,或稍后建立新连接。

建立流前:5xx

请求受限或服务暂时不可用。

降低请求频率,或稍后建立新连接。

已收到部分事件

连接在 [DONE] 前中断。

流未正常结束。

将结果标记为中断,不标记为完成。只有应用可以识别重复内容时才重新请求。

后续操作

最后更新于