QwenLM / Qwen-Agent

Agent framework and applications built upon Qwen2, featuring Function Calling, Code Interpreter, RAG, and Chrome extension.
https://pypi.org/project/qwen-agent/
Other
2.51k stars 249 forks source link

如何改写可以是的Agent可以非流式调用LLM,更改了后很多数据类型有错误。 #184

Open 4AM-GodVZz opened 3 weeks ago

tuhahaha commented 3 weeks ago

目前agent的输出是默认流式(使用yield返回response),如果想把agent更改成非流式,需要添加较多逻辑。请问是有什么场景必须使用非流式呢?因为其实所有流式都可以用*_, last = response的方式获得最终非流式的结果。

4AM-GodVZz commented 2 weeks ago

目前agent的输出是默认流式(使用yield返回response),如果想把agent更改成非流式,需要添加较多逻辑。请问是有什么场景必须使用非流式呢?因为其实所有流式都可以用*_, last = response的方式获得最终非流式的结果。

因为本地部署的大模型,是非流式的输出结果,Agent需要以非流式调用大模型

JianxinMa commented 2 weeks ago

目前agent的输出是默认流式(使用yield返回response),如果想把agent更改成非流式,需要添加较多逻辑。请问是有什么场景必须使用非流式呢?因为其实所有流式都可以用*_, last = response的方式获得最终非流式的结果。

因为本地部署的大模型,是非流式的输出结果,Agent需要以非流式调用大模型

那我们建议直接修改llm类的_chat_stream实现,比如这个位置 https://github.com/QwenLM/Qwen-Agent/blob/main/qwen_agent/llm/oai.py#L88_chat_stream(..., delta_stream=False)里面的“流式”调用llm服务改成“非流式”调用llm服务,但是返回的内容继续保持yield [Message(ASSISTANT, full_response)]这个格式。

wadefollower commented 1 week ago

目前agent的输出是默认流式(使用yield返回response),如果想把agent更改成非流式,需要添加较多逻辑。请问是有什么场景必须使用非流式呢?因为其实所有流式都可以用*_, last = response的方式获得最终非流式的结果。

因为本地部署的大模型,是非流式的输出结果,Agent需要以非流式调用大模型

那我们建议直接修改llm类的_chat_stream实现,比如这个位置 https://github.com/QwenLM/Qwen-Agent/blob/main/qwen_agent/llm/oai.py#L88_chat_stream(..., delta_stream=False)里面的“流式”调用llm服务改成“非流式”调用llm服务,但是返回的内容继续保持yield [Message(ASSISTANT, full_response)]这个格式。

请问这里修改可以更加详细说明一下吗?我如图修改了代码,可是输出依然是流式输出,请问是还需要需改哪里吗?

微信图片_20240624164921
JianxinMa commented 4 days ago

目前agent的输出是默认流式(使用yield返回response),如果想把agent更改成非流式,需要添加较多逻辑。请问是有什么场景必须使用非流式呢?因为其实所有流式都可以用*_, last = response的方式获得最终非流式的结果。

因为本地部署的大模型,是非流式的输出结果,Agent需要以非流式调用大模型

那我们建议直接修改llm类的_chat_stream实现,比如这个位置 https://github.com/QwenLM/Qwen-Agent/blob/main/qwen_agent/llm/oai.py#L88_chat_stream(..., delta_stream=False)里面的“流式”调用llm服务改成“非流式”调用llm服务,但是返回的内容继续保持yield [Message(ASSISTANT, full_response)]这个格式。

请问这里修改可以更加详细说明一下吗?我如图修改了代码,可是输出依然是流式输出,请问是还需要需改哪里吗? 微信图片_20240624164921

@wadefollower 截图中的delta_stream不是开启流式的意思,而是在“增量流式”和“全量流式”中选择一种流式。要把 _chat_stream改成非流式的话,可以类似这样:

    def _chat_stream(
        self,
        messages: List[Message],
        delta_stream: bool,
        generate_cfg: dict,
    ) -> Iterator[List[Message]]:
        yield self._chat_no_stream(messages=messages, generate_cfg=generate_cfg)