[OpenAI-Agent-SDK] 离线接入本地vllm部署的QWQ-32B

最近刚开始openai-agents-sdk的使用,发现在流程设计,agent 配置以及调用方面确实做到了极为精简,格式化输入与输出也非常方便控制,虽然OpenAI-agents-sdk原生支持openai自家提供的模型,不过在这“群模林立”的形势下,OpenAI-agents-sdk也良心地支持外部模型的接入和使用。

官方文档: https://openai.github.io/openai-agents-python/

比如接入本地部署的QwQ-32B,需要导入 AsyncOpenAI,OpenAIChatCompletionsModel, 与使用OpenAI 客户端类似,配置本地部署的QwQ-32B模型如下:

external_client = AsyncOpenAI(api_key='empty',base_url='http://192.168.xxx.xxx:pppp/v1/')

external_model = OpenAIChatCompletionsModel(model='QwQ-32B-AWQ', openai_client=external_client)

需要说明的是,

1)vllm部署模型信息可通过http://192.168.xxx.xxx:pppp/v1/models 来查询;其中返回的模型id为 'QwQ-32B-AWQ',即是OpenAIChatCompletionsModel中model传入的名称。

2)使用本地模型,则需要将tracing 关掉,即: set_tracing_disabled(disabled=True) 

3)使用 `function_tool` 装饰器来自定义工具。

一个天气查询助手的完整代码如下,

import asyncio
from agents import Agent, Runner, AsyncOpenAI
from agents import OpenAIChatCompletionsModel, ModelSettings, set_tracing_disabled, function_tool


set_tracing_disabled(disabled=True)


@function_tool
async def fetch_weather(city: str) -> str:
    """Fetch the weather for a given city.

    Args:
        city: The city to fetch the weather for.
    """
    
    # In real life, we'd fetch the weather from a weather API
    print('[debug]: agent is calling this tool.')
    return "sunny"


external_client = AsyncOpenAI(api_key='empty',base_url='http://192.168.xxx.xxx:pppp/v1/')
external_model = OpenAIChatCompletionsModel(model='QwQ-32B-AWQ', openai_client=external_client)


agent = Agent(name="weather assistant",
            model=external_model,
            model_settings=ModelSettings(temperature=0.1),
            instructions="你是天气信息助手,必要时可调用工具`fetch_weather`来查询城市的天气。",
            tools=[fetch_weather])


async def ask_agent(question):
    result = await Runner.run(agent, question)
    return result.final_output


async def main():
    try:
        queries = ['北京天气怎么样啊?','上海天气如何?']
        
        tasks = [ask_agent(q) for q in queries]
        
        results = await asyncio.gather(*tasks)
        for q, item in zip(queries, results):
            print(q)
            print(item)
            print('*'*20)
            
    except Exception as e:
        print(f"Error occurred: {e}")


if __name__ == "__main__":
    asyncio.run(main())

 谢谢大家!

<think>嗯,用户想了解如何部署qwq-32b模型VLLM平台上。首先,我需要回忆一下VLLM的基本知识。VLLM是一个高效推理和部署框架,支持大规模语言模型,特别是优化了自回归模型的推理速度。那部署模型的一般步骤是什么呢?通常需要安装环境、下载模型、配置参数、启动服务。 接下来,用户提到的qwq-32b模型,我需要确认是否有相关的引用信息。查看用户提供的引用内容,引用[1]提到了模型下载的路径,引用[2]和[3]则涉及部署中的注意事项,比如量化版本和tokenizer的问题。特别是引用[3]提到需要修改tokenizer_config.json文件来解决输出问题,这可能是一个关键步骤。 首先,安装VLLM。用户可能需要安装最新版本,使用pip命令。然后,下载模型,根据引用[1]的路径,使用modelscope或者git lfs下载。需要注意模型文件的大小,引用[2]提到量化版本可能更适合消费级显卡,比如4bit的20G版本,这可能影响用户的选择。 然后配置环境,可能需要设置CUDA环境变量。启动服务时,使用vllm的命令行工具,指定模型路径、tensor并行数等参数。如果遇到不输出<think>的问题,引用[3]的解决方法是修改tokenizer配置文件,删除相关token,这需要用户找到对应的json文件进行调整。 还需要考虑硬件要求,比如GPU显存是否足够。如果用户使用消费级显卡,可能需要量化模型,如引用[2]提到的。此外,部署后如何测试服务,比如使用curl或Python客户端发送请求,验证是否正常工作。 可能用户遇到的问题包括模型路径错误、显存不足、tokenizer配置问题等,需要逐一排查。总结步骤应该是:安装依赖→下载模型→调整配置→启动服务→验证测试。同时,提醒用户注意量化版本的选择和可能的配置调整,确保部署顺利。</think>### 分步教程:使用vLLM部署QwQ-32B模型 #### 一、环境准备 1. 安装CUDA驱动 确保显卡驱动支持CUDA 11.8+,通过命令验证: ```bash nvidia-smi ``` 2. 创建虚拟环境(推荐) ```bash conda create -n vllm python=3.9 conda activate vllm ``` #### 二、模型下载 1. 通过ModelScope获取完整模型(需约60GB显存): ```bash pip install modelscope python -c "from modelscope.hub.snapshot_download import snapshot_download; snapshot_download('Qwen/QwQ-32B', cache_dir='./QwQ-32B')" [^1] ``` 2. (可选)下载4bit量化版本(约20GB): ```bash ollama pull QwQ-32B:4bit ``` #### 三、vLLM安装与配置 1. 安装最新版vLLM: ```bash pip install vllm ``` 2. 修改tokenizer配置(解决不输出<think>问题): ```bash vim ./QwQ-32B/tokenizer_config.json # 删除"<think>"相关配置项[^3] ``` #### 四、启动推理服务 1. 基础启动命令(需A100 80G*2): ```bash python -m vllm.entrypoints.openai.api_server \ --model ./QwQ-32B \ --tensor-parallel-size 2 \ --gpu-memory-utilization 0.95 ``` 2. 消费级显卡启动(如RTX 3090 24G*2): ```bash python -m vllm.entrypoints.openai.api_server \ --model QwQ-32B:4bit \ --quantization awq \ --dtype half \ --tensor-parallel-size 2 ``` #### 五、服务验证 1. Python客户端测试: ```python from openai import OpenAI client = OpenAI(base_url="http://localhost:8000/v1") response = client.chat.completions.create( model="QwQ-32B", messages=[{"role": "user", "content": "解释量子纠缠"}] ) print(response.choices[0].message.content) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenxin0215

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值