news 2026/9/3 3:41:23

开源模型应用:Qwen2.5-7B实现天气查询工具调用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
开源模型应用:Qwen2.5-7B实现天气查询工具调用

开源模型应用落地:Qwen2.5-7B实现天气查询工具调用

一、前言

在大语言模型(LLM)的实际应用中,仅依赖模型内部知识已难以满足对实时性、准确性与动态数据获取的需求。例如,用户询问“今天北京的天气如何?”时,模型无法通过训练数据得知当前真实气象状况。为解决这一问题,工具调用(Tool Calling)机制应运而生。

本文将基于阿里云开源的大语言模型Qwen2.5-7B-Instruct,结合高性能推理框架vLLM,构建一个支持外部工具调用的本地化推理服务,并实现一个真实的天气信息查询功能。整个过程涵盖环境搭建、模型加载、工具定义、结构化输出解析及多轮对话处理,帮助开发者掌握从零构建具备外部能力扩展性的AI应用的核心方法。


二、核心技术栈解析

2.1 Qwen2.5-7B 模型特性

Qwen2.5 是通义千问团队推出的最新一代大语言模型系列,其中Qwen2.5-7B-Instruct是经过指令微调的70亿参数版本,专为任务理解和交互式对话优化。

核心优势:
  • 强大的结构化输出能力:原生支持 JSON 格式的函数调用(Function Calling),便于与外部系统集成。
  • 长上下文支持:最大可处理131,072 tokens的输入,适合复杂文档分析和长对话记忆。
  • 多语言覆盖广泛:支持中文、英文、法语、西班牙语等超过29种语言,适用于国际化场景。
  • 专业领域增强:在数学、编程等领域引入专家模型训练策略,显著提升逻辑推理能力。
  • 高效生成性能:单次最多生成8,192 tokens,响应速度快,适合高并发服务部署。

该模型特别适合作为企业级轻量级AI助手的基础底座,在保证推理速度的同时提供高质量的任务执行能力。


2.2 vLLM:高性能推理加速引擎

vLLM 是由加州大学伯克利分校开发的开源大模型推理和服务框架,其核心创新在于PagedAttention技术——借鉴操作系统内存分页管理思想,高效管理注意力缓存(KV Cache),大幅提升吞吐量。

关键特性:
  • 吞吐量比 HuggingFace Transformers 提升14–24倍
  • 支持连续批处理(Continuous Batching)、CUDA图优化、量化等高级特性
  • 原生支持 OpenAI API 接口协议,易于集成到现有系统
  • 自 0.4.0 版本起全面支持Tools / Function Calling

⚠️ 注意:本文示例要求 vLLM 版本 ≥0.4.0,否则LLM.chat()不支持tools参数,会导致调用失败。


2.3 工具调用(Tool Calling)机制原理

工具调用允许大模型在推理过程中主动识别并触发外部程序或API,从而突破“静态知识库”的限制,实现以下能力:

能力说明
实时信息获取查询天气、股票、新闻等动态数据
外部计算执行执行数学运算、代码解释、数据库查询
系统控制控制智能家居设备、调用工作流引擎
数据持久化写入日志、更新状态、发送通知

工作流程如下:

用户提问 → LLM 判断需调用工具 → 输出结构化JSON请求 → 主程序解析并执行 → 返回结果给LLM → LLM生成自然语言回答

这种“思考→行动→反馈”模式,是构建智能代理(Agent)的关键基础。


三、前置条件与环境准备

3.1 硬件与软件要求

项目要求
GPU 显卡至少1张 NVIDIA A10/A100/V100 或 RTX 4090,显存 ≥ 24GB
CUDA 版本≥ 12.2
Python 环境3.10
操作系统CentOS 7 / Ubuntu 20.04+
存储空间≥ 20GB(用于存放模型文件)

推荐使用 Tesla V100 或更高配置以确保稳定运行。


3.2 模型下载

Qwen2.5-7B-Instruct 可通过以下两个官方渠道获取:

方式一:ModelScope(魔搭)推荐
git clone https://www.modelscope.cn/qwen/Qwen2.5-7B-Instruct.git
方式二:Hugging Face

访问地址:https://huggingface.co/Qwen/Qwen2.5-7B-Instruct

✅ 建议优先选择 ModelScope,国内访问更稳定,且支持断点续传。


3.3 创建 Conda 虚拟环境并安装依赖

# 创建独立环境 conda create --name qwen_tool python=3.10 conda activate qwen_tool # 安装必要包 pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple pip install transformers torch sentencepiece tiktoken

🔍 若已有旧版 vLLM,请升级至最新版:

bash pip install --upgrade vllm

可通过以下命令验证版本是否符合要求:

pip show vllm

输出中应包含Version: 0.4.0或更高。


四、技术实现:构建天气查询工具

4.1 功能需求说明

目标:当用户提问如“上海现在的天气怎么样?”时,模型能自动提取城市名,调用get_current_weather(city)函数获取模拟天气数据,并最终生成自然语言回复。

关键技术点: - 定义工具函数及其参数规范(OpenAPI Schema) - 配置模型支持 Tool Calling - 解析模型输出的 JSON 结构 - 将工具返回结果重新输入模型进行最终回答生成


