智谱(Zhipu)大模型的流式使用 response.iter_lines() 逐行解析 SSE 流

复制代码
import requests
import json
url = "https://open.bigmodel.cn/api/paas/v4/chat/completions"

payload = {
    "model": "glm-4.7",
    "messages": [
        {
            "role": "user",
            "content": "写一首关于春天的诗。"
        }
    ],
    "stream": True,
    "temperature": 1
}
headers = {
    "Authorization": "api-key",
    "Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
# 检查状态
if response.status_code != 200:
    print(f"请求失败: {response.status_code} - {response.text}")
    exit()
full_content = []
#流失输出
print("正在生成...\n")
try:
    for line in response.iter_lines():
        if line:
            decoded_line = line.decode('utf-8')
            # SSE 格式: data: {...}
            if decoded_line.startswith("data:"):
                json_str = decoded_line[len("data:"):].strip()
                if json_str == "[DONE]":
                    break
                try:
                    chunk = json.loads(json_str)
                    # 提取 reasoning_content
                    if "choices" in chunk and len(chunk["choices"]) > 0:
                        delta = chunk["choices"][0].get("delta", {})
                        content = delta.get("reasoning_content")
                        if content is not None:
                            full_content.append(content)
                            #print(content, end="", flush=True)  # 实时打印
                except json.JSONDecodeError as e:
                    print(f"\nJSON 解析错误: {e}, 原始数据: {json_str}")
except Exception as e:
    print(f"\n流处理异常: {e}")

print("\n\n✅ 最终完整输出:")
print("".join(full_content))

你提供的代码使用 requests.post 调用智谱(Zhipu)大模型的 流式(stream=True)接口,但当前写法存在两个关键问题:

❌ response.text 无法正确处理 流式响应(SSE) ------ 它会等待整个响应结束才返回,而流式接口是逐块发送的;

❌ 智谱 GLM-4 的流式响应中,实际文本内容在 choices0.delta.reasoning_content 字段(而非标准 OpenAI 的 content)。

✅ 正确做法:使用 response.iter_lines() 逐行解析 SSE 流

以下是 完整可运行的修复代码,能正确提取 reasoning_content 并拼接成完整诗歌:

python

编辑

import requests

import json

配置

url = "https://open.bigmodel.cn/api/paas/v4/chat/completions"

payload = {

"model": "glm-4.7",

"messages": [

{"role": "user", "content": "写一首关于春天的诗。"}

],

"stream": True,

"temperature": 1

}

headers = {

"Authorization": "Bearer your_api_key_here", # ⚠️ 替换为你的有效 API Key

"Content-Type": "application/json"

}

发送流式请求

response = requests.post(url, json=payload, headers=headers, stream=True)

检查状态

if response.status_code != 200:

print(f"请求失败: {response.status_code} - {response.text}")

exit()

full_content = \[\]

print("正在生成...\n")

try:

for line in response.iter_lines():

if line:

decoded_line = line.decode('utf-8')

SSE 格式: data: {...}

if decoded_line.startswith("data:"):

json_str = decoded_linelen("data:"):.strip()

if json_str == "DONE":

break

try:

chunk = json.loads(json_str)

提取 reasoning_content

if "choices" in chunk and len(chunk"choices") > 0:

delta = chunk"choices"0.get("delta", {})

content = delta.get("reasoning_content")

if content is not None:

full_content.append(content)

print(content, end="", flush=True) # 实时打印

except json.JSONDecodeError as e:

print(f"\nJSON 解析错误: {e}, 原始数据: {json_str}")

except Exception as e:

print(f"\n流处理异常: {e}")

print("\n\n✅ 最终完整输出:")

print("".join(full_content))

🔑 关键说明

表格

问题 解决方案

流式响应读取 使用 stream=True + response.iter_lines()

SSE 格式解析 每行以 data: 开头,去掉前缀后解析 JSON

字段位置 智谱 GLM-4 流式响应使用 delta.reasoning_content(不是 content)

结束标志 遇到 data: DONE 时停止

实时输出 print(..., end="", flush=True) 实现逐字打印

📝 输出示例(模拟)

text

编辑

正在生成...

春天的缕东风穿过山谷,

便唤醒了沉睡的田野。

✅ 最终完整输出:

春天的缕东风穿过山谷,

便唤醒了沉睡的田野。

相关推荐
强哥聊算力2 分钟前
《算力江湖·英伟达传奇》第七集:ChatGPT出现前夜,英伟达发生了什么?
服务器·人工智能·算法·ai·chatgpt·gpu算力
Jmyd01232 小时前
Web端3D营销展厅技术实现路径:从素材上云到线索回流的数据链路
前端·3d·性能优化·三维数字化
一只鹿鹿鹿2 小时前
政务外网整体设计方案(PPT)
大数据·数据库·web安全·系统安全·流程图·政务
砚凝霜3 小时前
【软考信息安全】第二十二章 Web服务器安全分析与增强——Apache与IIS
服务器·前端·安全
2603_965148113 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
Android系统攻城狮3 小时前
Linux Gstreamer深度解析之gst_audio_ring_buffer_delay调用流程与实战(七十二)
linux·运维·服务器·gstreamer音视频·音视频进阶
AI砖家3 小时前
安全进入 Agent Loop:2027 年 Coding Agent 的决胜点
数据库·安全·codex·vibecoding
wangqiaowq3 小时前
SQL server C盘空间占满的处理
数据库·sql
文人sec3 小时前
SQL基础入门笔记 | 从零基础到掌握核心查询语句
数据库·笔记·sql
数字新视界3 小时前
机房动环监控提升运维效率
大数据·服务器·数据库·动环监控系统·动力与环境监控系统