OpenAI 流式输出 API 文档
📡 接口地址
https://www.dmxapi.cn/v1/chat/completions📋 请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 是 | 模型名称 |
| stream | boolean | 是 | 是否开启流式输出 |
| messages | array | 是 | 对话消息列表 |
💻 Python 请求示例
python
"""
=================================================================
OpenAI兼容API流式对话示例
=================================================================
本脚本演示如何使用流式传输(Server-Sent Events)方式调用AI聊天接口
实现实时接收和显示AI响应内容的效果
=================================================================
"""
# =================================================================
# 1. 导入依赖库
# =================================================================
import json # JSON数据处理:用于解析API返回的JSON格式数据
import requests # HTTP请求库:用于发送POST请求到API服务器
# =================================================================
# 2. 配置API连接参数
# =================================================================
url = "https://www.dmxapi.cn/v1/chat/completions" # API端点地址
# 请求头配置
headers = {
"Authorization": "Bearer sk-******************************", # 身份认证令牌(请替换为您的真实API密钥)
"Content-Type": "application/json" # 声明请求体为JSON格式
}
# =================================================================
# 3. 构建请求数据
# =================================================================
payload = {
"model": "gpt-5-mini", # 选择AI模型(此处使用gpt-5-mini模型)
"stream": True, # 启用流式输出模式,可实时接收生成的内容片段
"messages": [
{
"role": "system", # 系统消息:定义AI的行为模式
"content": "You are a helpful assistant."
},
{
"role": "user", # 用户消息:实际的问题或指令
"content": "周树人和鲁迅是兄弟吗?"
}
]
}
# =================================================================
# 4. 发送请求并处理流式响应
# =================================================================
# 发送POST请求,stream=True启用流式接收模式
response = requests.post(url, headers=headers, json=payload, stream=True)
# 数据缓冲区:由于网络传输可能分块到达,需要缓存不完整的数据
buffer = ""
# =================================================================
# 5. 逐块处理响应数据流
# =================================================================
for chunk in response.iter_content(chunk_size=None):
if chunk: # 确保接收到的数据块非空
# 将二进制数据解码为UTF-8字符串并追加到缓冲区
buffer += chunk.decode("utf-8")
# -----------------------------------------------------------
# 按行处理缓冲区数据(SSE协议是基于行的)
# -----------------------------------------------------------
while "\n" in buffer:
# 提取第一行数据,剩余部分保留在缓冲区
line, buffer = buffer.split("\n", 1)
# 跳过空行(SSE协议中空行用于分隔事件)
if not line.strip():
continue
# -----------------------------------------------------------
# 解析SSE格式数据(Server-Sent Events)
# SSE数据格式: "data: {JSON内容}"
# -----------------------------------------------------------
if line.startswith("data: "):
# 提取"data: "后面的实际JSON数据
data_line = line[6:].strip()
# 检查流结束标记
if data_line == "[DONE]":
break
try:
# 解析JSON数据
data = json.loads(data_line)
# ---------------------------------------------------
# 提取AI生成的文本内容
# 数据结构: data.choices[0].delta.content
# ---------------------------------------------------
if "choices" in data and len(data["choices"]) > 0 and "delta" in data["choices"][0]:
content = data["choices"][0]["delta"].get("content", "")
# 只输出非空内容(过滤掉仅包含元数据的响应)
if content:
# end="": 不换行
# flush=True: 立即输出,不等待缓冲区满
# 实现打字机效果的实时显示
print(content, end="", flush=True)
except json.JSONDecodeError:
# ---------------------------------------------------
# JSON解析失败处理
# 原因:数据块可能在JSON对象中间被截断
# 解决:将未完成的行放回缓冲区,等待下一个数据块
# ---------------------------------------------------
buffer = line + "\n" + buffer
break # 退出while循环,继续接收下一个chunk📤 返回示例
流式输出效果:
text
不是。周树人是鲁迅的本名,鲁迅是他的笔名——两者是同一个人。鲁迅(周树人,1881–1936)是中国现代著名作家,代表作有《狂人日记》《阿Q正传》等。⚠️ 注意事项
- 请妥善保管您的 API Key,不要泄露给他人
- 流式输出适合需要实时展示响应内容的场景
- 确保网络连接稳定以获得最佳的流式体验
© 2025 DMXAPI OpenAI Stream
