一、Qwen Code Skills
Qwen Code是一个面向开发者的智能编码助手,类似于Claude Code,随着Claude Code推出Skills功能,Qwen Code也迅速集成了相关功能,通过Skills可以将专业知识打包成可发现的功能。每个技能由一个SKILL.md文件组成,其中包含模型在相关时可以加载的指令,以及可选的支持文件如脚本和模板。
本文将基于Qwen Code Skills功能构建一个数据库查询Skill,并基于该Skill实现数据方面的问答、分析、以及能够根据数据自动生成分析页面。实验效果如下所示:
其中实验使用数据会在下方实验时说明
技能调用问答:
技能调用、分析生成报表:
生成效果:
在开始实验前,先简单介绍下Qwen Code Skills的使用过程。
1.1 Qwen Code Skills 使用介绍
官方文档地址:
https://qwenlm.github.io/qwen-code-docs/zh/users/features/skills/
Skills功能目前是是实验阶段,需要更新至最新版本的Qwen Code,并且启动时使用--experimental-skills开启Skills功能,例如:
qwen --experimental-skillsSkills技能可以放在个人名下或项目名下,个人技能在所有的项目中都可以使用用,技能信息存储在~/.qwen/skills/中,例如:
mkdir-p~/.qwen/skills/my-skill-name项目技能可以与团队共享,技能信息存储在项目内的.qwen/skills/中,例如:
mkdir-p.qwen/skills/my-skill-name在技能目录下必须要有SKILL.md描述技能,示例模版如下:
--- name: your-skill-name description: 简要描述此技能的作用以及何时使用它 --- # 你的技能名称 ## 指令 为 Qwen Code 提供清晰、逐步的指导。其中name和description不可为空!Qwen Code会验证其中的内容。
额外文件支持,可以根据具体需要添加:
my-skill/ ├── SKILL.md(必需)├── reference.md(可选文档)├── examples.md(可选示例)├── scripts/ │ └── helper.py(可选工具)└── templates/ └── template.txt(可选模板)二、构建自定义 Skill 数据分析智能体
2.1 使用数据说明
其中分析数据采用数据采用COVID-19测试案例,包括:美国2021-01-28号,各个县county的新冠疫情累计案例信息,包括确诊病例和死亡病例,数据格式如下所示:
date(日期),county(县),state(州),fips(县编码code),cases(累计确诊病例),deaths(累计死亡病例) 2021-01-28,Pike,Alabama,01109,2704,35 2021-01-28,Randolph,Alabama,01111,1505,37 2021-01-28,Russell,Alabama,01113,3675,16 2021-01-28,Shelby,Alabama,01117,19878,141 2021-01-28,St. Clair,Alabama,01115,8047,147 2021-01-28,Sumter,Alabama,01119,925,28 2021-01-28,Talladega,Alabama,01121,6711,114 2021-01-28,Tallapoosa,Alabama,01123,3258,112 2021-01-28,Tuscaloosa,Alabama,01125,22083,283 2021-01-28,Walker,Alabama,01127,6105,185 2021-01-28,Washington,Alabama,01129,1454,27下载地址如下:
https://github.com/BIXUECHAO/covid-19-tes-data/blob/main/us-covid19-counties.csv
创建数据表,并导入上述数据:
CREATETABLE`us_covid19_counties`(`date`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciDEFAULTNULLCOMMENT'日期',`county`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciDEFAULTNULLCOMMENT'县',`state`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciDEFAULTNULLCOMMENT'州',`fips`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciDEFAULTNULLCOMMENT'县编码code',`cases`intDEFAULTNULLCOMMENT'累计确诊病例',`deaths`intDEFAULTNULLCOMMENT'累计死亡病例')ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_0900_ai_ciCOMMENT='COVID-19 案例';2.2 构建 Skill
在项目的目录下创建.qwen/skills/db技能包,整体结构如下所示:
.qwen/skills/db/ ├── SKILL.md ├── scripts/ │ └── run_sql.py其中scripts/run_sql.py用于动态查询数据库中的数据,接收一个SQL参数,通过bash指令运行。
2.2.1 编写 SKILL.md
主要描述出技能的能力,这里数据查询的场景,可以放入表结构,如果表特别多的情况下,也可以写一个scripts脚本动态获取。另外为了更好的让大模型处理,最好提供调用脚本的指令示例。
内容示例如下所示,注意Python路径修改为你电脑的实际路径,如果配置了环境变量可直接改为python -u scripts/run_sql.py --sql "{sql}":
--- name: db-skill description: COVID-19数据查询, 包括:美国 2021-01-28 号,各个县county的新冠疫情累计案例信息,包括确诊病例和死亡病例 --- # 数据查询 ## 数据表结构 ``sql CREATE TABLE `us_covid19_counties` ( `date` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '日期', `county` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '县', `state` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '州', `fips` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '县编码code', `cases` int DEFAULT NULL COMMENT '累计确诊病例', `deaths` int DEFAULT NULL COMMENT '累计死亡病例' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='COVID-19 案例'; `` ## 数据样例 ``data date(日期),county(县),state(州),fips(县编码code),cases(累计确诊病例),deaths(累计死亡病例) 2021-01-28,Pike,Alabama,01109,2704,35 2021-01-28,Randolph,Alabama,01111,1505,37 2021-01-28,Russell,Alabama,01113,3675,16 2021-01-28,Shelby,Alabama,01117,19878,141 2021-01-28,St. Clair,Alabama,01115,8047,147 2021-01-28,Sumter,Alabama,01119,925,28 2021-01-28,Talladega,Alabama,01121,6711,114 2021-01-28,Tallapoosa,Alabama,01123,3258,112 2021-01-28,Tuscaloosa,Alabama,01125,22083,283 2021-01-28,Walker,Alabama,01127,6105,185 2021-01-28,Washington,Alabama,01129,1454,27 `` ## 指令 运行辅助脚本: ``bash # 查询天气 E:\anaconda\conda\envs\openai\python.exe -u scripts/run_sql.py --sql "{sql}" `` ## 示例 - 统计每个州的累计确诊病例 ``bash E:\anaconda\conda\envs\openai\python.exe -u scripts/run_sql.py --sql "SELECT state, COUNT(*) AS total_cases FROM us_covid19_counties GROUP BY state ORDER BY total_cases DESC" ``2.2.2 编写 scripts 脚本
添加一个run_sql.py脚本,执行用户数据的查询动作,放在.qwen/skills/db/scripts下,内容如下所示:
importjsonimportargparseimportpymysqldefget_conn():returnpymysql.connect(host="127.0.0.1",port=3306,database="test3",user="root",password="root",autocommit=True)defquery(sql):conn=get_conn()cursor=conn.cursor()cursor.execute(sql)columns=[column[0]forcolumnincursor.description]res=list()forrowincursor.fetchall():res.append(dict(zip(columns,row)))cursor.close()conn.close()returnresdefrun_sql(sql:str):"""执行MySQL SQL语句查询数据,一次仅能执行一句SQL!"""try:ifnotsql:print("请传递需要查询的SQL!")returnfetch=query(sql)print(f"数据库查询结果: \n{fetch}")exceptExceptionase:print(f"执行SQL错误:{str(e)},请修正后重新发起。")if__name__=='__main__':parser=argparse.ArgumentParser(description="Run a SQL query.")parser.add_argument('--sql',type=str,required=True,help='SQL query to execute')args=parser.parse_args()sql=args.sql run_sql(sql)到这Skill就已经添加完毕了。
2.3 使用 Skill
在当前项目目录下唤醒Qwen Code,注意需要添加--experimental-skills:
qwen --experimental-skills输入:你当前有哪些Skills
输入:确诊人数Top10的县是哪几个?
输入:针对确诊人数前5名的州的信息, 深度分析其各个维度,为我生成一个炫酷的报表页面
执行过程:
最终生成页面如下: