Closed SSTato closed 7 months ago
嘿,@SSTato!好久不见,欢迎回来。希望你一切都好!
根据我对Langchain-Chatchat代码库的理解,你在使用zhipu-api时无法流式输出的原因可能是在do_chat
方法中,流式功能被明确禁用了。在发送POST请求到API的data
字典中,stream
参数被设置为False
:
data = {
"model": params.version,
"messages": params.messages,
"max_tokens": params.max_tokens,
"temperature": params.temperature,
"stream": False # 这里禁用了流式输出
}
此外,处理流式响应的代码部分(使用服务器发送事件,Server-Sent Events,SSE)被注释掉了:
# with connect_sse(client, "POST", url, json=data) as event_source:
# for sse in event_source.iter_sse():
# chunk = json.loads(sse.data)
# if len(chunk["choices"]) != 0:
# text += chunk["choices"][0]["delta"]["content"]
# yield {"error_code": 0, "text": text}
要启用流式输出,你需要在data
字典中设置"stream": True
,并取消注释处理SSE的代码部分。这样客户端就可以在消息到达时接收和处理消息,而不是等待整个响应。
你可以在以下链接中查看相关代码:
至于zhipu-api是否设计支持流式输出,从提供的代码来看,zhipu-api是支持流式输出的。这从do_chat
方法中的ChatGLMWorker
类的注释部分可以看出,其中一个名为connect_sse
的上下文管理器用于处理通过服务器发送事件(SSE)的流式HTTP响应。connect_sse
函数封装了httpx.Client.stream
方法,以产生一个EventSource
,这是专门用来处理流式响应的。
因此,流式输出的能力是通过设计实现的,而不是API本身的限制。当前在do_chat
方法中的实现,不使用流式输出(在数据负载中"stream": False
),代表了一种选择,而不是API强加的约束。
因为zhipu 流输出有bug,所以在程序里写成了非流,这个没办法
我也遇到了,打开了注释代码,本地是可以实现对话的。但是一直报错ERROR: TypeError: Caught exception: object of type 'NoneType' has no len()
Lib\site-packages\langchain_community\chat_models\openai.py中的493加一个判断就不会报ERROR了
因为zhipu 流输出有bug,所以在程序里写成了非流,这个没办法
我这样改还会有bug吗
@SSTato 确实不会报错了 但是这个是langchain依赖的 langchain_community 貌似不好提取到项目中吧
我按照以下这样改api可以流式输出,webui页面不可以,但是我也不用页面所以我按照以下方式改的 model_config.py配置如下: 然后在./server/utils.py文件的get_ChatOpenAI()函数里这样改,就可以api调用zhipu流式了:
我按照以下这样改api可以流式输出,webui页面不可以,但是我也不用页面所以我按照以下方式改的 model_config.py配置如下: 然后在./server/utils.py文件的get_ChatOpenAI()函数里这样改,就可以api调用zhipu流式了:
你好,请问generate_token()函数在哪儿调用的啊
使用zhipu-api的时候无法流式输出,使用别的api或者本地大模型时可以正常流式输出,这是为什么?