Qwen-Agent:Qwen2加持,强大的多代理框架 - 函数调用、代码解释器以及 RAG!

news2024/10/7 15:28:07

cover_image
✨点击这里✨:🚀原文链接:(更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号!)

Qwen-Agent:Qwen2加持,强大的多代理框架 - 函数调用、代码解释器以及 RAG!

🌟 Qwen-Agent是一个开发框架。开发者可基于该框架开发 Agent应用
,充分利用基于通义千问模型(Qwen)的指令遵循、工具使用、规划、记忆能力。该项目也提供了浏览器助手、代码解释器、自定义助手等示例应用。

Github:https://github.com/QwenLM/Qwen-Agent

Hello,大家好,我是Aitrainee,

阿里巴巴最近发布了新的 Qwen 2 大型语言模型和升级后的 Qwen Agent 框架,这个框架集成了 Qwen 2 模型,支持
函数调用、代码解释、RAG(检索增强生成) 等功能,还包含了 Chrome 扩展。Qwen Agent 能处理从 8K 到 100 万
tokens 的文档,性能超越了 RAG 和原生长上下文模型,并用于生成训练新长上下文模型的数据。

Qwen Agent 框架可用于创建复杂的 AI 代理,展示了其强大的任务处理能力。新框架采用四步法开发:初始模型开发、代理开发、数据综合和模型微调。通过
RAG 算法处理长文档,将文档分成小块,保留最相关的部分,从而提升上下文处理能力。

具体步骤包括检索增强生成、逐块阅读和逐步推理等三层复杂性,使用 RAG 算法处理并优化文档片段,以便提供准确的上下文理解和生成能力。实验表明,Qwen
Agent 能显著提升模型的上下文长度和性能。

建议观看之前的视频以获取更多实用示例,Qwen 2 是目前最强大的开源语言模型之一,推荐尝试使用。框架操作简便,有详细教程帮助用户快速上手。

这一框架的目标是创建复杂的AI代理,其表现优于其他代理框架。 下面视频
展示了如何利用Qwen-2模型及其8K上下文窗口理解包含百万级词汇的文档,这比RAG和原生长上下文模型表现更好。

Qwen-Agent 开发步骤

  1. 1. 初始模型 :从8K上下文聊天模型开始。

  2. 2. 代理开发 :使用模型开发强大的代理,处理百万上下文。

  3. 3. 数据合成 :合成细化数据,进行自动过滤确保质量。

  4. 4. 模型微调 :利用合成数据微调预训练模型,最终得到强大的聊天机器人。

分层复杂性

Qwen-Agent在构建过程中分为三层复杂性,每层在前一层基础上构建:

  1. 1. 增强型信息检索生成(RAG) :使用RAG算法将上下文分成不超过512词的块,仅保留最相关的内容。

  2. 2. 逐块阅读 :采用暴力策略,每512词块检查相关性,保留最相关的内容生成答案。

  3. 3. 逐步推理 :使用多跳推理回答复杂问题,采用工具调用代理解决复杂查询。

下面提供官方的 文档介绍、相关资源、部署教程 等,进一步支撑你的行动,以提升本文的帮助力。

![](https://res.wx.qq.com/t/wx_fed/we-

emoji/res/v1.3.10/assets/newemoji/Party.png) 开始上手

安装

  • • 安装稳定的版本:

    pip install -U qwen-agent

  • • 或者,直接从源代码安装最新的版本:

    git clone https://github.com/QwenLM/Qwen-Agent.git
    cd Qwen-Agent
    pip install -e ./

如需使用内置GUI支持,请安装以下可选依赖项:

pip install -U "gradio>=4.0" "modelscope-studio>=0.2.1"

准备:模型服务

Qwen-Agent支持接入阿里云 DashScope 服务提供的Qwen模型服务,也支持通过OpenAI API方式接入开源的Qwen模型服务。

  • • 如果希望接入DashScope提供的模型服务,只需配置相应的环境变量 DASHSCOPE_API_KEY 为您的DashScope API Key。

  • • 或者,如果您希望部署并使用您自己的模型服务,请按照Qwen2的README中提供的指导进行操作,以部署一个兼容OpenAI接口协议的API服务。具体来说,请参阅 vLLM 一节了解高并发的GPU部署方式,或者查看 Ollama 一节了解本地CPU(+GPU)部署。

