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(企业集成强但灵活性弱)
发展动向:
- 强化多智能体协作与竞合机制(目前google正在推A2A,Agent to Agent)
- 开源生态建设(对标LangChain)
*** Qwen在平衡灵活性与开箱即用体验上优势明显,正快速追赶国际头部产品。***
相关文章:

Qwen智能体qwen_agent与Assistant功能初探
Qwen智能体qwen_agent与Assistant功能初探 一、Qwen智能体框架概述 Qwen(通义千问)智能体框架是阿里云推出的新一代AI智能体开发平台,其核心模块qwen_agent.agent提供了一套完整的智能体构建解决方案。该框架通过模块化设计,将L…...
LayerNorm vs RMSNorm 技术对比
1. 核心概念 LayerNorm (层归一化) 思想:对单个样本的所有特征维度进行归一化目标:使每个样本的特征分布 μ 0 \mu0 μ0, σ 1 \sigma1 σ1特点:同时调整均值和方差 RMSNorm (均方根归一化) 思想:基于均方根的简…...

可视化图解算法37:序列化二叉树-II
1. 题目 描述 请实现两个函数,分别用来序列化和反序列化二叉树,不对序列化之后的字符串进行约束,但要求能够根据序列化之后的字符串重新构造出一棵与原二叉树相同的树。 二叉树的序列化(Serialize)是指:把一棵二叉树按照某种遍…...

C++GO语言微服务和服务发现②
01 创建go-micro项目-查看生成的 proto文件 02 创建go-micro项目-查看生成的main文件和handler ## 创建 micro 服务 命令:micro new --type srv test66 框架默认自带服务发现:mdns。 使用consul服务发现: 1. 初始consul服务发现&…...

【Web前端开发】CSS基础
2.CSS 2.1CSS概念 CSS是一组样式设置的规则,称为层叠样式表,用于控制页面的外观样式。 使用CSS能够对网页中元素位置的排版进行像素控制,实现美化页面的效果,也能够做到页面的样式和结构分离。 2.2基本语法 通常都是ÿ…...
Google LLM prompt engineering(谷歌提示词工程指南)
文章目录 基本概念AI输出配置:调整AI的回答方式输出长度温度(Temperature)Top-K和Top-P 提示技术:让AI更好地理解你零样本提示(Zero-shot)少样本提示(Few-shot)系统提示(…...
接口出现 请求参数格式错误 的解决方法
目录 前言1. 问题所示2. 原理分析3. 解决方法前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn Java基本知识: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理…...

Git实战经验分享:深入掌握git commit --amend的进阶技巧
一、工具简介 git commit --amend是Git版本控制系统的核心补救命令,主要用于修正最近一次提交的元数据。该命令不会产生新的提交记录,而是通过覆盖原提交实现版本历史的整洁性,特别适合在本地仓库进行提交优化。 二、核心应用场景 提交信息…...

PTA:jmu-ds-最短路径
给定一个有向图,规定源点为0,求源点0到其他顶点最短路径。###你要实现的 函数接口定义: void Dijkstra(MGraph g,int v);//源点v到其他顶点最短路径 裁判测试程序样例: #include <stdio.h> #include <iostream> …...
Uniapp编写微信小程序,使用canvas进行绘图
一、canvas文档: https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API/Tutorial 二、数据绘制(单位是像素): 1、绘制文本: 文字的长度超过设置的最大宽度,文字会缩在一起 ① 填充文本…...

WEB UI自动化测试之Pytest框架学习
文章目录 前言Pytest简介Pytest安装Pytest的常用插件Pytest的命名约束Pytest的运行方式Pytest运行方式与unittest对比主函数运行命令行运行执行结果代码说明 pytest.ini配置文件方式运行(推荐)使用markers标记测试用例 pytest中添加Fixture(测…...

深入理解 iOS 开发中的 `use_frameworks!`
在使用 CocoaPods 管理 iOS 项目依赖时,开发者经常会在 Podfile 文件中看到一个配置选项:use_frameworks!。本文将详细介绍这个配置选项的含义,以及如何决定是否在项目中使用它。 一、什么是 use_frameworks! 在 CocoaPods 中引入第三方库时…...

矩阵置零算法讲解
矩阵置零算法讲解 一、问题描述 给定一个 (m \times n) 的矩阵,如果一个元素为 (0) ,则将其所在行和列的所有元素都设为 (0) 。要求使用原地算法,即在不使用额外矩阵空间的情况下完成操作。 二、解题思路 暴力解法 最直观的想法是遍历矩阵,当遇到 (0) 元素时,直接将其…...

二本计算机,毕业=失业?
我嘞个豆,二本计算机,毕业即失业?! 今天咱们聊聊普通院校计算机专业的学生未来的发展方向。有些话可能不太中听,但希望大家能理性看待。 首先得承认,对于普通双非和二本的学生来说,就业率加上…...
Java 并发编程挑战:从原理到实战的深度剖析与解决方案
Java 作为企业级应用开发的主流语言,其多线程能力是支撑高并发场景的核心。然而,线程安全、死锁、性能瓶颈等问题仍是开发者难以绕过的暗礁。本文将从 JVM 内存模型、并发工具链到实际案例,系统性揭示 Java 并发编程的挑战与解决方案…...
机器学习第六讲:向量/矩阵 → 数据表格的数学表达,如Excel表格转数字阵列
机器学习第六讲:向量/矩阵 → 数据表格的数学表达,如Excel表格转数字阵列 资料取自《零基础学机器学习》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:…...

[docker基础二]NameSpace隔离实战
目录 一 实战目的 二 基础知识 1)dd 命令详解 2)mkfs命令详解 3)df命令详解 4)mount 命令详解 5)unshare命令详解 三 实战操作一(PID隔离) 四 实战操作二(MOunt隔离) 1)创建 Mount 隔离进程 2)在新进程里边,创建空白文件&#…...

