【AI大模型Agent探索】深入探索实践 Qwen-Agent 的 Function Calling

系列篇章💥

No.文章
1【Qwen部署实战】探索Qwen-7B-Chat:阿里云大型语言模型的对话实践
2【Qwen2部署实战】Qwen2初体验:用Transformers打造智能聊天机器人
3【Qwen2部署实战】探索Qwen2-7B:通过FastApi框架实现API的部署与调用
4【Qwen2部署实战】Ollama上的Qwen2-7B:一键部署大型语言模型指南
5【Qwen2部署实战】llama.cpp:一键部署高效运行Qwen2-7B模型
6【Qwen2部署实战】部署高效AI模型:使用vLLM进行Qwen2-7B模型推理
7【AI大模型Agent探索】Qwen-Agent:基于Qwen的LLM应用开发框架
8【AI大模型Agent探索】深入探索实践 Qwen-Agent 的 Function Calling

目录

  • 系列篇章💥
  • 引言
  • 1、概述
    • 1.1 功能调用(Function Calling)的定义
    • 1.2 功能调用的重要性
    • 1.3 功能调用的工作流程
    • 1.4 功能调用的实际应用
    • 1.5 开发者如何利用功能调用
  • 2、安装部署实操
  • 3、本地模型部署
  • 4、Function Calling开发实践
    • 4.1导入依赖库
    • 4.2模拟一个外部工具函数
    • 4.3测试Qwen2-7B-Instruct 的OpenAI风格的API
    • 4.4定义LLM
    • 4.5定义工具函数信息
    • 4.6定义messages消息
    • 4.7第一次请求大模型(查找工具函数)
    • 4.8将响应内容放入消息中备用
    • 4.9第二次大模型调用
  • 结语
  • 项目地址


引言

在当今快速发展的人工智能领域,大型语言模型(LLMs)已经成为推动技术革新的关键力量。它们不仅在理解复杂语言结构、生成创造性内容、甚至在提供深入的决策支持方面展现出了前所未有的能力,而且正在不断地拓宽我们对机器智能的认识边界。

在这样的背景下,Qwen-Agent 的出现标志着一个重要的里程碑。它是一个创新的框架,专门设计用于开发基于大型语言模型的应用程序。Qwen-Agent 不仅仅局限于语言理解,它还通过整合功能调用(Function Calling)、代码解释、记忆能力等先进特性,使得开发者能够构建出真正智能、高度自适应的代理(Agents)。

本文将深入探讨 Qwen-Agent 的核心特性之一——功能调用(Function Calling)。这是一种允许 AI 模型直接与外部工具和API进行交互的能力,极大地扩展了 AI 模型的应用范围。通过实际的编码实践,我们将展示如何利用这一机制,将 AI 的决策能力和外部工具的功能性紧密结合,以实现更加丰富和高效的自动化服务。

1、概述

在人工智能的丰富领域中,Qwen-Agent 以其独特的架构和功能,为开发者提供了一个强大的工具集,用于构建高度智能化的助手。本章将重点介绍 Qwen-Agent 的核心特性之一——功能调用(Function Calling),这是实现智能代理与外部工具无缝集成的关键技术。

1.1 功能调用(Function Calling)的定义

功能调用是 Qwen-Agent 的一项基础能力,它允许 AI 模型在处理任务时主动调用预定义的函数或工具。这些工具可以是内部定义的函数,也可以是外部的 API 服务,它们为 AI 提供了执行特定操作的能力,从而扩展了 AI 的应用范围。

1.2 功能调用的重要性

  • 扩展性:通过功能调用,AI 模型不再局限于其内置的能力,能够执行更多样化的任务。
  • 灵活性:开发者可以根据需求轻松集成新的工具或服务,使 AI 代理能够适应不断变化的应用场景。
  • 实用性:功能调用使得 AI 能够直接与现实世界的数据和操作交互,提高了 AI 解决实际问题的能力。

