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

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进修生



收藏

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

程序优化 --- arthas trace命令使用

最近在做优化,通过arthas的trace命令去观察方法内的耗时情况以便对程序进行修改. 1.启动arthas之后选择需要监测的程序 2.找到需要监测的接口,一般都是直接找service例子如下: trace 类地址.类名 方法名 (中间有空格)

【odoo15】前端自定义模态弹窗

概要 在odoo15或者在15之前,odoo前端的owl框架还没完全替换当前前端框架的时候,我们很多时候都是用js或者jq来直接操作dom,那么我们如果需要在前端用到一个模态弹窗,可以怎么解决呢? 方法1 直接用js原生的模态弹窗&am…

blender

通用设置: 仅显示/取消隐藏:数字键盘/移动视角:shift+鼠标中键Blender如何给场景添加参考图片-百度经验 (baidu.com)进入编辑模式:Tab编辑模式:点-线-面 反选:ctrl+按键重新计算面朝向:shift+n水密:+修改器:焊接连选的区别: 视窗设置 两个视图 …

拥抱数字世界|AI在娱乐行业的应用,娱乐新纪元已到来

在蓬勃发展的全球化趋势下,越来越多的厂商正在批量涌入娱乐赛道,期待能创造新的增长奇迹。随着科技的不断发展,人工智能技术正日益深入各行各业,其中媒体和娱乐行业更是迎来了一场革命性的变革。在媒体和娱乐领域展现出了巨大的潜…

Zig标准库:最全数据结构深度解析(1)

最近新闻看到17岁中专女生拿下阿里全球数学竞赛第12名。咱们学习标准库中的数据结构是和学习数学是一脉相承的,结构体很多,也非常枯燥,但是不能全面解读过一遍,你很难写出合理的代码。所以,这一章节我们开始深度解析Zi…

网站接口是怎么开发的,开发之后是怎么用的

网站接口的开发流程 1.确定接口需求 在开发接口之前我们先要知道,要开发什么样的接口,这个接口是用来干什么的,得先知道相关的需求,才能规划下一步,比如客户想要一个文章列表,那么我们就知道这个需求…

酒店民宿小程序开发,旅游业发展下的商业机遇

随着人们生活水平的日益提高,对各种娱乐方式的需求在不断上升,其中旅游成为了大众的“新宠”。旅游业的快速发展也推动了酒店民宿的蓬勃发展,打造一个便捷高效的线上酒店民宿小程序成为了至关重要的发展趋势! 如今,不…

RFID技术在农产品管理中的应用

使用RFID技术对农产品生产、加工、存储和销售的全过程进行跟踪,追溯食品的生产和加工过程,能够有效加强农产品的管理,如图7—10所示。 将RFID技术应用于农业食品安全,首先是建立完整、准确的食品供应链信息记录。借助RFID 对物体…

什么是无杂散动态范围 (SFDR)?为什么 SFDR 很重要?

有多种不同的规格可用于表征电路线性度。SFDR 指标是一种常用的规范。该指标定义为所需信号幅度与感兴趣带宽内杂散的比率(图 1)。 图 1. 显示 SFDR 指标的图表。 对于 ADC,SFDR 展示了 ADC 如何在存在大信号的情况下同时处理小信号。作为一个…

如何完美解决升级 IntelliJ IDEA 最新版之后遇到 Git 记住密码功能失效的问题

🛠️ 如何完美解决升级 IntelliJ IDEA 最新版之后遇到 Git 记住密码功能失效的问题 摘要 在这篇文章中,我们将详细探讨如何解决在升级到 IntelliJ IDEA 最新版(2024.1.3 Ultimate Edition)后遇到的 Git 记住密码功能失效的问题。…

嵌入式操作系统_2.嵌入式操作系统的一般架构

1.嵌入式操作系统的概念 嵌入式操作系统通常由硬件驱动程序、调式代理、操作系统内核、文件系统和可配置组件等功能组成,并为应用软件提供标准的API(Application Programming Interface)接口服务。 2.一般嵌入式操作系统的体系结构 从嵌入…

LeetCode 230.二叉搜索树中第K小的元素

各位看官们,大家好啊,今天这个题我用的方法时间复杂度比较高,但也是便于便于理解的一种方法,大家如果觉得的好的话,就给个免费的赞吧,谢谢大家了^ _ ^ 题目要求如图所示: 题目步骤: 1.我们可以一维数组来接…

oracle安装,导出、导入domp文件、解开oracle行级锁

下载地址: https://www.oracle.com/database/technologies/oracle19c-windows-downloads.html 然后解压,请记住你的解压地址,也就是软件安装地址, 后面还会有一个数据库存储位置,导出的domp文件就是在这里。 然后按照…

力扣hot100:31. 下一个排列

LeetCode:31. 下一个排列 字典序的大小排序: 从前往后对比,如果先出现更小字符的,字典序更小,如果有个字符串结束了,则它更小。string s "112233"和string t "1122334",…

HCIA-Datacom H12-811 题库

LDP 邻居发现有不同的实现机制和规定,下面关于LDP 邻居发现的描述错误的是: A:LDP发现机制包括LDP基本发现机制和LDP扩展发现机制 B:LDP基本发现机制可以自动发现直连在同条链路上的LDP Peers C:LDP扩展发现机制够发现…

【Hive下篇: 一篇文章带你了解表的静态分区,动态分区! 分桶!Hive sql的内置函数!复杂数据类型!hive的简单查询语句!】

前言: 💞💞大家好,我是书生♡,本篇文章主要分享的是大数据开发中hive的相关技术。连接查询!正则表达式! 虚拟列!爆炸函数!行列转换! Hive的数据压缩和数据存储…

Vue35-生命周期小结

一、8个,4对生命周期函数 第一对:数据监测、数据代理,创建之前和创建之后。 注意:不是vm的创建!!! 第二队:beforeMount和mounted 第三队:beforeUpdate和update 第四队…

【机器学习300问】118、循环神经网络(RNN)的基本结构是怎样的?

将讲解循环神经网络RNN之前,我先抛出几个疑问:为什么发明循环神经网络?它的出现背景是怎样的?这些问题可以帮助我们更好的去理解RNN。下面我来逐一解答。 一、循环神经网络诞生的背景 循环神经网络(RNN)的…

机器视觉:工业镜头的主要参数

工业镜头是图像采集系统的重要光学设备。它的作用是将目标物体的像成在相机的感光面上。 一、工业镜头原理 镜头是对光线进行调制和变换,使目标能够成像到相机的感光芯片上。将不同折射率的硝材加工成高精度的曲面,再把这些曲面进行组合后设计成能够满…

RAG工作流在高效信息检索中的应用

介绍 RAG(Retrieval Augmented Generation)是一种突破知识限制、整合外部数据并增强上下文理解的方法。 由于其高效地整合外部数据而无需持续微调,RAG的受欢迎程度正在飙升。 让我们来探索RAG如何克服LLM的挑战! LLM知识限制大…