快速开发

框架提供了大模型(LLM,继承自 class BaseChatModel ,并提供了 Function Calling
功能)和工具(Tool,继承自 class BaseTool )等原子组件,也提供了智能体(Agent)等高级抽象组件(继承自 class Agent )。

以下示例演示了如何增加自定义工具,并快速开发一个带有设定、知识库和工具使用能力的智能体:

import pprint  
import urllib.parse  
import json5  
from qwen_agent.agents import Assistant  
from qwen_agent.tools.base import BaseTool, register_tool  
  
  
# 步骤 1(可选):添加一个名为 `my_image_gen` 的自定义工具。  
@register_tool('my_image_gen')  
class MyImageGen(BaseTool):  
    # `description` 用于告诉智能体该工具的功能。  
    description = 'AI 绘画(图像生成)服务,输入文本描述,返回基于文本信息绘制的图像 URL。'  
    # `parameters` 告诉智能体该工具有哪些输入参数。  
    parameters = [{  
        'name': 'prompt',  
        'type': 'string',  
        'description': '期望的图像内容的详细描述',  
        'required': True  
    }]  
  
    def call(self, params: str, **kwargs) -> str:  
        # `params` 是由 LLM 智能体生成的参数。  
        prompt = json5.loads(params)['prompt']  
        prompt = urllib.parse.quote(prompt)  
        return json5.dumps(  
            {'image_url': f'https://image.pollinations.ai/prompt/{prompt}'},  
            ensure_ascii=False)  
  
  
# 步骤 2:配置您所使用的 LLM。  
llm_cfg = {  
    # 使用 DashScope 提供的模型服务:  
    'model': 'qwen-max',  
    'model_server': 'dashscope',  
    # 'api_key': 'YOUR_DASHSCOPE_API_KEY',  
    # 如果这里没有设置 'api_key',它将读取 `DASHSCOPE_API_KEY` 环境变量。  
  
    # 使用与 OpenAI API 兼容的模型服务,例如 vLLM 或 Ollama:  
    # 'model': 'Qwen2-7B-Chat',  
    # 'model_server': 'http://localhost:8000/v1',  # base_url,也称为 api_base  
    # 'api_key': 'EMPTY',  
  
    # (可选) LLM 的超参数:  
    'generate_cfg': {  
        'top_p': 0.8  
    }  
}  
  
# 步骤 3:创建一个智能体。这里我们以 `Assistant` 智能体为例,它能够使用工具并读取文件。  
system_instruction = '''你是一个乐于助人的AI助手。  
在收到用户的请求后,你应该:  
- 首先绘制一幅图像,得到图像的url,  
- 然后运行代码`request.get`以下载该图像的url,  
- 最后从给定的文档中选择一个图像操作进行图像处理。  
用 `plt.show()` 展示图像。  
你总是用中文回复用户。'''  
tools = ['my_image_gen', 'code_interpreter']  # `code_interpreter` 是框架自带的工具,用于执行代码。  
files = ['./examples/resource/doc.pdf']  # 给智能体一个 PDF 文件阅读。  
bot = Assistant(llm=llm_cfg,  
                system_message=system_instruction,  
                function_list=tools,  
                files=files)  
  
# 步骤 4:作为聊天机器人运行智能体。  
messages = []  # 这里储存聊天历史。  
while True:  
    # 例如,输入请求 "绘制一只狗并将其旋转 90 度"。  
    query = input('用户请求: ')  
    # 将用户请求添加到聊天历史。  
    messages.append({'role': 'user', 'content': query})  
    response = []  
    for response in bot.run(messages=messages):  
        # 流式输出。  
        print('机器人回应:')  
        pprint.pprint(response, indent=2)  
    # 将机器人的回应添加到聊天历史。  
    messages.extend(response)

除了使用框架自带的智能体实现(如 class Assistant ),您也可以通过继承 class Agent
来自行开发您的智能体实现。更多使用示例,请参阅 examples 目录。

FAQ

支持函数调用(也称为工具调用)吗?

支持,LLM类提供了 函数调用 的支持。此外,一些Agent类如FnCallAgent和ReActChat也是基于函数调用功能构建的。

如何让AI基于超长文档进行问答?

