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

function calling 如何控制在执行function前先询问用户是否可以执行 #305

Open Miguitian opened 1 month ago

Miguitian commented 1 month ago

function calling 过程中,我想要在某些function执行前先询问用户是否可以执行,如果可以执行在进行执行。目前qwen-agent是否能实现这样的效果。我尝试更改提示词,但是并没有效果。他总是已经执行完毕了,才问你是否可以执行

JianxinMa commented 1 month ago

这种一般建议用工程手段实现,需要理解、并修改这个while循环的逻辑: https://github.com/QwenLM/Qwen-Agent/blob/main/qwen_agent/agents/fncall_agent.py#L66

liyunhan commented 1 month ago

@Miguitian 我尝试在ReAct的Prompt里加了Notice! If parameter for 'Action Input' is missing, you must ask user in 'Final Answer' and stop doing anything else. 在缺失参数的情况下qwen2-72b-chat-gptq-int4能做到停止Func call

Miguitian commented 1 month ago

@liyunhan ReAct 在那里啊

liyunhan commented 1 month ago

@Miguitian qwen-agent提供了ReActChat呀,15~33行修改Prompt

Miguitian commented 1 month ago

这种一般建议用工程手段实现,需要理解、并修改这个while循环的逻辑: https://github.com/QwenLM/Qwen-Agent/blob/main/qwen_agent/agents/fncall_agent.py#L66

@JianxinMa 我理解了fncall_agent和ReActChat里的执行过程,只要返回的是function_call就会直接不断的去运行。并没有一个很好的判断依据和中断方式,可以打断工程的代码,并且让模型去询问用户是否可以执行该命令。 后来我写了一个tool,tool的功能就是检测判断是否需要得到用户的许可。当在fncall_agent中检测到function_call时,并且function_call 的tool_name 为我写的这个tool时,就进行中断循环。当用户输入同意后,才能继续执行。勉强可以达到想要的效果。但是这样做的后果就是大模型输出的文本并不是直接询问的是否可以执行的文本。而且整体流程感觉很怪异。 想请教一下有没有更好的办法