Day22打卡-复习
复习日 仔细回顾一下之前21天的内容,没跟上进度的同学补一下进度。 作业: 自行学习参考如何使用kaggle平台,写下使用注意点,并对下述比赛提交代码 泰坦尼克号人员生还预测https://www.kaggle.com/competitions/titanic/overview K…...
Express知识框架
一、核心概念 1. Express 简介 Node.js 的 Web 框架,提供 HTTP 服务器封装 轻量级但灵活,支持中间件扩展 基于路由,支持 RESTful API 和传统 MVC 架构 无内置 ORM 或模板引擎,但可集成第三方库 2. 核心对象 express() - 创建…...

uniapp + vue3 + 京东Nut动作面板组件:实现登录弹框组件(含代码、案例、小程序截图)
uniapp + vue3 + 京东Nut动作面板组件:实现登录弹框组件(含代码、案例、小程序截图) 代码示下,不再赘述。 动作面板组件:https://nutui-uniapp.netlify.app/components/feedback/actionsheet.html 项目背景 业务需求 描述: uniapp + vue3 + 京东Nut框架:实现登录弹框组…...

C++类和对象--中阶
C类和对象中阶 01. 类的6个默认成员函数 在 C 中,类有 6 个特殊的默认成员函数(不是 6 个构造函数),它们会在特定情况下由编译器自动生成。包括构造函数,析构函数,拷贝构造和赋值运算符重载,取…...
OSPF的四种特殊区域(Stub、Totally Stub、NSSA、Totally NSSA)详解
OSPF的四种特殊区域(Stub、Totally Stub、NSSA、Totally NSSA)通过限制LSA的传播来优化网络性能,减少路由表规模。以下是它们的核心区别: 1. Stub 区域(末梢区域) 允许的LSA类型:Type 1-3&#…...

数据签名在区块链中的独特应用与挑战
随着信息技术的飞速发展,分布式系统因其高效、可靠、可扩展等显著优点,在众多领域得到了极为广泛的应用。分布式系统通过网络将多个独立的计算节点连接在一起,协同完成复杂的任务,这种架构使得系统具备了强大的容错能力和负载均衡…...

数据可视化大屏——物流大数据服务平台(二)
代码分析: 物流大数据平台代码分析 这是一个基于 Bootstrap 和 ECharts 构建的物流大数据平台前端页面,设计采用了经典的三栏布局,主要展示河南省及全国的物流数据可视化内容。下面从多个维度进行分析: 1. 页面结构分析 整体采…...
5倍无损压缩+50 倍速转换HD Video 4K/8K 视频处理
各位视频处理小达人们,我跟你们说啊!有个超厉害的专业视频处理软件,叫HD Video Converter Factory Pro,简称HDVC,是WonderFox公司开发的。这软件功能老强大了,下面我给你们详细唠唠! 先说说它的…...
Vue学习百日计划-Deepseek版
阶段1:基础夯实(Day 1-30) 目标:掌握HTML/CSS/JavaScript基础,理解Vue核心概念和基础语法。 每日学习内容(2小时): HTML/CSS(Day 1-10) 学习HTML标签语义化…...

Maven 处理依赖冲突
Maven处理依赖冲突 什么是依赖冲突?如何解决?Maven自动处理依赖冲突的规则路径优先原则第一声明优先原则注意 子模块覆盖父模块父模块声明dependency子模块覆盖dependency父模块声明dependencyManagement 子模块覆盖dependency父模块声明dependencyManag…...

5.12第四次作业
实验要求:完成上图内容,要求五台路由器的环回地址均可以相互访问 AR1 AR2 AR3 AR4 AR5 AS 200 ospf配置 AR2 AR3 AR4 BGP配置 AR1(AS100) AR2(AS200) AR4 AR5(AS300) 结果...

【Lattice FPGA 开发】Diamond在线调试Reveal逻辑乱跳的解决
在Vivado中在always块中写逻辑时如果出现always块中的异步复位敏感词在块内部未使用的情况,如下例的rst: always (posedge clk or posedge rst) begin if(~tx_sense_flag)o_rd_adr < d1;else if((o_rd_adr d94) & (bit_cnt d7))o_rd_adr <…...

Go语言——kratos微服务框架使用
文章目录 一、安装依赖二、创建项目三、初始化项目四、使用git_bash命令终端运行命令五、创建自己的项目1、修改app.proto3、internal/service/app.go4、修改internal/service/service.go文件5、创建internal/biz/content.go文件6、修改internal/biz/biz.go文件7、创建internal…...