4.2 完整代码实现

# -*- coding: utf-8 -*- import json import random import string from vllm import LLM, SamplingParams # 模型路径请根据实际位置修改 model_path = "/data/model/Qwen2.5-7B-Instruct" def generate_random_id(length=9): """生成随机 tool_call_id""" characters = string.ascii_letters + string.digits return ''.join(random.choice(characters) for _ in range(length)) # 模拟天气查询API def get_current_weather(city: str) -> str: """返回指定城市的模拟天气信息""" return f"目前{city}多云到晴,气温28~31℃,吹轻微的偏北风。" def chat(llm, sampling_params, messages, tools=None): """封装vLLM的聊天接口""" outputs = llm.chat( messages, sampling_params=sampling_params, tools=tools ) return outputs[0].outputs[0].text.strip() if __name__ == "__main__": # 设置采样参数 sampling_params = SamplingParams(temperature=0.45, top_p=0.9, max_tokens=8192) # 初始化LLM实例 llm = LLM(model=model_path, dtype="float16", swap_space=16) # 用户初始提问 messages = [ { "role": "user", "content": "广州天气情况如何?" } ] # 工具函数映射表 tool_functions = { "get_current_weather": get_current_weather } # 定义工具描述(必须符合OpenAI格式) tools = [ { "type": "function", "function": { "name": "get_current_weather", "description": "获取指定位置的当前天气", "parameters": { "type": "object", "properties": { "city": { "type": "string", "description": "查询当前天气的城市,例如:深圳" } }, "required": ["city"] } } } ] # 第一次调用:模型决定是否需要调用工具 response = chat(llm, sampling_params, messages, tools) print("模型原始输出:") print(response) # 判断是否为工具调用请求(JSON格式) if response.startswith("{") and "name" in response and "arguments" in response: try: tool_call = json.loads(response) func_name = tool_call["name"] args = tool_call["arguments"] # 执行对应函数 if func_name in tool_functions: result = tool_functions[func_name](**args) print(f"\n工具执行结果:{result}") # 将助手的工具调用记录加入对话历史 messages.append({ "role": "assistant", "content": response }) # 添加工具返回结果 messages.append({ "role": "tool", "content": result, "tool_call_id": generate_random_id() }) # 第二次调用:让模型基于工具结果生成最终回答 final_response = chat(llm, sampling_params, messages, tools) print(f"\n最终回答:{final_response}") else: print("未知工具调用:", func_name) except Exception as e: print("解析工具调用失败:", e) else: # 如果模型直接回答,则无需调用工具 print("模型直接回答:", response)

4.3 代码关键点解析

(1)tools参数定义规范
{ "type": "function", "function": { "name": "get_current_weather", "description": "获取指定位置的当前天气", "parameters": { ... } } }
  • 必须遵循 OpenAI 兼容格式
  • parameters使用 JSON Schema 描述输入参数类型和必填项
  • vLLM 会据此引导模型生成合法 JSON 输出
(2)两阶段对话流程设计
阶段输入内容目的
第一阶段用户问题 + tools定义让模型判断是否调用工具
第二阶段原始对话 + 工具调用记录 + 工具返回结果让模型生成自然语言总结

这是实现 Tool Calling 的标准范式,不可省略中间步骤。

(3)tool_call_id的作用

虽然本例为本地模拟,但为了兼容未来对接真实 API 网关或 Agent 框架(如 LangChain),建议始终生成唯一的tool_call_id,以便追踪调用链路。


五、运行结果与输出分析

执行脚本后输出如下:

模型原始输出: {"name": "get_current_weather", "arguments": {"city": "广州"}} 工具执行结果:目前广州多云到晴,气温28~31℃,吹轻微的偏北风。 最终回答:目前广州的天气情况是多云到晴,气温在28到31℃之间,吹着轻微的偏北风。

可以看到: 1. 模型准确识别出需调用get_current_weather工具; 2. 成功提取参数"city": "广州"; 3. 主程序正确执行函数并回传结果; 4. 模型整合信息后生成流畅自然的回答。

整个流程完全自动化,体现了 LLM 作为“大脑”协调外部“感官”与“执行器”的能力。


六、常见问题与解决方案

6.1 错误:TypeError: LLM.chat() got an unexpected keyword argument 'tools'

❌ 错误原因:

vLLM 版本过低(< 0.4.0),不支持tools参数。

✅ 解决方案:

升级 vLLM 到最新版本:

pip install --upgrade vllm

验证版本:

pip show vllm

确保输出类似:

Name: vllm Version: 0.4.0 or higher

6.2 模型未返回 JSON,而是直接回答?

可能原因: - 输入问题不够明确,模型认为可用已有知识回答 -tools定义不清晰或缺少必要字段

改进建议:
  • 明确提问方式:“请调用工具查询广州天气”
  • 强化 system prompt(可在 messages 开头添加):
{ "role": "system", "content": "你是一个智能助手,能够调用外部工具获取实时信息。当涉及天气、时间、价格等动态数据时,请优先使用工具。" }

6.3 如何接入真实天气API?