1.3 功能调用的工作流程

  1. 定义工具:开发者定义工具函数,包括其名称、功能描述、所需参数等。
  2. 注册工具:将定义好的工具函数注册到 Qwen-Agent 中,使其可供 AI 模型调用。
  3. 模型调用:在处理用户请求时,AI 模型根据需要调用相应的工具函数。
  4. 执行与反馈:工具函数执行操作,并将结果反馈给 AI 模型,模型据此继续对话或任务处理。

1.4 功能调用的实际应用

  • 数据检索:AI 模型可以调用工具函数来检索数据库中的数据,为用户提供最新信息。
  • 自动化操作:通过调用自动化脚本或程序,AI 模型可以执行文件处理、数据录入等任务。
  • 智能决策支持:集成分析工具,AI 模型可以为用户提供基于数据的决策建议。

1.5 开发者如何利用功能调用

开发者可以利用 Qwen-Agent 的功能调用机制,开发出能够解决特定问题的智能代理。无论是通过编写自定义的函数,还是通过集成现有的 API 服务,功能调用都为开发者提供了极大的自由度和创新空间。

2、安装部署实操

Qwen-Agent 的安装部署过程简单明了,可以通过以下步骤快速开始:

pip install -U qwen-agent

从 GitHub 安装最新版本

   git clone https://github.com/QwenLM/Qwen-Agent.gitcd Qwen-Agentpip install -e ./

安装可选依赖(如果需要内置 GUI 支持):

 pip install -U qwen-agent[gui]
# 或,从源代码安装最新版本: pip install -e ./[gui]

3、本地模型部署

先采用vLLM进行Qwen2-7B模型部署,启用OpenAI风格的API接口,
下载Qwen2-7B-Instruct 到本地/root/autodl-tmp/qwen目录,执行下面命令,启动OpenAI风格的API接口

python -m vllm.entrypoints.openai.api_server --model /root/autodl-tmp/qwen/Qwen2-7B-Instruct  --served-model-name Qwen2-7B-Instruct --max-model-len=2048

具体参考文章:《部署高效AI模型:使用vLLM进行Qwen2-7B模型推理》

4、Function Calling开发实践

接下来我们通过代码来体验Qwen-Agent的Function Calling功能。以获取天气信息为例,我们不仅调用了 get_current_weather 函数,还将结果反馈给 AI 模型,使其能够提供更准确的回答。这个过程展示了 Function Calling 如何使 AI 模型与外部数据源交互,增强了对话的实用性和准确性。

4.1导入依赖库

首先,我们需要导入 Python 标准库中的一些模块,以及 Qwen-Agent 框架中的关键组件。

# 导入Python标准库中的json模块,用于处理JSON数据
import json
# 导入Python标准库中的os模块,用于操作系统功能,如环境变量
import os# 从qwen_agent.llm模块导入get_chat_model函数
from qwen_agent.llm import get_chat_model

4.2模拟一个外部工具函数

# 示例虚拟函数,硬编码为返回相同的天气
# 在生产环境中,这可以是您的后端API或外部API
def get_current_weather(location, unit='华氏度'):"""获取给定地点的当前天气"""if '东京' in location.lower():return json.dumps({'location': '东京', 'temperature': '10', 'unit': '摄氏度'})elif '旧金山' in location.lower():return json.dumps({'location': '旧金山', 'temperature': '72', 'unit': '华氏度'})elif '巴黎' in location.lower():return json.dumps({'location': '巴黎', 'temperature': '22', 'unit': '摄氏度'})else:return json.dumps({'location': location, 'temperature': '未知'})

4.3测试Qwen2-7B-Instruct 的OpenAI风格的API

测试本地Qwen2-7B模型的OpenAI风格的API接口服务是否正常

from openai import OpenAI
openai_api_key = "sk-xxx" # 随便填写,只是为了通过接口参数校验
openai_api_base = "http://localhost:8000/v1"client = OpenAI(api_key=openai_api_key,base_url=openai_api_base,
)chat_outputs = client.chat.completions.create(model="Qwen2-7B-Instruct",messages=[{"role": "system", "content": "你是一个智能AI助手"},{"role": "user", "content": "你好"},]
)
print(chat_outputs)

输出:

ChatCompletion(id='cmpl-2e9883ed58154fa5bc6ff63886aea585', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='你好!很高兴能帮助你。有什么问题或需要我提供的信息吗?', role='assistant', function_call=None, tool_calls=None), stop_reason=None)], created=1719843868, model='Qwen2-7B-Instruct', object='chat.completion', system_fingerprint=None, usage=CompletionUsage(completion_tokens=17, prompt_tokens=19, total_tokens=36))

4.4定义LLM

使用本地的模型定义LLM

llm = get_chat_model({'model': 'Qwen2-7B-Instruct','model_server': 'http://localhost:8000/v1',  # api_base'api_key': 'EMPTY',# 使用 DashScope 提供的模型服务:#'model': 'qwen1.5-14b-chat',#'model_server': 'dashscope',#'api_key': os.getenv('DASHSCOPE_API_KEY'),# 使用 DashScope 提供的与 OpenAI 兼容的模型服务:# 'model': 'qwen1.5-14b-chat',# 'model_server': 'https://dashscope.aliyuncs.com/compatible-mode/v1', # 'api_key': os.getenv('DASHSCOPE_API_KEY'),# 使用 Together.AI 提供的模型服务:# 'model': 'Qwen/Qwen1.5-14B-Chat',# 'model_server': 'https://api.together.xyz',   # api_base# 'api_key': os.getenv('TOGETHER_API_KEY'),
})

4.5定义工具函数信息

functions = [{'name': 'get_current_weather','description': '获取给定位置的当前天气','parameters': {'type': 'object','properties': {'location': {'type': 'string','description': '城市和州,例如加利福尼亚州旧金东京山',},'unit': {'type': 'string','enum': ['摄氏度', '华氏度']},},'required': ['location'],},}]

4.6定义messages消息

messages = [{'role': 'user', 'content': "东京的天气怎么样?"}]

4.7第一次请求大模型(查找工具函数)

print('# 助手回复 1:')
responses = []
for responses  in llm.chat(messages=messages,functions=functions,stream=True,#True# 注意:extra_generate_cfg 是可选的# extra_generate_cfg=dict(#     # 注意:如果 function_choice='auto',让模型决定是否调用函数#     # function_choice='auto',  # 如果没有设置 function_choice,默认是 'auto'#     # 注意:设置 function_choice='get_current_weather' 强制模型调用此函数#     function_choice='get_current_weather',# ),
):print(responses)

输出:
在这里插入图片描述

4.8将响应内容放入消息中备用

messages.extend(responses)  # 用助手的回复扩展对话

查看messages

messages

输出:
在这里插入图片描述

4.9第二次大模型调用

1、取出工具函数进行手工调用 2、将响应结果给到大模型进行整理增强

# 第 2 步:检查模型是否想要调用一个函数
last_response = messages[-1]
# 检查变量 last_response 是否包含键 function_call 并且其值不为 None
if last_response.get('function_call', None):# 第 3 步:调用函数# 注意:JSON 响应可能不是有效的;确保要处理错误available_functions = {'get_current_weather': get_current_weather,}  # 此示例中只有一个函数,但您可以有多个function_name = last_response['function_call']['name']function_to_call = available_functions[function_name]function_args = json.loads(last_response['function_call']['arguments'])function_response = function_to_call(location=function_args.get('location'),unit=function_args.get('unit'),)print('# 函数响应:')print(function_response)# 第 4 步:将每个函数调用和函数响应的信息发送给模型messages.append({'role': 'function','name': function_name,'content': function_response,})  # 用函数响应扩展对话print('# 助手回复 2:')for response in llm.chat(messages=messages,functions=functions,stream=True,#True):  # 在模型能够看到函数响应的情况下获取模型的新回复print(response)

输出:
在这里插入图片描述

response[-1]

输出:

{'role': 'assistant', 'content': '东京的当前气温是10摄氏度。'}

结语

本文的探索之旅让我们深刻理解了 Qwen-Agent 框架及其功能调用(Function Calling)特性的重要性和潜力。Qwen-Agent 以其卓越的能力,将 AI 的深度学习能力与外部工具的实用操作无缝融合,为智能自动化服务的发展开辟了新天地。在这个过程中,我们见证了如何通过简单的代码实现复杂的功能,如何让 AI 模型更加智能和自适应。

