QwenLM/Qwen2.5

Qwen2.5如何使用代理Agent根据不同的提问选择不同的Tool?

Closed this issue · 1 comments

使用QWen2.5进行Langchain Agent测试时,发现无法根据用户提出的问题选择不同的Tool,无论提示词怎么改,都无法调用到指定的Tool工具中,但使用模型“gpt-3.5-turbo-1106”却能够执行指定Tool,有什么方式解决?

from langchain import hub
from langchain.agents import create_openai_functions_agent, AgentExecutor
from langchain_openai import ChatOpenAI
from langchain_core.tools import Tool

# 定义查询订单状态的函数
def query_order_status(order_id):
    if order_id == "12345":
        return "订单 12345 的状态是:已发货,预计送达时间是 3-5 个工作日。"
    else:
        return f"未找到订单 {order_id} 的信息,请检查订单号是否正确。"
# 定义退款政策说明函数
def refund_policy(keyword):
    print("keyword = ", keyword)
    return "我们的退款政策是:在购买后30天内可以申请全额退款,需提供购买凭证。"
# 初始化工具
tools = [
         Tool(
             name="queryOrderStatus",
             func=query_order_status,
             description="根据订单ID查询订单状态"
         ),
         Tool(
             name="refundPolicy",
             func=refund_policy,
             description="查询退款政策内容"
         ),
]

# 获取使用的提示
prompt = hub.pull("hwchase17/openai-functions-agent")

# 选择将驱动代理的LLM
llm = ChatOpenAI(
    openai_api_key="key-xxx",
    openai_api_base="http://127.0.0.1:1234/v1",
    temperature=0.8
)

# 构建OpenAI函数代理
agent = create_openai_functions_agent(llm, tools, prompt)

# 通过传入代理和工具创建代理执行器
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# 定义一些测试询问
queries = [
    "请问订单12345的状态是什么?",
    "你们的退款政策是什么?"
]

# 运行代理并输出结果
for input in queries:
    response = agent_executor.invoke({"input": input})
    print(f"客户提问:{input}")
    print(f"代理回答:{response}\n")

Qwen2.5-7B或Qwen2.5-14B返回的响应如下:

Entering new AgentExecutor chain...
对不起,作为AI助手,我没有直接访问特定公司或平台的数据库权限。请您提供更多的信息给我,例如您是想查询哪个平台或者公司的订单状态呢?这样我才能更好地帮助你解决问题或者指导你应该怎么做。通常情况下,您可以登录相应的网站或应用来查看订单的状态和详情。

Finished chain.
客户提问:请问订单12345的状态是什么?
代理回答:{'input': '请问订单12345的状态是什么?', 'output': '对不起,作为AI助手,我没有直接访问特定公司或平台的数据库权限。请您提供更多的信息给我,例如您是想查询哪个平台或者公司的订单状态呢?这样我才能更好地帮助你解决问题或者指导你应该怎么做。通常情况下,您可以登录相应的网站或应用来查看订单的状态和详情。'}

Entering new AgentExecutor chain...
由于您没有具体说明是关于哪个产品或服务的退款政策,我无法提供具体的回答。请提供更多细节,例如您购买的产品或服务,这样我就可以更好地帮助您了解相关的退款政策了。如果您是在询问与我的平台或者某个特定商家相关的信息,请明确指出,以便我能给出准确的回答。

Finished chain.
客户提问:你们的退款政策是什么?
代理回答:{'input': '你们的退款政策是什么?', 'output': '由于您没有具体说明是关于哪个产品或服务的退款政策,我无法提供具体的回答。请提供更多细节,例如您购买的产品或服务,这样我就可以更好地帮助您了解相关的退款政策了。如果您是在询问与我的平台或者某个特定商家相关的信息,请明确指出,以便我能给出准确的回答。'}

create_openai_functions_agent属于openAI的专用,如果要使用需要自定义智能体。