智谱chatglm_turbo流式无法输出
例行检查
- [x] 我已确认目前没有类似 issue
- [x] 我已确认我已升级到最新版本
- [x] 我已完整查看过项目 README,尤其是常见问题部分
- [x] 我理解并愿意跟进此 issue,协助测试和提供反馈
- [x] 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭
问题描述 使用 stream=true 输出时,model_name=chatglm_turbo 无法正常输出, 非stream模式可以。
复现步骤
import time
from openai import OpenAI
class OneAPIDemo:
@staticmethod
def completion(mode_name, messages=[]):
"""
完成一次对话
:param mode_name:
:param messages:
:return:
"""
completion = client.chat.completions.create(
model=model_name,
messages=messages
)
return completion
@staticmethod
def completion_stream(model_name, message=[]):
"""
流式对话
:param model_name:
:param message:
:return:
"""
completion = client.chat.completions.create(
model=model_name,
messages=message,
stream=True
)
return completion
if __name__ == '__main__':
base_url = ""
api_key = ""
client = OpenAI(api_key=api_key,
base_url=base_url)
model_name = "chatglm_turbo"
messages = [
{"role": "user", "content": "1+1=?"}
]
start_time = time.time()
# 是否流式输出
stream = True
if stream:
completion_text = ""
response = OneAPIDemo.completion_stream(model_name, messages)
for chunk in response:
if chunk.choices[0].finish_reason == "stop":
# 完成
break
chunk_text = chunk.choices[0].delta.content
if chunk_text is not None:
completion_text += chunk_text
print(f"接收到: {chunk_text}")
print(f"回复:{completion_text}\n本次耗时: {time.time() - start_time:.2f}s")
else:
response = OneAPIDemo.completion(model_name, messages)
res_text = response.choices[0].message.content
print(f"回复: {res_text}\n本次耗时: {time.time() - start_time:.2f}s")
预期结果 =2
我也遇到了,流式调用的时候,只有通义千问是正常的,其他模型会返回json结果,智谱AI会直接报错。
@songquanpeng 是不是因为这个返回的model名和传入的不一样的问题,导致用了openai的python sdk没用?
@songquanpeng 是不是因为这个返回的model名和传入的不一样的问题,导致用了openai的python sdk没用?
可以用模型名称重定向功能试一下
@songquanpeng 是不是因为这个返回的model名和传入的不一样的问题,导致用了openai的python sdk没用?
可以用模型名称重定向功能试一下
好像不行哎
在我使用Python调用通义千问时,使用流式输出也有类似的问题,提示Accept type just supports "text/event-stream"
我的解决方法是注释掉 ./site-packages/openai/_base_client.py:581 行 其内容为:
"Accept": "application/json",
我用的openai包版本为:1.11.0
我的解决方法是注释掉 ./site-packages/openai/_base_client.py:581 行 其内容为:
"Accept": "application/json",
我用的openai包版本为:1.11.0
@xqbumu 可以采用这个方式, 不需要修改 openai 包
r = OPENAI_CLIENT.chat.completions.create(
stream=True,
model='MODEL_NAME',
messages=messages,
extra_headers={
'Accept': 'text/event-stream',
},
)
在请求内加上 extra_headers 参数可以覆盖 OpenAI 包自带的头部信息
我的解决方法是注释掉 ./site-packages/openai/_base_client.py:581 行 其内容为: "Accept": "application/json", 我用的openai包版本为:1.11.0
@xqbumu 可以采用这个方式, 不需要修改 openai 包
r = OPENAI_CLIENT.chat.completions.create( stream=True, model='MODEL_NAME', messages=messages, extra_headers={ 'Accept': 'text/event-stream', }, )在请求内加上
extra_headers参数可以覆盖 OpenAI 包自带的头部信息
感谢,此方法有效
@songquanpeng 是不是因为这个返回的model名和传入的不一样的问题,导致用了openai的python sdk没用?