面向未来,我们有理由相信,Qwen-Agent 将在 AI 技术的广阔天地中继续绽放光彩,带来更多激动人心的创新和突破。在安全和伦理的框架内,Qwen-Agent 的发展既快速又负责任。希望大家一起加入AI的旅程,一起探索、创造,并迎接智能自动化服务的新时代。随着本文的结束,我们的探索并未停止,而是开启了新的篇章。

项目地址

Qwen-Agent GitHub

在这里插入图片描述
🎯🔖更多专栏系列文章:AI大模型提示工程完全指南AI大模型探索之路(零基础入门)AI大模型预训练微调进阶AI大模型开源精选实践AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑

😎 作者介绍:我是寻道AI小兵,资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索。
📖 技术交流:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,加入技术交流群,开启编程探索之旅。
💘精心准备📚500本编程经典书籍、💎AI专业教程,以及高效AI工具。等你加入,与我们一同成长,共铸辉煌未来。
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!

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

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

相关文章

PyTorch 深度学习实践-卷积神经网络基础篇

视频指路 参考博客笔记 参考笔记二 文章目录 上课笔记代码实现作业实现 上课笔记 如果一个网络全都是由线性层串联起来(torch.nn.Linear(xx, yy)),就叫他全连接的网络(左边节点到右边节点任意两个都存在权重) 先看一下吴恩达或者李宏毅老师…

QT通用配置文件库(QPreferences)

QT通用配置文件库(QPreferences) QPreferences项目是基于nlohmann/json的qt可视化配置文件库,将配置保存成json格式,并提供UI查看与修改,可通过cmake可快速添加进项目。默认支持基本类型、stl常用容器、基本类型与stl容器组成的结构体&#…

【Git标签管理】理解标签 | 创建标签 | 查看标签 | 删除标签 | 推送标签

目录 1.理解标签 2.创建标签 3.查看标签 4.删除本地仓库的标签 5.推送标签 6.删除远程仓库的标签 1.理解标签 Git提供一个打标签的功能tag,对某一次事务/提交的表示(作用/意义)。标签 tag ,可以简单的理解为是对某次 comm…

Java(二十二)---队列

