Qwen智能体qwen_agent与Assistant功能初探

Qwen智能体qwen_agent与Assistant功能初探

一、Qwen智能体框架概述

Qwen(通义千问)智能体框架是阿里云推出的新一代AI智能体开发平台,其核心模块qwen_agent.agent提供了一套完整的智能体构建解决方案。该框架通过模块化设计,将LLM(大语言模型)能力与专业工具链相结合,支持开发者快速构建具备复杂问题处理能力的AI助手。

二、qwen_agent核心架构

1. 分层设计理念

  • 基础层:封装了Qwen大模型的基础推理能力
  • 工具层:集成搜索引擎、代码执行、文档解析等工具
  • 控制层:实现任务规划、工具调度和结果验证
  • 交互层:提供多轮对话管理和上下文保持

2. 关键技术特性

from qwen_agent.agent import Agent# 典型初始化示例
agent = Agent(llm="qwen-max",  # 支持不同规模的模型选择tools=['web_search', 'code_interpreter'],  # 可插拔工具集system_message="你是一个专业数据分析助手"  # 角色设定
)

三、Assistant功能详解

1. 多模态任务处理

  • 文档解析:支持PDF/Word/Excel等格式的深度理解
  • 表格处理:自动提取结构化数据并执行分析
  • 图像理解:结合Qwen-VL多模态模型实现图文交互

2. 复杂任务分解,智能选择不同function。

@register_tool('exc_sql')
class ExcSQLTool(BaseTool):
bot = Assistant(llm=llm_cfg,name='电商销售助手',description='订单查询与订单分析',system_message=system_prompt,function_list=['exc_sql'],  # 只传工具名字符串
)

四、典型应用场景

  • 智能客服:处理80%以上标准咨询,转人工率降低60%
  • 数据分析:将自然语言需求自动转化为SQL/Python代码
  • 知识管理:构建企业专属知识库问答系统

五、完整代码示例

本示例代码是打通我自己笔记本上的虚机和自建的oracle数据库,模拟了一个电商销售助手的功能.

数据库orders表如下:

Python代码如下:

# 1.导入必要的库
import os
import asyncio
from typing import Optional
import dashscope
from qwen_agent.agents import Assistant
from qwen_agent.gui import WebUI
import pandas as pd
from sqlalchemy import create_engine,text
from sqlalchemy.exc import SQLAlchemyError
from qwen_agent.tools.base import BaseTool, register_tool
#测试oracle连接db_user = "dbtest"
db_password = "test"
db_host = "192.168.43.11:1521"
service_name = "FREEPDB1"
# 1.连接字符串oracle_connection_string = f"oracle+cx_oracle://{db_user}:{db_password}@{db_host}/?service_name={service_name}"# 创建SQLAlchemy引擎try:engine = create_engine(oracle_connection_string)connection = engine.connect()print("数据库连接成功!")result =connection.execute(text("SELECT * FROM products FETCH FIRST 5 ROWS ONLY"))# 转换为DataFramedf = pd.DataFrame(result.fetchall(), columns=result.keys())print(df)  # 以表格形式打印connection.close()
except SQLAlchemyError as e:print(f"数据库连接失败: {e}")

数据库测试结果:

数据库连接成功!product_id  category_id product_name     product_desc  price  stock  sales  \
0       10001       100101        智能手机X  最新款智能手机,6.5英寸屏幕   5999    100     50   
1       10002       100101        智能手机Y   高性价比手机,6.1英寸屏幕   2999    200    120   
2       10003       100101        智能手机Z  入门级智能手机,5.8英寸屏幕   1999    150     80   
3       10004       100102        轻薄笔记本  超薄设计,高性能,13.3英寸   8999     50     30   
4       10005       100102        游戏笔记本    高性能游戏本,15.6英寸  12999     30     15   create_time update_time  status  
0  2022-01-01  2022-06-01       1  
1  2022-01-05  2022-06-05       1  
2  2022-01-10  2022-06-10       1  
3  2022-01-15  2022-06-15       1  
4  2022-01-20  2022-06-20       1  

主体代码:

