QwenLM / Qwen2.5

Qwen2.5 is the large language model series developed by Qwen team, Alibaba Cloud.
9.23k stars 571 forks source link

请问是否支持langchain里的create_openai_tools_agent或者create_openai_functions_agent? #15

Closed cgq0816 closed 4 months ago

cgq0816 commented 8 months ago

用qwen1.5-14b-chat进行测试,发现用langchain的这两个agent,均不能调用工具,所以请问一下qwen1.5支持langchain的这两个agent吗?如果支持,该如何使用呢

JianxinMa commented 8 months ago

请问方便发一下您测试langchain用的脚本吗?我们看下。以及是用vllm还是什么框架起的服务?

cgq0816 commented 8 months ago

请问方便发一下您测试langchain用的脚本吗?我们看下。以及是用vllm还是什么框架起的服务?

1、用的langchain官网的调用示例 https://api.python.langchain.com/en/latest/agents/langchain.agents.openai_tools.base.create_openai_tools_agent.html#

https://api.python.langchain.com/en/latest/agents/langchain.agents.openai_functions_agent.base.create_openai_functions_agent.html/ 2、Qwen1.5-14B-Chat 用的是together.ai里的 model = "Qwen/Qwen1.5-14B-Chat" llm = ChatOpenAI(model_name=model, openai_api_base=COMMON_CONFIG.get("together_api_base"), openai_api_key=COMMON_CONFIG.get("together_api_key"), max_tokens=max_tokens, temperature=temperature, top_p=1.0, max_retries=max_retries, request_timeout=request_timeout, )

cgq0816 commented 8 months ago

请问方便发一下您测试langchain用的脚本吗?我们看下。以及是用vllm还是什么框架起的服务?

1、用的langchain官网的调用示例 https://api.python.langchain.com/en/latest/agents/langchain.agents.openai_tools.base.create_openai_tools_agent.html#

https://api.python.langchain.com/en/latest/agents/langchain.agents.openai_functions_agent.base.create_openai_functions_agent.html/ 2、Qwen1.5-14B-Chat 用的是together.ai里的 model = "Qwen/Qwen1.5-14B-Chat" llm = ChatOpenAI(model_name=model, openai_api_base=COMMON_CONFIG.get("together_api_base"), openai_api_key=COMMON_CONFIG.get("together_api_key"), max_tokens=max_tokens, temperature=temperature, top_p=1.0, max_retries=max_retries, request_timeout=request_timeout, )

使用langchain中的ChatTongyi方法也没有调用function call from langchain_community.chat_models.tongyi import ChatTongyi image

langchain版本 langchain 0.1.0 langchain-community 0.0.10 langchain-core 0.1.19

JianxinMa commented 8 months ago

您好,经过排查,是工程接口问题,和模型无关。

详情如下:

解决方案一:

解决方案二:

JianxinMa commented 8 months ago

另外,我在打印中间环节的时候,发现调用 ChatTongyi 时有细节需要注意:

model = ChatTongyi(
    model="qwen1.5-72b-chat",  # 注意是model,不是model_name
)

而不是如您截图的

model = ChatTongyi(
    model_name="qwen1.5-72b-chat",  # 错误!实际没生效,会错误调用成 qwen-turbo
)
cgq0816 commented 8 months ago

另外,我在打印中间环节的时候,发现调用 ChatTongyi 时有细节需要注意:

model = ChatTongyi(
    model="qwen1.5-72b-chat",  # 注意是model,不是model_name
)

而不是如您截图的

model = ChatTongyi(
    model_name="qwen1.5-72b-chat",  # 错误!实际没生效,会错误调用成 qwen-turbo
)

你好,有一个问题想请教一下,使用openai的时候提示以下问题,该如何解决呢 openai.error.InvalidRequestError: Qwen/Qwen1.5-14B-Chat doesn't support constraints

JianxinMa commented 8 months ago