我们已发布了一个 快速的RAG解决方案 ,以及一个虽运行成本较高但 准确度较高的智能体
,用于在超长文档中进行问答。它们在两个具有挑战性的基准测试中表现出色,超越了原生的长上下文模型,同时更加高效,并在涉及100万字词上下文的“大海捞针”式单针查询压力测试中表现完美。欲了解技术细节,请参阅
博客 。

应用:BrowserQwen

BrowserQwen 是一款基于 Qwen-Agent 构建的浏览器助手。如需了解详情,请参阅其 文档 。

文档:https://pypi.org/project/qwen-agent/

博客:https://qwenlm.github.io/blog/qwen-agent

知音难求,自我修炼亦艰

抓住前沿技术的机遇,与我们一起成为创新的超级个体

(把握AIGC时代的个人力量)

**
**

** 点这里 👇 关注我,记得标星哦~ **

一键三连「分享」、「点赞」和「在看」

科技前沿进展日日相见 ~

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

预览时标签不可点

微信扫一扫
关注该公众号

轻触阅读原文

AI进修生



收藏

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

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

相关文章

全局解决SpringBoot框架中的application.properties/yml注解中文乱码问题(一劳永逸)

问题原因 Spring Boot在加载application.properties/yml配置文件时,默认使用ISO-8859-1编码。这种编码方式并不支持中文字符,因此当配置文件中包含中文字符时,就会出现乱码,现象如下: 问题解决 本解决方法是全局设置…

最快安装zabbix

部署zabbix 6.x 建议使用红帽系统。 https://download.rockylinux.org/pub/rocky/8/isos/x86_64/Rocky-8.9-x86_64-minimal.iso1> 配置安装yum源 [rootzabbix ~]# yum install https://mirrors.huaweicloud.com/zabbix/zabbix/6.2/rhel/8/x86_64/zabbix-release-6.2-3.el8…

PMS助力制造企业高效运营︱PMO大会

全国PMO专业人士年度盛会 北京易贝恩项目管理科技有限公司副总经理朱洪泽女士受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“PMS助力制造企业高效运营”。大会将于6月29-30日在北京举办,敬请关注! 议题简要: …

DeepDriving | CUDA编程-05:流和事件

本文来源公众号“DeepDriving”,仅用于学术分享,侵权删,干货满满。 原文链接:CUDA编程-05:流和事件 1 CUDA流 在CUDA中有两个级别的并发:内核级并发和网格级并发。前面的文章DeepDriving | CUDA编程-04&…

基于System-Verilog点亮LED灯