# 配置 DashScope
dashscope.api_key = os.getenv('DASHSCOPE_API_KEY', '')  # 从环境变量获取 API Key
dashscope.timeout = 30  # 设置超时时间为 30 秒# ====== 门票助手 system prompt 和函数描述 ======
system_prompt = """我是电商销售助手,以下是关于电商销售订单表orders,货品表order_items和客户表users的相关字段,我可能会编写对应的SQL,对数据进行查询
-- 电商销售订单表
CREATE TABLE "ORDERS" (	"ORDER_ID" NUMBER, "ORDER_NO" VARCHAR2(50) NOT NULL ENABLE, "USER_ID" NUMBER NOT NULL ENABLE, "ADDRESS_ID" NUMBER NOT NULL ENABLE, "TOTAL_AMOUNT" NUMBER(10,2) NOT NULL ENABLE, "PAYMENT_AMOUNT" NUMBER(10,2) NOT NULL ENABLE, "FREIGHT_AMOUNT" NUMBER(10,2) DEFAULT 0, "ORDER_STATUS" NUMBER(1,0) DEFAULT 0, "PAYMENT_TIME" DATE, "DELIVERY_TIME" DATE, "RECEIVE_TIME" DATE, "CREATE_TIME" DATE DEFAULT SYSDATE, PRIMARY KEY ("ORDER_ID"))--货品表
CREATE TABLE "ORDER_ITEMS" (	"ITEM_ID" NUMBER, "ORDER_ID" NUMBER NOT NULL ENABLE, "PRODUCT_ID" NUMBER NOT NULL ENABLE, "PRODUCT_NAME" VARCHAR2(100) NOT NULL ENABLE, "PRODUCT_IMAGE" VARCHAR2(200), "PRICE" NUMBER(10,2) NOT NULL ENABLE, "QUANTITY" NUMBER NOT NULL ENABLE, "TOTAL_PRICE" NUMBER(10,2) NOT NULL ENABLE, PRIMARY KEY ("ITEM_ID"))--客户表
CREATE TABLE USERS" (	"USER_ID" NUMBER, "USERNAME" VARCHAR2(50) NOT NULL ENABLE, "PASSWORD" VARCHAR2(100) NOT NULL ENABLE, "EMAIL" VARCHAR2(100) NOT NULL ENABLE, "PHONE" VARCHAR2(20), "REGISTER_DATE" DATE DEFAULT SYSDATE, "STATUS" NUMBER(1,0) DEFAULT 1, PRIMARY KEY ("USER_ID")
)"""# ====== exc_sql 工具类实现 ======
@register_tool('exc_sql')
class ExcSQLTool(BaseTool):"""SQL查询工具,执行传入的SQL语句并返回结果。功能:- 执行SQL查询并返回结果- 支持数据库连接和错误处理- 限制返回结果数量为10行参数:- sql_input: SQL查询语句- database: 数据库名称(可选,默认为'ubr')返回:- 查询结果(最多10行,以markdown格式返回)"""description = '对于生成的SQL,进行SQL查询'parameters = [{'name': 'sql_input','type': 'string','description': '生成的SQL语句','required': True}]def call(self, params: str, **kwargs) -> str:"""执行SQL查询并返回结果参数:- params: JSON格式的参数字符串,包含sql_input和可选的database返回:- 查询结果(最多10行,以markdown格式返回)"""import jsonargs = json.loads(params)sql_input = args['sql_input']database = args.get('database', 'ubr')# 创建数据库连接engine = create_engine(oracle_connection_string)try:df = pd.read_sql(sql_input, engine)# 返回前10行,防止数据过多return df.head(10).to_markdown(index=False)except Exception as e:return f"SQL执行出错: {str(e)}"# ====== 初始化门票助手服务 ======
def init_agent_service():"""初始化电商销售助手服务功能:- 配置通义千问模型参数- 初始化助手实例- 注册SQL查询工具- 设置助手名称和描述返回:- 配置好的助手实例"""llm_cfg = {'model': 'qwen-turbo-2025-04-28','timeout': 30,'retry_count': 3,}try:bot = Assistant(llm=llm_cfg,name='电商销售助手',description='订单查询与订单分析',system_message=system_prompt,function_list=['exc_sql'],  # 只传工具名字符串)print("助手初始化成功!")return botexcept Exception as e:print(f"助手初始化失败: {str(e)}")raisedef app_tui():"""终端交互模式功能:- 支持连续对话- 支持文件输入- 实时响应用户查询- 异常处理和错误提示"""try:# 初始化助手bot = init_agent_service()# 对话历史messages = []while True:try:# 获取用户输入query = input('user question: ')# 获取可选的文件输入file = input('file url (press enter if no file): ').strip()# 输入验证if not query:print('user question cannot be empty!')continue# 构建消息if not file:messages.append({'role': 'user', 'content': query})else:messages.append({'role': 'user', 'content': [{'text': query}, {'file': file}]})print("正在处理您的请求...")# 运行助手并处理响应response = []for response in bot.run(messages):print('bot response:', response)messages.extend(response)except Exception as e:print(f"处理请求时出错: {str(e)}")print("请重试或输入新的问题")except Exception as e:print(f"启动终端模式失败: {str(e)}")def app_gui():"""图形界面模式功能:- 基于WebUI提供图形界面- 预设常用查询建议- 支持实时对话- 异常处理和错误提示"""try:print("正在启动 Web 界面...")# 初始化助手bot = init_agent_service()# 配置聊天界面,列举3个典型门票查询问题chatbot_config = {'prompt.suggestions': [               '帮我查看订单金额排名','帮我从多到小列出前5位购买最多的货物','请帮我查询客户订单金额排名前5的订单信息,包括订单号,订的货物清单以及客户姓名','请帮我查询客户订单金额排名前5的订单信息,包括订单号,订的货物清单以及客户姓名,请按订单为单位显示,一张订单有多个货物的,将货物名称罗列出来']}print("Web 界面准备就绪,正在启动服务...")# 启动 Web 界面WebUI(bot,chatbot_config=chatbot_config).run()except Exception as e:print(f"启动 Web 界面失败: {str(e)}")print("请检查网络连接和 API Key 配置")if __name__ == '__main__':# 运行模式选择app_gui()          # 图形界面模式(默认) 

默认运行图形界面

正在启动 Web 界面...
助手初始化成功!
Web 界面准备就绪,正在启动服务...
* Running on local URL:  http://127.0.0.1:7860

点开链接,初始化界面如下
在这里插入图片描述
在这里插入图片描述

可以看到它的自动纠错功能
在这里插入图片描述

友情提示你的查询可能有问题:

在这里插入图片描述
如此复杂的SQL,它能生成!

SELECT o.ORDER_NO, LISTAGG(oi.PRODUCT_NAME, ', ') WITHIN GROUP (ORDER BY oi.ITEM_ID) AS product_list, u.USERNAME, o.TOTAL_AMOUNT FROM ORDERS o JOIN ORDER_ITEMS oi ON o.ORDER_ID = oi.ORDER_ID JOIN USERS u ON o.USER_ID = u.USER_ID GROUP BY o.ORDER_NO, u.USERNAME, o.TOTAL_AMOUNT ORDER BY o.TOTAL_AMOUNT DESC FETCH FIRST 5 ROWS ONLY"

在这里插入图片描述

六、Qwen智能体总结

优点​:模块化架构支持灵活扩展,集成多工具链(搜索/代码/文档处理),具备复杂任务分解和动态学习能力,企业级场景适配性强,支持多模态交互。
缺点​:工具配置复杂度较高,长任务处理效率依赖模型性能,定制开发需技术基础,实时性较专用系统稍弱。

同类产品

  • OpenAI的Assistant API(功能相似但更封闭)
  • LangChain(更开发者导向但集成度低)
  • Microsoft Copilot Studio(企业集成强但灵活性弱)

发展动向

  1. 强化多智能体协作与竞合机制(目前google正在推A2A,Agent to Agent)
  2. 开源生态建设(对标LangChain)

*** Qwen在平衡灵活性与开箱即用体验上优势明显,正快速追赶国际头部产品。***

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

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

相关文章

vue数据可视化开发常用库

一、常用数据可视化库 1. ECharts 特点&#xff1a;功能强大&#xff0c;支持多种图表类型&#xff0c;社区活跃。适用场景&#xff1a;复杂图表、大数据量、3D 可视化。安装&#xff1a;npm install echarts示例&#xff1a;<template><div ref"chart" c…

小红书视频无水印下载方法

下载小红书&#xff08;RED/Xiaohongshu&#xff09;视频并去除水印可以通过以下几种方法实现&#xff0c;但请注意尊重原创作者版权&#xff0c;下载内容仅限个人使用&#xff0c;避免侵权行为。 方法一&#xff1a;使用在线解析工具&#xff08;推荐&#xff09; 复制视频链…

Qt读写XML文档

XML 结构与概念简介 XML&#xff08;可扩展标记语言&#xff09; 是一种用于存储和传输结构化数据的标记语言。其核心特性包括&#xff1a; 1、树状结构&#xff1a;XML 数据以层次化的树形结构组织&#xff0c;包含一个根元素&#xff08;Root Element&#xff09;&#xff…

lambda 表达式

C 的 lambda 表达式 是一种轻量、内联的函数对象写法&#xff0c;广泛用于标准算法、自定义回调、事件响应等场景。它简洁且强大。以下将系统、详细地讲解 lambda 的语法、捕获规则、应用技巧和实际使用场景。 &#x1f9e0; 一、基本语法 [捕获列表](参数列表) -> 返回类型…

Web端项目系统访问页面很慢,后台数据返回很快,网络也没问题,是什么导致的呢?

Web端访问缓慢问题诊断指南(测试工程师专项版) ——从浏览器渲染到网络层的全链路排查方案 一、问题定位黄金法则(前端性能四象限) 1. [网络层] 数据返回快 ≠ 资源加载快(检查Content Download时间) 2. [渲染层] DOM复杂度与浏览器重绘(查看FPS指标) 3. [执行层…

Docker网络模式深度解析:Bridge与Host模式对比及实践指南

#作者&#xff1a;邓伟 文章目录 一、引言二、Bridge模式&#xff08;网桥模式&#xff09;2.1 工作原理2.2 核心特性2.4 适用场景2.5 优缺点分析 三、Host模式3.1 工作原理3.2 核心特性3.3 配置方法3.4 适用场景3.5 优缺点分析 四、网桥模式与Host模式对比五、最佳实践与注意…

React+Taro选择日期组件封装

话不多说&#xff0c;直接上效果 1.页面渲染时间模块 {this.renderCalendarPopup()}2.引入时间组件弹层&#xff0c;state中加入showPopup(控制什么时候展示时间选择弹层)&#xff0c;time(选择后的时间值) private renderCalendarPopup () > {const { showPopup, time…

备战蓝桥杯国赛第一天-atcoder-beginner-contest404

B. 因为只有四种情况&#xff0c;旋转90/180/270度后替换&#xff0c;直接替换&#xff0c;暴力即可 C. 循环图的定义是每个点出度为2&#xff0c;而且只有一个环的&#xff0c;所以先判断出度&#xff0c;再判断是否成环 #include <bits/stdc.h> using namespace st…

Linux59 SSH配置前瞻 JumpServer双网卡ping通

为什么Ping这个IP地址Ping得通 本地址 [rootlocalhost network-scripts]# cat ifcfg-ens33 iTYPEEthernet BOOTPROTOnone DEFROUTEyes DEVICEens33 ONBOOTno IPADDR192.168.235.4 NETMASK255.255.255.0 GATEWAY192.168.235.2 DNS1114.114.114.114 [rootlocalhost network-scrip…

Spring框架(1)

Spring框架是Java企业级开发中最受欢迎的框架之一&#xff0c;它通过简化开发流程、降低耦合度&#xff0c;让开发者能够更专注于业务逻辑的实现。本文将带你了解Spring框架的核心概念和基本用法。 一、Spring框架简介 Spring是一个轻量级的开源Java开发框架&#xff0c;由Ro…

QWindowkit 实现无边框,阴影支持系统边栏缩放等功能

一.感谢作者,QWindowkit 源码地址: GitHub - stdware/qwindowkit: Cross-platform frameless window framework for Qt. Support Windows, macOS, Linux. 二.集成pro工程: QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets CONFIG += c++17 # Yo…

-bash: /usr/local/mysql/bin/mysqld: No such file or directory

-bash: /usr/local/mysql/bin/mysqld: No such file or directory 1.Mysql安装常见的报错信息1.1.报错信息1.2.分析问题1.3.解决问题 endl 1.Mysql安装常见的报错信息 1.1.报错信息 [rootRocky9-12 ~]#echo $PATH /root/.local/bin:/root/bin:/usr/local/mysql/bin:/usr/loca…

【愚公系列】《Manus极简入门》027-数据故事讲述师:“数据叙事魔法师”

&#x1f31f;【技术大咖愚公搬代码&#xff1a;全栈专家的成长之路&#xff0c;你关注的宝藏博主在这里&#xff01;】&#x1f31f; &#x1f4e3;开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主&#xff01; &#x1f…

PostgreSQL可见性映射VM

1.可见性映射 清理过程的代价高昂&#xff0c;为了减小清理的开销&#xff0c;在PostgreSQL 8.4版中引入了VM。 VM的基本概念很简单。 每个表都拥有各自的可见性映射&#xff0c;用于保存表文件中每个页面的可见性。 页面的可见性确定了每个页面是否包含死元组。清理过程可以…

LeapVAD:通过认知感知和 Dual-Process 思维实现自动驾驶飞跃——论文阅读

《LeapVAD: A Leap in Autonomous Driving via Cognitive Perception and Dual-Process Thinking》2025年1月发表&#xff0c;来自浙江大学、上海AI实验室、慕尼黑工大、同济大学和中科大的论文。 尽管自动驾驶技术取得了显著进步&#xff0c;但由于推理能力有限&#xff0c;数…

二分系列题

1. 搜索插入位置 /*** 查找插入的位置&#xff1a;返回第一个大于等于 target 的索引&#xff1b;* 如果 target 大于所有元素&#xff0c;则返回数组长度&#xff08;即插入到末尾&#xff09;*/ class Solution {public int searchInsert(int[] nums, int target) {int left …

Octave 简介:一款强大的开源科学计算工具

引言 在科学计算、数据分析和数值模拟的领域&#xff0c;选择合适的工具对于提升工作效率和性能至关重要。虽然市面上有许多选择&#xff0c;但 GNU Octave 作为一款功能强大、开源免费的软件&#xff0c;它在科学计算中脱颖而出。如果你是学生、研究人员或开发者&#xff0c;…

TI Code Composer Studio编译时SDK报错问题解决

1. 我们使用TI的CCS&#xff08;Code Composer Studio&#xff09;编译环境编译工程时&#xff0c;首次安装很可能会遇到编译器找不到SDK的问题。 2. 当CCS编程工具找不到SDK路径时&#xff0c;会有如下报错&#xff1a; Problems窗口提示&#xff1a; Product com.ti.SIMPL…

MySQL大数据量查询优化

1.在回表数据量不大的情况下考虑增加索引&#xff0c;如果有多个筛选条件的情况下可以考虑添加联合索引&#xff0c;并且满足最佳左前缀的原则。 2.避免全表查询返回不需要的字段&#xff0c;增加磁盘io的压力 3.大表的分页查询&#xff0c;limit越大效率越低&#xff0c;可以先…

【Linux网络#5】(UDP的简单应用)DictServer(中译英字典)| ChatServer(简单聊天室)

1.中译英字典 -- DictServer 我们这里先中途插入一个趣味的翻译显示实验&#xff0c;在 EchoServer 的基础上来实现&#xff0c;大部分代码基本都没变&#xff0c;修改了一少部分代码&#xff0c;大家可以仔细看看 先给定一些等会我们要翻译的单词数据 dict.txt apple: 苹果…