必须显式传入stream=True参数,用for chunk in response遍历流式响应,安全提取chunk.choices[0].delta.content并拼接,避免未判空导致报错。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要在Python中正确接收并拼接智谱清言API流式返回的多个chunk,否则只能拿到零散字符甚至报错。
确认API调用已启用stream=True
调用client.chat.completions.create()时,必须显式传入stream=True参数,否则根本不会触发流式响应。官方SDK默认是stream=False,不写这行就永远收不到分块数据。
检查你的代码里是否有这一行:stream=True,它必须和model、messages等参数同级,放在括号内。
用for循环逐个读取chunk
流式响应返回的是一个可迭代对象,不是普通JSON,不能直接.json()或.text解析。
必须用for chunk in response:方式遍历,每次拿到一个ChatCompletionChunk对象。
这一步操作起来很简单,直接把文件拖进去就行。
从chunk中提取content字段
每个chunk里的文本内容藏在chunk.choices[0].delta.content里。注意:有些chunk的content可能是None(比如开头的system role chunk或结尾的finish_reason chunk),直接取会抛AttributeError。
安全写法是加一层判断:if chunk.choices and chunk.choices[0].delta.content:再拼接。
【不要直接写 chunk.choices[0].delta.content】——未判空会导致程序中断。
完整解析逻辑示例
第一步:初始化空字符串full_response = "";
第二步:遍历response → 检查chunk.choices是否存在且非空 → 再检查delta.content是否为字符串;
第三步:把有效的content追加到full_response末尾;
第四步:遇到finish_reason == "stop"时可提前退出循环(非必须,for自动结束)。
注意:流式响应中chunk.id和chunk.created每次都不一样,不能用来做去重或排序。


















