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
3.08k stars 302 forks source link

模型判断不用调用工具,但依然进行调用工具的函数 #140

Open EvilCalf opened 4 months ago

EvilCalf commented 4 months ago

[{'role': 'assistant', 'content': 'Thought: 首先,我需要整理用户的症状列表。\nAction: 没有使用工具的必要,因为我已经得到了完整的症状列表。\nAction Input: None\n'}]

File "/home/xujd/miniconda3/envs/qwen/lib/python3.11/site-packages/qwen_agent/agent.py", line 88, in run for rsp in self._run(messages=new_messages, **kwargs): File "/home/xujd/miniconda3/envs/qwen/lib/python3.11/site-packages/qwen_agent/agents/react_chat.py", line 92, in _run observation = self._call_tool(action, ^^^^^^^^^^^^^^^^^^^^^^^ File "/home/xujd/miniconda3/envs/qwen/lib/python3.11/site-packages/qwen_agent/agents/fncall_agent.py", line 88, in _call_tool if self.function_map[tool_name].file_access:


KeyError: '没有使用工具的必要,因为我已经得到了完整的症状列表。'

这个怎么解决。。。求助
JianxinMa commented 4 months ago

我们修下。

@tuhahaha 这个问题我记得我们修过,没修完全?

JianxinMa commented 4 months ago

刚在 main 分支加了个小fix,现在代码至少应该不会直接挂掉了:https://github.com/QwenLM/Qwen-Agent/commit/e271cdf4128c2523b5e0d752403da12d2f57ee95

但模型为什么会输出这个badcase我还没有太大头绪(我之前遇到的一般是Action为不存在的工具、但看这个case似乎是Thought的内容出现在了Action里),请问是对话轮数特别多、或者输入特别长吗?

EvilCalf commented 4 months ago

并没有这就是第一轮,而且我这边用的print(respone)就和示例一样在for response in bot.run(messages):,所有的bot输出全在一个元素string里,并不是thought action final这些单独列表一个元素。是因为流式输出的原因么

JianxinMa commented 4 months ago

并没有这就是第一轮,而且我这边用的print(respone)就和示例一样在for response in bot.run(messages):,所有的bot输出全在一个元素string里,并不是thought action final这些单独列表一个元素。是因为流式输出的原因么

React Agent没有实现“thought action final这些单独列表一个元素”这个逻辑。要拆分的话,可以用fncall_agent(但背后的prompt和react有点不一样),工具调用会被单独拆分到function_call的消息里。