只需替换get_current_weather函数即可:

import requests def get_current_weather(city: str) -> str: url = f"https://api.weather.com/v7/forecast/current?city={city}&apiKey=YOUR_KEY" try: resp = requests.get(url).json() temp = resp['temperature'] condition = resp['condition'] return f"{city}当前气温{temp}℃,天气{condition}。" except: return f"无法获取{city}的天气数据,请稍后再试。"

💡 提示:生产环境中建议增加缓存、限流、错误重试机制。


七、总结与展望

7.1 核心价值总结

本文完整实现了基于Qwen2.5-7B-Instruct + vLLM的工具调用系统,展示了如何让大模型“走出文本”,连接真实世界的数据与服务。其核心价值体现在:

  • 打破知识静态性局限:通过工具调用获取实时信息
  • 提升回答准确性:避免“幻觉”式编造答案
  • 构建可扩展AI代理:为后续接入数据库、搜索引擎、自动化脚本打下基础
  • 本地化部署保障安全:所有数据不出内网,适合企业私有化场景

7.2 最佳实践建议

建议说明
使用 Conda 管理环境避免依赖冲突
升级至最新版 vLLM获得完整功能支持
工具定义标准化遵循 OpenAI Schema 规范
增加 System Prompt 引导提高工具调用成功率
分阶段测试调试先验证模型能否输出 JSON,再联调执行逻辑

7.3 下一步学习路径

  • 接入更多工具:日历查询、股票行情、网页搜索
  • 构建 Web UI:使用 FastAPI + Gradio 提供可视化界面
  • 集成 LangChain / LlamaIndex:打造完整 Agent 应用
  • 模型微调:针对特定行业定制工具调用行为

🌐 未来属于能“动手做事”的AI,而不仅仅是“能说话”的模型。掌握工具调用技术,是迈向真正智能体(Agent)的第一步。


本文代码已在 CentOS 7 + Tesla V100 + vLLM 0.4.2 + Qwen2.5-7B-Instruct 环境下验证通过。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 8:25:37

MiDaS模型应用指南:室内外场景深度估计

MiDaS模型应用指南&#xff1a;室内外场景深度估计 1. 引言&#xff1a;AI 单目深度估计的现实意义 在计算机视觉领域&#xff0c;从单张2D图像中恢复3D空间结构一直是极具挑战性的任务。传统方法依赖多视角几何或激光雷达等硬件设备&#xff0c;成本高且部署复杂。随着深度学…

作者头像 李华
网站建设 2026/9/2 22:08:16

如何高效部署Qwen3-VL-4B-Instruct?用Qwen3-VL-WEBUI镜像秒启动

如何高效部署Qwen3-VL-4B-Instruct&#xff1f;用Qwen3-VL-WEBUI镜像秒启动 1. 背景与痛点&#xff1a;视觉语言模型部署为何如此复杂&#xff1f; 在当前多模态AI快速发展的背景下&#xff0c;Qwen系列作为阿里开源的代表性视觉语言模型&#xff08;Vision-Language Model, …

作者头像 李华
网站建设 2026/9/2 22:07:56

分类器模型解释性工具:LIME可视化+云端低门槛体验

分类器模型解释性工具&#xff1a;LIME可视化云端低门槛体验 引言&#xff1a;为什么我们需要解释AI分类结果&#xff1f; 在金融风控领域&#xff0c;AI模型已经广泛应用于信用评分、欺诈检测等关键场景。但一个常见的问题是&#xff1a;当模型拒绝某笔贷款申请或标记某笔交…

作者头像 李华
网站建设 2026/9/2 0:24:10

导师推荐8个AI论文软件,MBA毕业论文轻松搞定!

导师推荐8个AI论文软件&#xff0c;MBA毕业论文轻松搞定&#xff01; AI 工具如何助力论文写作&#xff1f; 在当今快节奏的学术环境中&#xff0c;MBA 学生面对论文写作时常常感到压力山大。无论是选题、撰写还是修改&#xff0c;每一个环节都可能成为瓶颈。而 AI 工具的出现&…

作者头像 李华
网站建设 2026/9/2 22:54:29

Qwen3-VL-WEBUI镜像深度体验|解锁视觉代理与长上下文视频理解能力

Qwen3-VL-WEBUI镜像深度体验&#xff5c;解锁视觉代理与长上下文视频理解能力 在多模态大模型快速演进的今天&#xff0c;通义千问团队推出的 Qwen3-VL-WEBUI 镜像&#xff0c;标志着国产视觉语言模型&#xff08;VLM&#xff09;正式迈入“智能体化”新阶段。该镜像内置 Qwen3…

作者头像 李华
网站建设 2026/9/2 22:55:41

开源模型落地实践|Qwen2.5-7B与vLLM协同工作

开源模型落地实践&#xff5c;Qwen2.5-7B与vLLM协同工作 在大语言模型&#xff08;LLM&#xff09;快速发展的今天&#xff0c;如何将高性能开源模型高效部署到生产环境&#xff0c;成为企业降本增效的关键路径。阿里云推出的 Qwen2.5-7B-Instruct 模型凭借其强大的多语言支持…

作者头像 李华