从零开始使用Qwen2.5-7B|构建支持工具调用的AI代理

从零开始使用Qwen2.5-7B|构建支持工具调用的AI代理

一、学习目标与技术背景

随着大语言模型(LLM)在自然语言理解与生成能力上的持续突破,AI代理(Agent)正成为连接模型能力与真实世界应用的关键桥梁。一个具备工具调用(Tool Usage)能力的AI代理,不仅能回答问题,还能主动执行操作——如查询天气、运行代码、访问数据库等,从而真正实现“智能体”的闭环交互。

本文将带你从零开始搭建一个基于 Qwen2.5-7B-Instruct 模型的支持工具调用的AI代理系统,使用阿里开源框架Qwen-Agent实现完整的本地部署与功能扩展。你将掌握:

  • 如何部署 Qwen2.5-7B 模型并提供 OpenAI 兼容 API 接口
  • 如何安装和配置 Qwen-Agent 框架
  • 如何定义自定义工具并让模型自动调用
  • 工具调用过程中的数据流解析与调试技巧

最终成果:你可以向AI提问“今天广州天气如何?”,它会自动调用你编写的get_current_weather函数返回实时信息,并以自然语言组织回复。


二、前置准备:环境与资源清单

2.1 硬件与软件要求

类别要求
GPU 显存至少 24GB(推荐 3090/4090 或 A10G),7B 模型需量化加载时可降低至 16GB
显卡数量单卡即可运行(FP16精度)
CUDA 版本≥ 12.1
Python 版本3.10+
操作系统Linux(CentOS 7 / Ubuntu 20.04+)

2.2 所需组件概览

组件作用
Qwen2.5-7B-Instruct主语言模型,负责推理与决策
vLLMllama.cpp提供高性能推理服务,暴露/v1/chat/completions接口
Qwen-AgentAI代理框架,支持工具注册、规划、记忆等功能
Gradio(可选)快速构建Web界面

三、部署Qwen2.5-7B模型服务

要让 Qwen-Agent 调用模型,首先需要启动一个本地的模型推理服务。我们推荐使用vLLM,因其对 Qwen 系列支持良好且性能优异。

3.1 安装 vLLM

pip install vLLM

注意:确保你的 PyTorch 和 CUDA 驱动版本兼容。建议使用torch==2.1.2+cu121

3.2 启动模型服务

假设你已通过 ModelScope 或 Hugging Face 下载了模型权重到/models/Qwen2.5-7B-Instruct目录:

python -m vllm.entrypoints.openai.api_server \ --model /models/Qwen2.5-7B-Instruct \ --host 0.0.0.0 \ --port 9000 \ --tensor-parallel-size 1 \ --dtype auto \ --max-model-len 131072 \ --enable-auto-tool-choice \ --tool-call-parser hermes

🔍 参数说明: ---enable-auto-tool-choice:启用自动工具选择功能 ---tool-call-parser hermes:使用 Hermes 解析器处理 JSON 结构化输出(适配 Qwen 的 tool call 格式)

服务启动后,默认监听http://localhost:9000/v1,完全兼容 OpenAI API 协议。


四、安装与配置 Qwen-Agent 框架

4.1 创建虚拟环境并安装依赖

conda create -n qwen-agent python=3.10 conda activate qwen-agent # 安装完整功能包(含GUI、RAG、代码解释器) pip install -U "qwen-agent[gui,rag,code_interpreter,python_executor]" pip install python-dateutil

💡 若仅需核心功能,可用最小安装:bash pip install -U qwen-agent

4.2 验证安装

运行以下命令查看是否成功导入:

from qwen_agent.agents import Assistant print("Qwen-Agent installed successfully!")

无报错即表示安装成功。


五、编写支持工具调用的AI代理程序

我们将分三步构建一个能调用“获取天气”功能的AI助手。

5.1 步骤一:定义自定义工具

创建文件weather_tool.py,注册一个名为get_current_weather的工具:

# -*- coding: utf-8 -*- from qwen_agent.tools.base import BaseTool, register_tool import json5 @register_tool('get_current_weather') class GetCurrentWeather(BaseTool): description = '获取指定城市的当前天气情况' parameters = [ { 'name': 'location', 'type': 'string', 'description': '城市名称,例如:北京、上海、广州', 'required': True } ] def call(self, params: str, **kwargs) -> str: # 解析 LLM 生成的参数 try: args = json5.loads(params) location = args.get('location', '').strip() except Exception as e: return f'参数解析失败: {str(e)}' # 模拟不同城市的天气响应 weather_data = { '广州': '目前我市多云间晴,局部有阵雨,气温29~32℃,吹轻微的东南风。', '北京': '今日晴转多云,空气质量良,气温18~25℃,适宜户外活动。', '上海': '阴天,偶有小雨,气温22~27℃,出行请带伞。', '深圳': '雷阵雨,气温28~33℃,伴有短时强降水,请注意防范。' } return weather_data.get(location, f'抱歉,暂未获取{location}的天气数据。')