文章目录 一、System-Verilog介绍1.1System-Verilog 二、简单的语法介绍2.1接口实例2.2全局声明和语句实例2.3时间单位和精度2.4用户定义的类型2.5 枚举类型 三、流水灯参考 一、System-Verilog介绍 1.1System-Verilog SystemVerilog是一种硬件描述和验证语言(HDV…

数据分析必备:一步步教你如何用matplotlib做数据可视化(2)

1、Matplotlib Anaconda Anaconda是Python和R编程语言的免费开源发行版,用于大规模数据处理,预测分析和科学计算。 该分发使包管理和部署变得简单容易。 Matplotlib和许多其他有用的(数据)科学工具构成了分发的一部分。 包版本由包管理系统Conda管理。 …

50【Aseprite 作图】模糊工具 笔刷

1 模糊工具 2 笔刷 然后 选中 后 Ctrl B,就变成笔刷了 可以按住shift ,像画一条线一样 或者用矩形、圆形工具、油漆桶工具 在上方可以选择笔刷的不同形式,如果是“图案与来源对齐”,就是来源不变,笔刷不会覆盖之前…

Vue3【十五】标签的Ref属性

Vue3【十五】标签的Ref属性 标签的ref属性 用于注册模板引用 用在dom标签上&#xff0c;获取的是dom节点 用在组件上&#xff0c;获取的是组件实例对象 案例截图 目录结构 代码 app.vue <template><div class"app"><h1 ref"title2">你…

uniapp开发微信小程序问题汇总

1. 自定义校验规则validateFunction失效 2. 微信小程序不支持<Br>换行 在 <text></text> 标签中使用\n(必须 text 标签&#xff0c;view 标签无效 ) 3. 微信小程序无法使用本地静态资源图片的解决方法 (1) 将图片上传到服务器&#xff0c;小程序访问该图片…

sql优化之利用聚簇索引减少回表次数:limit 100000,10

1. 问题描述 产品&#xff1a;我要对订单列表页做一个分页功能&#xff0c;每页10条数据&#xff0c;商家可以根据金额过滤订单 技术&#xff1a;好的&#xff0c;我写一个sql实现分页&#xff0c;x表示偏移页数&#xff0c;自测limit 10,10耗时200ms&#xff1a; SELECT * …

C# WPF入门学习主线篇(二十三)—— 控件模板(ControlTemplate)和数据模板(DataTemplate)

C# WPF入门学习主线篇&#xff08;二十三&#xff09;—— 控件模板&#xff08;ControlTemplate&#xff09;和数据模板&#xff08;DataTemplate&#xff09; 在WPF开发中&#xff0c;控件模板&#xff08;ControlTemplate&#xff09;和数据模板&#xff08;DataTemplate&am…

Opencv基本操作

Opencv基本操作 导入并使用opencv进行图像与视频的基本处理 opencv读取的格式是BGR import cv2 #opencv读取的格式是BGR import numpy import matplotlib.pyplot as plt %matplotlib inline图像读取 通过cv2.imread()来加载指定位置的图像信息。 img cv2.imread(./res/ca…

Tomcat基础详解

第一篇&#xff1a;Tomcat基础篇 lecture&#xff1a;邓澎波 一、构建Tomcat源码环境 工欲善其事必先利其器&#xff0c;为了学好Tomcat源码&#xff0c;我们需要先在本地构建一个Tomcat的运行环境。 1.源码环境下载 源码有两种下载方式&#xff1a; 1.1 官网下载 https://…

联想正式发布全栈算力基础设施新品,加速筑基AI 2.0时代

6月14日&#xff0c;以“异构智算 稳定高效”为主题的联想算力基础设施新品发布会在北京成功举办。 据「TMT星球」了解&#xff0c;在与会嘉宾和合作伙伴的见证下&#xff0c;联想正式发布率先搭载英特尔至强 6能效核处理器的联想问天WR5220 G5、联想ThinkSystem SR630 V4、联…

Qt项目天气预报(2) - 重写事件函数

鼠标右键实现退出界面 知识点QMenu: QMenu 弹出对话框 --> 相对QMessageBox 更加轻量点 QMenu是Qt库中用于创建弹出式菜单的类&#xff0c;它通常出现在应用程序的顶部菜单栏、按钮的右键菜单或自定义上下文菜单中。以下是关于QMenu的详细介绍&#xff1a; 1. 类的基本特…

apt和apt-get有什么区别?内含常用命令以及软件源配置

有时候我们上网找与Linux相关的资料的时候&#xff0c;经常会需要安装一些软件包&#xff0c;找到的一些文章会贴出命令我们直接去命令行里执行就能一键下载安装&#xff0c;然后这些命令中逃不开的就是apt和apt-get。 那么apt和apt-get有什么区别呢&#xff1f; 首先我们先了…

力扣 SQL题目

185.部门工资前三高的所有员工 公司的主管们感兴趣的是公司每个部门中谁赚的钱最多。一个部门的 高收入者 是指一个员工的工资在该部门的 不同 工资中 排名前三 。 编写解决方案&#xff0c;找出每个部门中 收入高的员工 。 以 任意顺序 返回结果表。 返回结果格式如下所示。 …

照明灯具哪个品牌好,一文详细带你了解照明灯具种类有哪些

在孩子学习过程中&#xff0c;有一样物品的重要性不容忽视&#xff0c;那就是一盏提供舒适光源的照明灯具。那么照明灯具哪个品牌好&#xff1f;面对不断增加的学业负担&#xff0c;孩子们经常需要在夜晚借助台灯的光亮进行学习&#xff0c;这已经成为了家庭生活中普遍的情景。…

LVS工作模式详解,NAT全方位剖析

请求到达&#xff1a; 当用户请求到达Director Server&#xff08;负载均衡服务器&#xff09;时&#xff0c;数据包会先到达内核空间的PREROUTING链。此时&#xff0c;数据包的源IP为CIP&#xff08;Client IP&#xff09;&#xff0c;目标IP为VIP&#xff08;Virtual IP&…

主窗体设计

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 Python、QT与PyCharm配置完成后&#xff0c;接下来需要对快手爬票的主窗体进行设计&#xff0c;首先需要创建主窗体外层为&#xff08;红色框内&…