文章目录 前言1.队列(Queue)的概念2.Queue的使用3.队列的模拟实现4.循环队列5.双端队列6.面试题[1. 用队列实现栈](https://leetcode.cn/problems/implement-stack-using-queues/description/)[2. 用栈实现队列](https://leetcode.cn/problems/implement-queue-using-stacks/de…

人工智能导论-机器学习

机器学习概述 概述 本章主要介绍的机器学习的概念、发展历程、发展趋势、相关应用,着重拓展机监督学习和无监督学习的相关知识。 重点:机器学习的定义和应用; 难点:机器学习算法及分类。 机器学习 - 重要性 MachineLeaning出…

<数据集>钢板缺陷检测数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:1986张 标注数量(xml文件个数):1986 标注数量(txt文件个数):1986 标注类别数:7 标注类别名称:[crescent gap, silk spot, water spot, weld line, oil spot, punchin…

工业圆点定位激光器主要应用场景有哪些?

在现代工业生产的各个领域,精确定位和高效操作已成为提升生产效率和产品质量的关键。其中,工业圆点定位激光器以其高精度、高效率的特性,成为了众多工业应用中的核心工具。接下来我们就跟着鑫优威一起来深入了解一下关于工业圆点定位激光器的…

抖音/快手/小红书私信卡片在线制作

W外链平台,作为现代网络营销领域的一颗璀璨明星,其强大的功能和独特的优势已经吸引了无数企业和个人的目光。在如今这个信息爆炸的时代,如何有效地将自己的网站、产品、服务推广出去,成为了每个营销人员都在思考的问题。而W外链平…

CentOS 7报错:yum命令报错 “ Cannot find a valid baseurl for repo: base/7/x86_6 ”

参考连接: 【linux】CentOS 7报错:yum命令报错 “ Cannot find a valid baseurl for repo: base/7/x86_6 ”_centos linux yum search ifconfig cannot find a val-CSDN博客 Centos7出现问题Cannot find a valid baseurl for repo: base/7/x86_64&…

uniapp 微信默认地图选点功能实现

效果图 配置项 微信公众平台-小程序配置 uniapp配置 上代码 <template><view class"content"><button click"toMap">请选择位置</button></view> </template><script setup lang"ts">function toMa…

Flink HA

目录 Flink HA集群规划 环境变量配置 masters配置 flink-conf.yaml配置 测试 Flink HA集群规划 FLink HA集群规划如下&#xff1a; IP地址主机名称Flink角色ZooKeeper角色192.168.128.111bigdata111masterQuorumPeerMain192.168.128.112bigdata112worker、masterQuorumPee…

Leetcode1929. 数组串联

问题描述&#xff1a; 给你一个长度为 n 的整数数组 nums 。请你构建一个长度为 2n 的答案数组 ans &#xff0c;数组下标 从 0 开始计数 &#xff0c;对于所有 0 < i < n 的 i &#xff0c;满足下述所有要求&#xff1a; ans[i] nums[i]ans[i n] nums[i] 具体而言…

Unity 导入MRTK,使用URP 升级材质,MRTK的材质还是洋红色

控制台显示信息 ToggleBackground material was not upgraded. There’s no upgrader to convert Mixed Reality Toolkit/Standard shader to selected pipeline UnityEditor.Rendering.Universal.UniversalRenderPipelineMaterialUpgrader:UpgradeProjectMaterials() (at 点击…

独立游戏《星尘异变》UE5 C++程序开发日志6——实现存档和基础设置系统

目录 一、存档类 1.创建一个SaveGame类 2.存储关卡内数据 3.加载关卡数据 4.关于定时器 5.存储全局数据 6.加载全局数据 二、存档栏 1.存档栏的数据结构 2.创建新存档 3.覆盖已有存档 4.删除存档 三、游戏的基础设置 1.存储游戏设置的数据结构 2.初始化设置 3.…

在国产芯片上实现YOLOv5/v8图像AI识别-【1.3】YOLOv5的介绍及使用(训练、导出)更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案&#xff0c;专栏中实现了YOLOv5/v8在国产化芯片上的使用部署&#xff0c;并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频&#xff1a;https://www.bilibili.com/video/BV1or421T74f 数据…

5.5 软件工程-系统测试

系统测试 - 意义和目的 系统测试 - 原则 系统测试 - 测试过程 系统测试 - 测试策略 系统测试 - 测试方法 真题 系统测试 - 测试用例设计 黑盒测试 白盒测试 真题 系统测试 - 调试 系统测试 - 软件度量 真题

vue 实现打字机效果

打字机效果组件&#xff0c;支持像打字机一样模仿键入文本。支持vue 插值语法和表格等打印 ps: 灵感来着于vue-type-writer 但是 这个组件过于简单 就自己整了一个 一、预览 二、代码 组件&#xff1a; <template><div :style"{ visibility: visibility }&qu…

AI 模型本地推理 - YYPOLOE - Python - Windows - GPU - 吸烟检测(目标检测)- 有配套资源直接上手实现

Python 运行 - GPU 推理 - windows 环境准备python 代码 环境准备 FastDeploy预编译库下载 conda config --add channels conda-forge && conda install cudatoolkit11.2 cudnn8.2 pip install fastdeploy_gpu_python-0.0.0-cp38-cp38-win_amd64.whlpython 代码 impo…

虚拟机的状态更新

文章目录 虚拟机的更新一、检查虚拟机的配置1.已连接状态2. 保证镜像源挂载 二、进行更新三、其余事项 虚拟机的更新 虚拟机的更新是确保系统软件包和库的更新&#xff0c;以获得最新的修复和改进&#xff1b;如果长期没有打开单机或者集群&#xff0c;可以考虑先进行一次更新…

Artix7系列FPGA实现SDI视频编解码,基于GTP高速接口,提供3套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案在Xilinx--Kintex系列FPGA上的应用本方案在Xilinx--Zynq系列FPGA上的应用 3、详细设计方案设计原理框图SDI 输入设备Gv8601a 均衡器GTP 高速接口-->解串与串化SMPTE SD/HD/3G SDI IP核BT1120转…