⚠️ 注意事项: -@register_tool装饰器必须存在,用于被框架识别 -parameters字段需符合 OpenAPI 规范,否则无法正确生成函数调用请求 - 返回值应为字符串格式的结果,便于后续模型整合


5.2 步骤二:配置LLM连接参数

在主程序中设置模型服务地址:

llm_cfg = { 'model': '/models/Qwen2.5-7B-Instruct', # 模型标识符(任意命名) 'model_server': 'http://localhost:9000/v1', # vLLM 提供的服务端点 'api_key': 'EMPTY', # vLLM 不需要密钥 'generate_cfg': { 'top_p': 0.8, 'temperature': 0.7, 'max_tokens': 8192 } }

5.3 步骤三:构建AI代理并运行对话

完整脚本如下(保存为agent_with_weather.py):

# -*- coding: utf-8 -*- import sys from qwen_agent.agents import Assistant from weather_tool import GetCurrentWeather # 导入自定义工具类 # LLM 配置(同上) llm_cfg = { 'model': '/models/Qwen2.5-7B-Instruct', 'model_server': 'http://localhost:9000/v1', 'api_key': 'EMPTY', 'generate_cfg': {'top_p': 0.8} } # 初始化助手代理 system_instruction = '你是一个乐于助人的AI助手,擅长使用工具获取实时信息。' tools = ['get_current_weather', 'code_interpreter'] # 注册工具名 assistant = Assistant( llm=llm_cfg, system_message=system_instruction, function_list=tools ) if __name__ == '__main__': # 用户输入 query = '今天广州天气怎么样?出门需要带伞吗?' messages = [{'role': 'user', 'content': query}] print("AI 正在思考...\n") full_response = "" for res in assistant.run(messages=messages): if len(res) == 3: content = res[2]['content'] full_response += content print(content, end='', flush=True) print("\n\n✅ 回答完成。")

六、运行结果与调用流程分析

执行命令:

python agent_with_weather.py

输出示例:

AI 正在思考... params: {"location": "广州"} 今天广州的天气是多云间晴,局部有阵雨,气温在29到32摄氏度之间,吹的是轻微的东南风。记得出门携带雨具哦! ✅ 回答完成。

6.1 工具调用全过程拆解

整个交互过程分为三个阶段,对应三条消息流转:

阶段1:模型决定调用工具
{ "role": "assistant", "content": "", "function_call": { "name": "get_current_weather", "arguments": "{\"location\": \"广州\"}" } }

📌 Qwen2.5-7B 判断用户问题是关于天气的,且需要外部数据,于是触发工具调用。

阶段2:执行本地函数并返回结果
{ "role": "function", "name": "get_current_weather", "content": "目前我市多云间晴,局部有阵雨,气温29~32℃,吹轻微的东南风。" }

🧠 Qwen-Agent 自动调用GetCurrentWeather.call()方法并将结果注入上下文。

阶段3:模型整合信息生成最终回复
{ "role": "assistant", "content": "今天广州的天气是多云间晴,局部有阵雨……记得出门携带雨具哦!" }

✅ 模型结合原始问题与工具返回内容,生成人性化、有建议性的回答。


七、常见问题与解决方案

问题原因解决方案
报错ModuleNotFoundError: No module named 'qwen_agent'环境未激活或安装失败确认 conda 环境激活,重新安装
模型不调用工具,直接猜测答案工具描述不清或参数格式错误检查descriptionparameters是否清晰规范
vLLM 启动失败,显存不足FP16 加载仍超限使用--quantization awqgptq量化加载
工具调用后无响应函数抛出异常未捕获call()中添加 try-except 并返回友好提示
中文乱码或编码错误文件未声明 UTF-8 编码添加# -*- coding: utf-8 -*-头部声明

八、进阶技巧与最佳实践

8.1 支持更多工具类型

你可以轻松扩展其他工具,例如:

  • search_internet: 调用 SerpAPI 搜索网页
  • execute_sql: 连接数据库执行查询
  • send_email: 发送邮件通知
  • translate_text: 多语言翻译服务

只需继承BaseTool并注册即可。

8.2 启用代码解释器(Code Interpreter)

Qwen-Agent 内置了安全沙箱化的代码执行能力,可用于数学计算、数据分析等场景:

tools = ['code_interpreter'] messages = [ {'role': 'user', 'content': '画一个正弦函数图像,x范围是0到4π'} ]

自动生成 Python 代码并渲染图表,无需额外开发!

8.3 构建 Web 界面(Gradio GUI)

添加 GUI 支持非常简单:

from qwen_agent.gui import WebUI WebUI(assistant).run(server_port=7860)

访问http://localhost:7860即可进入图形化聊天界面。


九、总结与下一步建议

✅ 本文核心收获

  • 成功部署了Qwen2.5-7B-Instruct + vLLM的高性能推理服务
  • 使用Qwen-Agent框架构建了一个支持工具调用的 AI 代理
  • 实现了自定义工具注册、调用与结果融合的完整链路
  • 掌握了工具调用的数据结构与调试方法

🚀 下一步学习路径建议

方向推荐动作
多工具协同让模型同时调用天气 + 地图 API 推荐出行路线
RAG 增强接入本地知识库,提升专业领域问答准确率
Agent 规划能力尝试Planner类型代理,实现复杂任务分解
生产级部署使用 FastAPI + Docker 封装成微服务
性能优化对模型进行 AWQ/GPTQ 量化,降低显存占用

十、参考资料

  • Qwen 官方 GitHub:https://github.com/QwenLM
  • Qwen-Agent 文档:https://qwen.readthedocs.io/zh/latest/qwen-agent.html
  • vLLM 文档:https://docs.vllm.ai/
  • ModelScope 模型下载:https://www.modelscope.cn/models/qwen/Qwen2.5-7B-Instruct

🔗 原文参考:开源模型应用落地-Qwen2.5-7B-Instruct-tool usage入门-Qwen-Agent初体验(一)

现在,你已经拥有了打造专属AI助手的能力。下一步,不妨尝试接入真实的天气API或数据库,让你的Agent真正“活”起来!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1148951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

制造业转安全不内卷!两大硬核经验(设备实操 + 流程熟悉),适配 45-80 万年薪工控岗!

作为制造业运维,你是不是每天和 PLC、SCADA、DCS 等工控设备打交道,熟悉生产网的 “物理隔离、实时性要求”?是不是早就懂 “生产线不能随便停机” 的核心逻辑?随着工业互联网的发展,“工控安全” 已成为网安领域的刚需…

ResNet18物体识别省钱方案:按小时付费,比买卡便宜90%

ResNet18物体识别省钱方案:按小时付费,比买卡便宜90% 引言 作为一名智能家居创业者,你可能经常需要展示物品识别Demo来吸引投资人或客户。传统方案需要购买昂贵的显卡,动辄上万元的投入对初创团队简直是雪上加霜。今天我要分享的…

30分钟掌握ResNet18:物体识别新手云端实战手册

30分钟掌握ResNet18:物体识别新手云端实战手册 引言:为什么选择ResNet18入门CV? 计算机视觉(CV)是AI领域最热门的技能之一,但很多初学者会被复杂的数学公式和漫长的环境配置劝退。作为在AI行业摸爬滚打10…

Java打造同城:自助KTV线上预约新体验源码

以下是一套基于Java技术的同城自助KTV线上预约系统源码方案,该方案整合了高并发处理、实时通信、智能调度、安全支付等核心能力,旨在为用户提供便捷、高效、安全的KTV体验,同时帮助商家优化运营效率:一、技术架构微服务架构&#…

信息与网络安全基础百科全书:从核心理论到入门实践,一篇构建你的知识防线

一、概述 1.网络信息安全基本概念 信息安全:是指信息网络中的硬件、软件及其系统中的数据受到保护,不受偶然的或者恶意的原因而遭到破坏、更改、泄露、否认等,系统连续可靠正常的运行,信息服务不中断。 **密码学:**…

轻松上手Qwen3-VL-WEBUI|多模态AI应用开发新选择

轻松上手Qwen3-VL-WEBUI|多模态AI应用开发新选择 1. 前言:为什么需要一个本地化的视觉语言模型UI? 随着多模态大模型的快速发展,Qwen3-VL 作为阿里通义千问系列中最新一代的视觉-语言模型(Vision-Language Model, VLM&…

LoopAndLoop【安卓逆向】阿里CTF

LoopAndLoop(阿里CTF) 首先是通用步骤 解压附件后发现是APK文件,打开jeb进行反编译,反编译结果如下:可以看到程序自定了几个check函数,并且调用了自定义库“lhm”。其中chec函数是native层的原生函数(函数名前面的声明…

ResNet18模型服务化:REST API快速部署指南

ResNet18模型服务化:REST API快速部署指南 引言 作为一名后端工程师,你可能经常需要将AI模型集成到现有系统中,但面对复杂的模型部署流程却无从下手。ResNet18作为经典的图像分类模型,在物体识别、工业质检等领域应用广泛。本文…

分类模型部署优化:TensorRT加速+云端自动转换

分类模型部署优化:TensorRT加速云端自动转换 引言 当你辛辛苦苦训练好一个分类模型,准备上线提供服务时,却发现API响应速度慢得像蜗牛爬行,用户抱怨连连,这种情况是不是很让人抓狂?作为经历过多次模型部署…

ResNet18商业应用入门:10元预算验证产品可行性

ResNet18商业应用入门:10元预算验证产品可行性 1. 为什么小店老板需要ResNet18? 想象你是一家便利店的老板,每天早晚都要清点货架商品:哪些卖完了需要补货?哪些商品放错了位置?传统做法是人工盘点&#x…

ResNet18异常检测应用:工业质检快速验证方案

ResNet18异常检测应用:工业质检快速验证方案 引言 在工厂生产线上,质检环节往往是最耗时且容易出错的环节之一。想象一下,如果能让AI像经验丰富的质检员一样,快速识别产品表面的划痕、裂纹或装配错误,那将大幅提升生…

Rembg抠图模型比较:U2NET与其他网络

Rembg抠图模型比较:U2NET与其他网络 1. 引言:智能万能抠图 - Rembg 在图像处理与内容创作领域,自动去背景(Image Matting / Background Removal)是一项高频且关键的需求。无论是电商商品图精修、社交媒体内容制作&am…

Qwen3-VL自动化测试实践|基于Qwen3-VL-WEBUI实现UI识别与用例生成

Qwen3-VL自动化测试实践|基于Qwen3-VL-WEBUI实现UI识别与用例生成 在持续交付节奏日益加快的今天,传统UI自动化测试正面临前所未有的挑战:前端框架频繁重构、控件ID动态生成、跨平台适配复杂——这些都让基于XPath或CSS选择器的脚本变得脆弱不…

从零开始微调Qwen3-VL-4B-Instruct|借助WEBUI镜像简化部署流程

从零开始微调Qwen3-VL-4B-Instruct|借助WEBUI镜像简化部署流程 随着多模态大模型在视觉理解、图文生成和跨模态推理等任务中的广泛应用,Qwen3-VL系列作为通义千问最新一代的视觉语言模型,凭借其强大的感知能力与灵活的架构设计,正…

一篇文章讲透信息系统的安全防护:核心架构、关键技术与实践要点全解析

引言 从技术、管理和人员三个方面综合考虑,构建多层次、多维度的安全防护体系。 信息系统的安全防护措施是为了保护系统的机密性、完整性和可用性(CIA三要素),防止数据泄露、篡改和系统瘫痪。 以下是安全防护措施分类及简述&am…

ResNet18物体识别5分钟上手:云端GPU免安装,立即体验

ResNet18物体识别5分钟上手:云端GPU免安装,立即体验 引言 当你面对一个紧急的作业deadline,需要快速实现物体识别功能时,最头疼的往往不是写代码,而是配置复杂的环境和依赖。ResNet18作为经典的图像识别模型&#xf…

智能抠图Rembg:珠宝首饰去背景案例

智能抠图Rembg:珠宝首饰去背景案例 1. 引言:AI驱动的电商图像精修新范式 随着电商平台对商品展示质量要求的不断提升,高精度去背景技术已成为图像处理的核心需求之一。传统手动抠图耗时耗力,难以满足大批量商品图快速上线的需求…

Java共享台球室:无人系统微信双端联动

以下是基于Java技术打造的共享台球室无人系统,实现微信小程序与公众号双端联动的详细方案,该方案整合了微服务架构、物联网通信、AI算法及多端交互技术,旨在为用户提供便捷预约体验,同时为商家提供高效管理工具:一、系…

信息与网络安全核心速查手册:面试复习与工作自查必备基础知识集

一、概述 1.网络信息安全基本概念 信息安全:是指信息网络中的硬件、软件及其系统中的数据受到保护,不受偶然的或者恶意的原因而遭到破坏、更改、泄露、否认等,系统连续可靠正常的运行,信息服务不中断。 **密码学:**…

Qwen3-VL-WEBUI部署实践|基于阿里开源视觉语言模型快速搭建交互界面

Qwen3-VL-WEBUI部署实践|基于阿里开源视觉语言模型快速搭建交互界面 随着多模态大模型在图像理解、视频分析和跨模态推理等领域的广泛应用,Qwen3-VL 作为通义千问系列中最新一代的视觉语言模型,凭借其强大的图文融合能力与增强的空间感知机制…