你好,有一个问题想请教一下,使用openai的时候提示以下问题,该如何解决呢 openai.error.InvalidRequestError: Qwen/Qwen1.5-14B-Chat doesn't support constraints

这个报错就是因为langchain的这个agent实现使用了function calling、但是together ai等服务提供商并没有为qwen提供function calling功能。

可以参见我前面回复提到的解决方案一、解决方案二。

Dancing-Github commented 8 months ago

你好,问个关于function call的问题,之前版本发布的函数调用还支持在Qwen 1.5使用吗 https://github.com/QwenLM/Qwen/blob/main/examples/function_call_examples.py

JianxinMa commented 8 months ago

你好,问个关于function call的问题,之前版本发布的函数调用还支持在Qwen 1.5使用吗 https://github.com/QwenLM/Qwen/blob/main/examples/function_call_examples.py

zh2024 commented 7 months ago

您好,经过排查,是工程接口问题,和模型无关。

详情如下:

  • 按您的方式创建后,我打印了 langchain 调用的中间环节,发现 langchain 是在使用 function_calling (tool calling) 接口,但是当前 together 和 dashscope 应该都还没有开放 function calling 功能,因此实际没有生效。

解决方案一:

解决方案二:

  • 您也许可以尝试 langchain 的其他不依赖 function calling 的 agent 实现,比如 ReAct。但我们对 langchain 并不熟悉,因此无法给出更具体的建议。

我使用了Xinference框架进行推理服务,这个框架是支持qwen1.5 的function calling的,但是在langchain中调用create_openai_tools_agentcreate_openai_functions_agent仍然失败:

其中:

  1. create_openai_tools_agent报错:BadRequestError: Error code: 400 - {'detail': 'Tool calls does not support stream'}【这个问题是Xinference的当前不支持stream导致的】
  2. 而create_openai_functions_agent不会匹配到预定义的tools列表,只是直接使用大模型本身的回答

如果”使用 langchain 的其他不依赖 function calling 的 agent 实现,比如 ReAct“,则会出现 ”Observ“ #197 问题

【注:Xinference服务】:

XINFERENCE_MODEL_SRC=modelscope xinference-local --host 0.0.0.0 --port 9997
xinference launch --model-name qwen1.5-chat --size-in-billions 7 --model-format gptq --quantization Int4 --gpu_memory_utilization 0.7
samosun commented 6 months ago

@JianxinMa 您好,想问下dashscope 的function call实现已经上线了吗? 会与 Qwen-Agent 项目封装的 function calling 接口 有什么区别?

JianxinMa commented 6 months ago

@JianxinMa 您好,想问下dashscope 的function call实现已经上线了吗? 会与 Qwen-Agent 项目封装的 function calling 接口 有什么区别?

上了,和qwen-agent的区别不大。dashscope用的tool_calls的格式(如果用langchain注意看是不是用的tool_calls而不是function_call): https://help.aliyun.com/zh/dashscope/developer-reference/api-details?disableWebsiteRedirect=true#86ef4d304bwsb

Zhuytt20 commented 2 weeks ago

query = "计算 3 + 12? 以及 11 * 49?"

print(llm_with_tools.invoke(query).tool_calls)from langchain_core.output_parsers import PydanticToolsParser from pydantic import BaseModel, Fieldclass add(BaseModel): """Add two integers."""

a: int = Field(..., description="First integer")
b: int = Field(..., description="Second integer")class multiply(BaseModel):
"""Multiply two integers."""

a: int = Field(..., description="First integer")
b: int = Field(..., description="Second integer")chain = llm_with_tools | PydanticToolsParser(tools=【add, multiply】)

print(chain.invoke(query))

【{'name': 'add', 'args': {'a': 3, 'b': 12}, 'id': 'call_2fba6e0cbda543ba977d18', 'type': 'tool_call'}】 【add(a=3, b=12)】 为什么只能调用一个呢