本文内容出自九天老师公开课,具体讨论了最新开源哒QwQ-32B的多种部署方案,一站式详解QwQ+ollama、vLLM、llama.cpp、Open-WebUI全套部署方案。话不多说,我们直接开始!
一、QwQ-32B模子介绍
1. 模子简介(Introduction)
QwQ是Qwen系列的大模子之一,专注于推理能力(reasoning)。相比于传统的指令微调(instruction-tuned)模子,QwQ 具备思考与推理(thinking and reasoning)的能力,因此在各种下游使命(特别是复杂问题)上,能实现明显的性能提升。QwQ-32B是该系列的中等规模推理模子,其性能可媲美当前开始辈的推理模子,如DeepSeek-R1和o1-mini。
2. 强化学习训练效果
大规模强化学习(RL)有潜力超越传统的预训练和后训练方法来提升模子性能。近期的研究表明,强化学习可以明显进步模子的推理能力。例如,DeepSeek R1 通过整合冷启动数据和多阶段训练,实现了开始辈的性能,使其能够进行深度思考和复杂推理。这一次,QwQ探讨了大规模强化学习(RL)对大语言模子的智能的提升作用,这是一款拥有 320 亿参数的模子,其性能可与具备 6710 亿参数(此中 370 亿被激活)的 DeepSeek-R1 媲美。这一结果突显了将强化学习应用于颠末大规模预训练的强大底子模子的有效性。别的,QwQ还在推理模子中集成了与 Agent 相关的能力,使其能够在使用工具的同时进行批判性思考,并根据情况反馈调解推理过程。
QwQ在冷启动的底子上开展了大规模强化学习。在初始阶段,QwQ特别针对数学和编程使命进行了 RL 训练。与依赖传统的嘉奖模子(reward model)不同,QwQ通过校验生成答案的精确性来为数学问题提供反馈,并通过代码执行服务器评估生成的代码是否乐成通过测试用例来提供代码的反馈。随着训练轮次的推进,这两个领域中的性能均表现出持续的提升。在第一阶段的 RL 事后,增加了另一个针对通用能力的 RL。此阶段使用通用嘉奖模子和一些基于规则的验证器进行训练。最终发现,通过少量步骤的通用 RL,可以提升其他通用能力,同时在数学和编程使命上的性能没有明显下降。
QwQ相关资料:
- QWQ-32B魔搭社区:https://modelscope.cn/models/Qwen/QwQ-32B
- QWQ-32B技术博客:https://qwenlm.github.io/zh/blog/qwq-32b/
- QWQ-32B huggingface:https://huggingface.co/Qwen/QwQ-32B
- QWQ-32B-GGUF huggingface:https://huggingface.co/Qwen/QwQ-32B-GGUF
3. QwQ 32B模子根本参数
QwQ 32B模子,具有以下特性:
- 类型(Type):因果语言模子(Causal Language Model)
- 训练阶段(Training Stage):预训练(Pretraining)+ 后训练(Post-training),包括监视微调(Supervised Finetuning, SFT)和强化学习(Reinforcement Learning, RL)
- 架构(Architecture):
- 基于 Transformer
- RoPE 位置编码
- SwiGLU 激活函数
- RMSNorm 归一化
- Attention QKV 偏置
- 参数规模(Number of Parameters):
- 总参数目 :32.5B(325 亿)
- 非嵌入层参数目(Non-Embedding) :31.0B(310 亿)
- 网络层数(Number of Layers):64 层
- 注意力头(GQA 机制):
- 上下文长度(Context Length):完备支持 131,072 个 token
模子思考打印效果解释
- 确保模子的输出以 "<think>\n"开头,以避免生成 空的思考内容,否则大概会影响生成质量。
- 如果使用 apply_chat_template并 设置 add_generation_prompt=True,该机制会 自动添加 "<think>\n",但大概会导致最终回复 缺少 <think>标签。这种情况是 正常的。
4. 更多QwQ入门介绍与课件下载所在
- QwQ模子介绍与性能测试,与DeepSeek R1模子优劣势对比:https://www.bilibili.com/video/BV1zeRAYUEKg/
二、QWQ-32B全量模子下载与Transformers推理流程
1. QWQ-32B模子下载与情况搭建
- 【可选】创建虚拟情况
- conda create --name QWQ python=3.11conda initsource ~/.bashrcconda activate QWQ
复制代码
- 【可选,若创建虚拟情况,则必须要执行】创建Jupyter Kernel
- conda install jupyterlabconda install ipykernelpython -m ipykernel install --user --name QWQ --display-name "Python QWQ"
复制代码
- 安装魔搭社区
- 创建项目主目次
- cd /root/autodl-tmpmkdir QWQ-32B
复制代码
- 上传并安装依赖
项目依赖在网盘中:
上传完即可进行安装
- pip install -r requirements.txt
复制代码 - 下载项目权重
- modelscope download --model Qwen/QwQ-32B --local_dir ./QwQ-32B
复制代码
下载完成后QWQ-32B模子完备项目如下:
2. Jupyter中使用transformer原生库调用流程
然后即可使用transformer进行调用,具体调用步骤如下:
- 导入相关库
- from modelscope import AutoModelForCausalLM, AutoTokenizer
复制代码 - 设置模子下载所在
- 实例化预训练模子与分词器
- model = AutoModelForCausalLM.from_pretrained( model_name, torch_dtype="auto", device_map="auto", low_cpu_mem_usage=True)tokenizer = AutoTokenizer.from_pretrained(model_name)
复制代码 - 创建消息message
- prompt = "在单词"strawberry"中,总共有几个R?"messages = [ {"role": "user", "content": prompt}]
复制代码 - 词嵌入过程
- text = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True)model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
复制代码 - 创建并回复
- generated_ids = model.generate( **model_inputs, max_new_tokens=32768)generated_ids = [ output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)]response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]print(response)
复制代码 最终运行效果如下:
能够看出,此时模子回复效果中就包罗思维链的全部内容。实际使用过程中,可以通过正则化的方法将思维链内容和模子回复内容进行区分。,此时模子显存占用约61G。
三、QWQ-32B模子接入Ollama与推理流程
Open-WebUI原生支持使用Ollama调用当地模子进行推理,Ollama是一款大模子下载、管理、推理、优化集一体的强大工具,可以快速调用各类离线部署的大模子。Ollama官网:https://ollama.com/。
如今QWQ-32B模子已支持使用ollama进行调用,可以在模子主页查看调用情况:https://ollama.com/library/qwq
同样是运行Q4_K_M量化模子,模子巨细仅为20G不到,实际运行仅需23G显存即可。
1. ollama安装
- 【安装方案一】Ollama在线安装
在Linux体系中,可以使用如下命令快速安装Ollama
- curl -fsSL https://ollama.com/install.sh | sh
复制代码
但该下载流程会受限于国内网络情况,下载过程并不稳定。
- 【安装方案二】Ollama离线安装
因此,在更为一样寻常的情况下,保举使用Ollama离线部署。我们可以在Ollama Github主页查看如今Ollama支持的各操作体系安装包:https://github.com/ollama/ollama/releases
如果Ubuntu操作体系,选择此中ollama-linux-amd64.tgz下载和安装即可。
别的,安装包也可从网盘中下载:
下载完成后,需要先上传至服务器:
然后使用如下命令进行解压缩
- mkdir ./ollamatar -zxvf ollama-linux-amd64.tgz -C ./ollama
复制代码 解压缩后项目文件如图所示:
而在bin中,可以找到ollama命令的可执行文件。
此时,我们可以使用如下方式使用ollama:
此处若表现没有可执行权限,可以使用如下命令为当前脚本添加可执行权限:
而为了使用命令方便,我们也可以将脚本文件写入情况变量中。我们可以在主目次(root)下找到.bashrc文件:
然后在.bashrc文件末端写入ollama/bin文件路径:
- export PATH=$PATH:/root/autodl-tmp/ollama/bin
复制代码 保存并退出后,输入如下命令来使情况变量见效:
然后在恣意路径下输入如下命令,测试ollama情况变量是否见效
- 【可选】更换Ollama默认模子权重下载所在
接下来我们需要使用ollama来下载模子,但默认情况下,ollama会将模子下载到/root/.ollama文件夹中,会占用体系盘空间,因此,若有需要,可以按照如下方法更换模子权重下载所在。
别的无论是在线还是离线安装的ollama,都可以按照如下方法更换模子权重下载所在。还是需要打开/root/.bashrc文件,写入如下代码:
- export OLLAMA_MODELS=/root/autodl-tmp/models
复制代码
这里的路径需要改写为自己的文件所在
保存并退出后,输入如下命令来使情况变量见效:
测试情况变量是否见效
- 启动ollama
接下来即可启动ollama,为后续下载模子做准备:
注意,在整个应用使用期间,需要持续开启Ollama。
2. QWQ-32B GGUF格式模子权重下载
ollama模子权重下载可以使用ollama pull命令进行在线下载(没有网络门槛,且速度很快),当然也可以手动下载模子权重,然后上传到服务器上,再注册到Ollama中,就可以通过Ollama调用模子了。以下两种模子权重下载方法任选其一执行即可。
2.1 【方案一】在线下载模子权重
ollama中使用pull命令即可直接下载模子权重。
注,在使用pull命令下载模子前,需要先启动ollama。
使用该命令后体系就会自动下载模子权重,并自动完成注册。
等待模子下载完成后即可直接使用。
2.2 【方案二】离线下载模子权重
除了使用ollama pull命令外,ollama也支持调用手动下载的自定义模子,但需要是GGUF格式。如今QWQ-32B模子已有各种不同量化版本的GGUF模子在魔搭社区和huggingface中上线了:https://modelscope.cn/models/Qwen/QwQ-32B-GGUF
此中每个GGUF量化的权重都包罗多个版本:
此中ollama调用的就是Q4_K_M量化版本。这里我们还是考虑下载Q4_K_M量化版本的GGUF权重进行调用,具体执行流程如下。
- cd ~/autodl-tmpmkdir QwQ-32B-GGUFmodelscope download --model Qwen/QwQ-32B-GGUF qwq-32b-q4_k_m.gguf --local_dir ./QwQ-32B-GGUF
复制代码
下载后模子文件如图所示:
别的,也可以在课件网盘中进行下载:
然后需要创建一个file文件,用于进行ollama模子注册:
然后在File文件中写入自定义模子GGUF权重所在:
- FROM ./qwq-32b-q4_k_m.gguf
复制代码
然后将该模子参加Ollama当地模子列表:
- cd /root/autodl-tmp/QwQ-32B-GGUFollama create qwq-32b -f ModelFile
复制代码 使用ollama的任何命令,都要确保后台ollama处于开启状态
查看模子是否注册乐成
而且,如果此前修改过模子路径,则可以在新的ollama默认保存模子路径下看到新模子:
接下来即可在命令行中进行调用:
这里需要注意,尽管手动下载的GGUF格式模子权重是阿里官方发布的模子权重,但仍然会偶尔出现和ollama不兼容,导致胡言乱语的情况出现。如果希望使用ollama进行推理,优先发起使用ollama pull命令下载ollama官方的GGUF格式。
3. ollama API当地运行流程
在部署完ollama之后,即可借助ollama API(也就是OpenAI风格API)在代码情况中调用模子。
- 导入OpenAI库
- from openai import OpenAI
复制代码 - 实例化OpenAI客户端
- client = OpenAI( base_url='http://localhost:11434/v1/', api_key='ollama', # required but ignored)
复制代码 - 创建消息
- prompt = "在单词"strawberry"中,总共有几个R?"messages = [ {"role": "user", "content": prompt}]
复制代码 - 获得回复
- response = client.chat.completions.create( messages=messages, model='qwq-32b',)print(response.choices[0].message.content)
复制代码 最终运行效果如下:
而此时显存占用约22G左右:
四、QWQ-32B模子接入vLLM与推理流程
1.vLLM安装与启动
接下来继承介绍QWQ-32B模子借助vLLM进行推理的完备流程。相比ollama,vLLM更加得当企业级高并发应用场景,但对应的,显存占用也会更高,vLLM项目主页:https://github.com/vllm-project/vllm
如今vLLM已支持QWQ模子调用,可以在模子支持列表中查看模子关键字:https://docs.vllm.ai/en/latest/models/supported_models.html
接下来即可按照如下流程进行调用。
2.OpenAI风格API相应模式
需要注意的是,QWQ最高支持128K上下文长度,但随着模子上下文越长,所需要占用的显存也越大。根据测试,模子在32K上下文时,运行需要63G显存。
而当上下文增加到128K时,则需要将近150G显存:
因此,启动vLLM时候需要谨慎的设置最大上下文和对应的运行GPU数目。
- 32K上下文,单GPU运行命令
- cd /root/autodl-tmpvllm serve ./QwQ-32B --max-model-len 32768
复制代码 - 128K上下文,双GPU运行命令
- cd /root/autodl-tmpCUDA_VISIBLE_DEVICES=0,1 vllm serve ./QwQ-32B --tensor-parallel-size 2
复制代码 当前服务器为H800(80G)双卡主机。
启动后后端如图所示:
此时,即可在Jupyter中进行调用。
- 导入OpenAI库
- from openai import OpenAI
复制代码 - 实例化OpenAI客户端
- openai_api_key = "EMPTY"openai_api_base = "http://localhost:8000/v1"client = OpenAI( api_key=openai_api_key, base_url=openai_api_base,)
复制代码 - 创建消息
- prompt = "在单词"strawberry"中,总共有几个R?"messages = [ {"role": "user", "content": prompt}]
复制代码 - 获得回复
- response = client.chat.completions.create( model="./QwQ-32B", messages=messages,)print(response.choices[0].message.content)
复制代码 最终运行效果如下:
推理竣事后,后端如图所示:
五、基于llama.cpp的QwQ模子CPU推理
由于QwQ模子采取了和Qwen2.5系列模子完全相同的架构,因此,也是可以使用llama.cpp进行纯CPU推理大概CPU+GPU混合推理的。接下来介绍如何使用llama.cpp调用模子权重进行推理和对话。
1. llama.cpp下载与编译
- llama.cpp项目主页:https://github.com/ggml-org/llama.cpp
由于llama.cpp是个C语言项目,因此实际调用过程需要先构建项目,然后设置参数进行编译,然后最终创建可执行文件(类似于脚本),再运行当地大模子。借助llama.cpp可以实现纯CPU推理、纯GPU推理和CPU+GPU混合推理。
- 依赖下载
为了能够顺利的完成C语言项目标项目创建和代码编译,起首需要先辈行相关依赖的下载:
- apt-get updateapt-get install build-essential cmake curl libcurl4-openssl-dev -y
复制代码 这条命令安装了一些常用的构建和开发工具,具体的每个部分的含义如下:
- 编译器(如 GCC)
- make 工具
- 其他一些常见的构建工具,确保你的体系能进行编译。
- build-essential :安装一组构建必需的工具和库,包括:
- cmake :安装CMake工具,它是一个跨平台的构建体系,答应你管理项目标编译过程。
- curl :安装cURL工具,它是一个命令行工具,用于通过 URL 发送和吸收数据。它在很多开发场景中都很有效,尤其是与网络交互时。
- libcurl4-openssl-dev :安装libcurl库的开发版本。它是 cURL 的一个库文件,答应你在编程中通过 cURL 发送 HTTP 请求。libcurl4-openssl-dev是与OpenSSL配合使用的版本,提供了 SSL/TLS 加密支持,用于安全的 HTTP 请求。
- llama.cpp源码下载
如果AutoDL服务器,可以先开启学术加速:
- source /etc/network_turbo
复制代码 然后再进行下载:
- git clone https://github.com/ggerganov/llama.cpp
复制代码 也可以直接在课件网盘中找到代码文件,直接上传服务器并解压缩:
准备好后,即可在服务器中看到llama.cpp项目文件夹:
- 项目构建与编译
接下来需要使用cmake来构建项目文件:
- cmake llama.cpp -B llama.cpp/build \ -DBUILD_SHARED_LIBS=OFF -DGGML_CUDA=ON -DLLAMA_CURL=ON
复制代码
然后需要进一步进行编译:
- cmake --build llama.cpp/build --config Release -j --clean-first --target llama-quantize llama-cli llama-gguf-split
复制代码
- llama-quantize :大概是与模子量化相关的目标。量化(quantization)是将模子的精度从浮点数低落到整数,从而淘汰内存占用和进步推理速度。
- llama-cli :大概是一个命令行工具,用于运行模子或与用户交互。
- llama-gguf-split :大概是一个用于拆分模子文件的目标,通常用于将一个大模子文件拆分成多个小文件,方便存储和加载。
- 如果你之前运行过构建而且有问题,大概希望重新构建而不使用任何缓存文件,这个选项非常有效。
- 如果没有指定数字,CMake 会使用默认的并行级别,通常是可用的全部 CPU 核心。你也可以指定并行的作业数,例如-j 8表示使用 8 个并行作业进行编译。
- Release 设置通常意味着启用更多的优化,生成的程序运行速度较快,得当发布。
- 在 CMake 中,通常有两种常见的构建设置:
- Debug :用于调试版本,包罗调试信息且没有做过多优化。
- Release :优化后的发布版本,去除调试信息,运行时性能更高。
- --build llama.cpp/build :告诉 CMake 使用llama.cpp/build目次中的构建文件来执行构建过程。这个目次是在之前运行cmake llama.cpp -B llama.cpp/build命令时生成的,包罗了全部构建所需的文件(例如 Makefile 或 Ninja 构建文件)。
- --config Release :指定构建的设置为Release设置。
- -j :表示并行构建,答应 CMake 使用多个 CPU 核心来加速构建过程。
- --clean-first :表示在构建之前先清理掉之前的构建效果。这可以确保每次构建时都是从一个干净的状态开始,避免由于缓存或中心文件引起的编译错误。
- --target :指定构建的目标(target)。通常,一个项目会定义多个目标(好比库、可执行文件等),通过这个参数可以告诉 CMake 只编译特定的目标。
- 禁用共享库 (-DBUILD_SHARED_LIBS=OFF),生成静态库。
- 启用 CUDA 支持 (-DGGML_CUDA=ON),以便在有 GPU 的情况下使用 GPU 加速。
- 启用 CURL 库支持 (-DLLAMA_CURL=ON),以便支持网络请求。
- cmake:运行 CMake 工具,用于设置和生成构建文件。
- llama.cpp:指定项目标源代码所在的目次。在这个例子中,llama.cpp是项目标根目次。
- -B llama.cpp/build:指定生成构建文件的目次。-B参数表示构建目次,llama.cpp/build是生成的构建目次。这是 CMake 将生成的文件存放的地方(例如 Makefile 或 Ninja 构建文件)。
- 同时还指定了一些编译选项:
- 复制可执行文件
- cp llama.cpp/build/bin/llama-* llama.cpp
复制代码 将全部生成的可执行文件从构建目次llama.cpp/build/bin/复制到项目标根目次llama.cpp下。这样可以更方便地在项目根目次下执行这些可执行文件,而无需每次都进入构建目次。
在准备完成后,接下来即可进行调用和推理测试了。
2.借助llama.cpp运行QwQ模子
起首是纯CPU推理测试。此时体系只调用内存+CPU进行盘算,此时不会用到GPU,在调用Q4_K_M模子时,实际内存占用为18G。
此时模子运行门槛很低,但运行速度非常慢,只有不到1tokens/s。具体推理代码实现流程如下:
- cd ./llama.cpp./llama-cli \ --model /root/autodl-tmp/QwQ-32B-GGUF/qwq-32b-q4_k_m.gguf \ --cache-type-k q4_0 \ --threads 64 \ --prio 2 \ --temp 0.6 \ --ctx-size 512 \ --seed 3407 \ --n-gpu-layers 0 \ -no-cnv \ --prompt "<|User|>你好,好久不见,请介绍下你自己。<|Assistant|>"
复制代码 此中命令行核心参数说明:
- --threads :CPU 核心数;
- --ctx-size :输出的上下文长度;
- --n-gpu-layers :需要卸载到 GPU 的层数,设置为0时代表完全使用CPU进行推理;
- --temp :模子温度参数;
- -no-cnv :不进行多轮对话;
- --cache-type-k :K 缓存量化为 4bit;
- --seed :随机数种子;
实际运行效果如下所示:
接下来进一步尝试CPU+GPU混合推理,我们只需要公道的设置--n-gpu-layers参数,即可灵活的将模子的部分层加载到GPU上进行运行。而且无需手动设置,llama.cpp会自动辨认当前GPU数目以及可以分配的显存,自动将模子权重加载到各个不同的GPU上。例如,我们这里考虑将30层加载到GPU上,运行效果如下所示:
- ./llama-cli \ --model /root/autodl-tmp/QwQ-32B-GGUF/qwq-32b-q4_k_m.gguf \ --cache-type-k q4_0 \ --threads 64 \ --prio 2 \ --temp 0.6 \ --ctx-size 512 \ --seed 3407 \ --n-gpu-layers 30 \ -no-cnv \ --prompt "<|User|>你好,好久不见,请介绍下你自己。<|Assistant|>"
复制代码 此时显存占用不到10G:
推理速度略微有所提升,能达到接近2tokens/s
末了,我们更进一步,尝试把全部的模子权重都放在GPU上进行推理。
- ./llama-cli \ --model /root/autodl-tmp/QwQ-32B-GGUF/qwq-32b-q4_k_m.gguf \ --cache-type-k q4_0 \ --threads 64 \ --prio 2 \ --temp 0.6 \ --ctx-size 512 \ --seed 3407 \ --n-gpu-layers 64 \ -no-cnv \ --prompt "<|User|>你好,好久不见,请介绍下你自己。<|Assistant|>"
复制代码 此时GPU占用约18G:
推理速度则能达到14tokens/s。
六、QWQ-32B接入Open-WebUI流程
1.Open-WebUI部署流程
起首需要安装Open-WebUI,官网所在如下:https://github.com/open-webui/open-webui。
我们可以直接使用pip命令快速完成安装:
可以直接使用在GitHub项目主页上直接下载完备代码包,并上传至服务器解压缩运行:
别的,也可以在课件网盘中领取完备代码包,并上传至服务器解压缩运行:
在确保ollama正常运行的情况下,进行后续操作。
2. Open-WebUI启动与对话流程
在准备好了Open-WebUI和一系列模子权重后,接下来我们尝试启动Open-WebUI,并借助当地模子进行问答。
起首需要设置离线情况,避免Open-WebUI启动时自动进行模子下载:
然后启动Open-WebUI
需要注意的是,如果启动的时候仍然报错表现无法下载模子,是Open-WebUI试图从huggingface上下载embedding模子,之后我们会手动将其切换为当地运行的Embedding模子。
然后在当地欣赏器输入所在:8080端口即可访问:
若使用AutoDL,则需要使用SSH隧道工具进行所在代理
更多AutoDL相关操作详见公开课:《AutoDL快速入门与GPU租赁使用指南》|https://www.bilibili.com/video/BV1bxB7YYEST/
然后初次使用前,需要创建管理员账号:
然后点击登录即可。需要注意的是,此时Open-WebUI会自动检测后台是否启动了ollama服务,并列举当前可用的模子。稍等半晌,即可进入到如下页面:
接下来即可进入到对话页面:
对话效果如下所示:
3. 当地知识库检索
4. 代码解释器
5. 调用外部工具
需要注意的是,DeepSeek R1模子原生并不支持Fucntion calling,但借助Ollama,可以实现底子的Function calling,并基于此完成Open-WebUI的外部工具调用工作。

https://ollama.com/blog/tool-support

然后编写天气查询函数:
- import requestsimport jsonfrom fastapi import Requestfrom open_webui.models.users import UsersclassTools:def__init__(self):passasyncdefget_weather( self, loc: str, __request__: Request, __user__: dict, __event_emitter__=None ) -> str:""" 获取指定城市的即时天气信息。 :param loc: 城市名称(如果是非英文城市名称,请先将其翻译为英文城市名称再输入)。 :param __request__: HTTP 请求对象(来自 FastAPI)。 :param __user__: 用户信息(可以用于个性化或记录请求)。 :param __event_emitter__: 事件发射器,用于将实时状态更新发送到前端。 :return: 格式化后的天气数据,作为字符串返回。 说明: 如果输入的是非英文城市名称,请先将其翻译为对应的英文城市名称再输入。 比如,输入“中国,北京”,需要转为 "Beijing"。 """# Step 1. 通知用户正在获取天气数据await __event_emitter__( {"type": "status","data": {"description": f"正在获取 {loc} 的天气数据...", "done": False}, } )try:# Step 2. 构建请求的 URL 和查询参数 url = "https://api.openweathermap.org/data/2.5/weather" params = {"q": loc,"appid": "YOUR_API_KEY", # 你的 API 密钥"units": "metric", # 使用摄氏度"lang": "zh_cn", # 输出简体中文 }# Step 3. 向 OpenWeather API 发送 GET 请求 response = requests.get(url, params=params)# Step 4. 解析响应数据 data = response.json()# Step 5. 提取并格式化天气描述 weather_data = data.get("weather", [])if weather_data: main_weather = weather_data[0].get("main", "") description = weather_data[0].get("description", "") weather_info = f"当前天气:{main_weather} - {description}"else: weather_info = "天气信息不可用。"# Step 6. 通知用户天气数据已经成功获取await __event_emitter__( {"type": "status","data": {"description": f"成功获取 {loc} 的天气数据", "done": True}, } )# Step 7. 返回格式化后的天气信息并发送到前端await __event_emitter__( {"type": "message","data": {"content": f"{loc} 的天气信息: {weather_info}"}, } )# 返回格式化后的天气数据作为字符串returnf"{loc} 的天气信息: {weather_info}"except Exception as e:# Step 8. 如果发生错误,通知用户await __event_emitter__( {"type": "status","data": {"description": f"发生错误: {str(e)}", "done": True}, } )# 返回错误信息returnf"获取天气数据时发生错误:{str(e)}"
复制代码 并将函数进行写入:

完成后即可看到新的工具:

在对话时可以开启天气查询函数:


至此,我们就具体介绍了QwQ模子的各类当地部署与调用方法。
为每个人提供最有价值的技术赋能!【公益】大模子技术社区已经上线!
九天&菜菜&菊安酱&木羽老师,30+套原创体系教程,涵盖国内外主流「开&闭源大模子」调用与部署,RAG、Agent、微调实战案例…全部内容免费公开,还将定期追更最新大模子技术进展~
|