qwen vllm function_call

以下是基于给定内容编写的关于使用vLLM部署Qwen模型并实现工具调用的教程。


教程:使用vLLM部署Qwen模型并实现工具调用

前言

vLLM 是一个高效、易于使用的大型语言模型推理和部署库。自vLLM v0.6.0版本起,它支持工具调用(Tools Calling),允许模型在适当情况下自动解析和调用工具。本文将通过使用Qwen2.5模型的示例,介绍如何利用vLLM实现工具调用,并使用OpenAI兼容API与客户端交互。

环境准备

  • Python: 3.8及以上
  • vLLM版本: v0.6.1.post2
  • CUDA: 如果使用GPU,请确保CUDA版本兼容
  • 依赖库:
    pip install torch transformers vllm openai
    

步骤 1: 启动OpenAI兼容API服务

首先启动vLLM OpenAI兼容API,以便我们可以通过OpenAI客户端库与Qwen2.5模型交互。运行以下命令启动服务:

vllm serve Qwen/Qwen2.5-7B-Instruct --enable-auto-tool-choice --tool-call-parser hermes

这里,我们启用了自动工具选择并使用Hermes风格的工具调用解析器。此API服务会在本地的localhost:8000/v1端口运行。

步骤 2: 初始化API客户端

接下来,使用OpenAI Python库初始化API客户端。请设置API base URL为本地API服务地址。

from openai import OpenAI

openai_api_key = "EMPTY"
openai_api_base = "http://localhost:8000/v1"

client = OpenAI(
    api_key=openai_api_key,
    base_url=openai_api_base,
)

步骤 3: 准备消息与工具配置

在生成响应时,模型需要接收到用户消息及工具调用信息。定义需要的工具(例如获取当前温度或未来日期的温度)。

tools = [
    {
        "name": "get_current_temperature",
        "description": "获取指定位置的当前温度",
        "parameters": {
            "type": "object",
            "properties": {
                "location": {"type": "string", "description": "地点,例如'San Francisco, CA, USA'"},
            },
            "required": ["location"]
        }
    },
    {
        "name": "get_temperature_date",
        "description": "获取指定位置的未来日期的温度",
        "parameters": {
            "type": "object",
            "properties": {
                "location": {"type": "string", "description": "地点"},
                "date": {"type": "string", "description": "日期,例如'2024-10-01'"},
            },
            "required": ["location", "date"]
        }
    }
]

messages = [
    {"role": "system", "content": "You are Qwen, a helpful assistant."},
    {"role": "user", "content": "What's the temperature in San Francisco now? How about tomorrow?"}
]

步骤 4: 生成工具调用响应

使用client.chat.completions.create()方法向模型发送消息,并根据设置的工具生成响应。

response = client.chat.completions.create(
    model="Qwen/Qwen2.5-7B-Instruct",
    messages=messages,
    tools=tools,
    temperature=0.7,
    top_p=0.8,
    max_tokens=512,
    extra_body={
        "repetition_penalty": 1.05,
    },
)

模型会在response.choices[0]中返回一个包含工具调用的字段,如下所示:

{
  "tool_calls": [
    {
      "id": "tool-924d705adb044ff88e0ef3afdd155f15",
      "function": {"name": "get_current_temperature", "arguments": "{\"location\": \"San Francisco, CA, USA\"}"}
    },
    {
      "id": "tool-7e30313081944b11b6e5ebfd02e8e501",
      "function": {"name": "get_temperature_date", "arguments": "{\"location\": \"San Francisco, CA, USA\", \"date\": \"2024-10-01\"}"}
    }
  ]
}

步骤 5: 解析工具调用并获取结果

从工具调用中提取function信息,并根据每个工具的参数调用相应的实际功能。

import json

if tool_calls := response.choices[0].message.get("tool_calls", None):
    for tool_call in tool_calls:
        fn_name = tool_call["function"]["name"]
        fn_args = json.loads(tool_call["function"]["arguments"])
        
        # 假设有函数库 get_function_by_name
        fn_result = json.dumps(get_function_by_name(fn_name)(**fn_args))
        
        messages.append({
            "role": "tool",
            "content": fn_result,
            "tool_call_id": tool_call["id"]
        })

步骤 6: 获取最终回复

将工具调用的结果反馈给模型,生成最终的用户回复。

response = client.chat.completions.create(
    model="Qwen/Qwen2.5-7B-Instruct",
    messages=messages,
    tools=tools,
    temperature=0.7,
    top_p=0.8,
    max_tokens=512,
    extra_body={
        "repetition_penalty": 1.05,
    },
)
print(response.choices[0].message['content'])

模型应返回类似以下内容:

“当前San Francisco的温度约为26.1°C。明天的预测温度约为25.9°C。”

总结

本教程涵盖了使用vLLM API实现Qwen模型的工具调用功能。通过OpenAI兼容API和Hermes风格工具解析,您可以轻松实现Qwen模型在实际场景中的功能扩展和自动工具调用。

### LangChain4j 中 QwenvLLM 集成概述 LangChain 是一种用于构建基于大型语言模型的应用程序的框架,支持多种不同的大模型和工具链[^1]。对于 Java 生态中的开发者来说,LangChain4j 提供了一种方式来集成先进的语言模型如 Qwen 及高效的推理引擎如 vLLM。 #### 使用 Qwen 模型 Qwen 属于阿里云推出的大规模预训练模型系列,在自然语言理解和生成方面表现出色。为了在 LangChain4j 应用中使用 Qwen: - **引入依赖**:首先需确保项目已添加必要的 Maven 或 Gradle 依赖项以访问 Qwen SDK。 - **配置客户端**:创建并初始化 Qwen 客户端实例,设置好认证信息以便能够顺利调用远程API服务。 ```java // 创建 QwenClient 实例 QwenClient qwenClient = new DefaultQwenClient("<your-access-key-id>", "<your-secret>"); ``` #### 整合 vLLM 推理库 vLLM 能够加速 LLM 的部署过程,并简化其作为微服务运行的操作[^2]。当考虑将其与 LangChain4j 结合时, - **安装 vLLM**:按照官方文档指导完成 Python 环境下的安装工作。 - **启动 HTTP Server**:利用 vLLM 内置命令行工具开启 RESTful API 服务器,监听来自外部请求的数据流。 ```bash # 启动 vLLM server (假设已经设置了环境变量 VLLM_MODEL_PATH) vllm serve --model-path $VLLM_MODEL_PATH --port 8080 ``` #### 构建交互逻辑 借助上述组件之后,下一步就是定义应用程序内部的具体业务流程了。这通常涉及到接收用户输入、解析意图以及最终返回恰当的回答给前端展示层。 ```java public String processUserQuery(String userInput) { // 将用户的查询转发至 Qwen 进行情感分析或其他 NLP 处理... Map<String, Object> payload = new HashMap<>(); payload.put("prompt", userInput); HttpResponse response = qwenClient.post("/api/v1/inference", payload).execute(); JSONObject jsonResponse = JSON.parseObject(response.body().string()); String processedText = jsonResponse.getString("result"); // 如果有必要的话还可以进一步传递给 vLLM 来获取更加复杂的回复内容 return processedText; } ``` 通过这种方式,不仅实现了对本地化资源的有效管理和调度,同时也充分利用到了云端的强大计算能力,为用户提供高质量的服务体验[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值