开发第一个CoPaw Skill:从关系数据库中查询数据
本文介绍了如何创建一个MySQL数据查询的AI技能(Skill)。首先需要准备本地MySQL数据库,创建相关表并初始化数据。然后通过创建skill.md和function.py两个核心文件来定义技能功能,其中skill.md包含技能描述、数据库结构说明和工作流程,function.py实现SQL查询功能并包含安全限制。技能创建完成后,可在控制台查看和管理,通过自然语言对话即可调用该技能查询数据并生
最近在研究各种龙虾产品啊,觉得时间真的不够用。但是,不管怎么样,先从基本的入手,看看这些skills怎么创建、能解决什么问题、怎么跟业务结合。
今天尝试了一个简单的例子,通过自然语言与AI互动,连接关系型数据库MySQL 8 ,从表中查询数据,展示结果,生成图表。
一、本地MySQL数据库
事先已经建好,并创建了数据库实例,设计了两张表,初始化了数据。
准备好数据库连接:IP、端口、用户名(生产上用只读)、密码
表个字段结构信息。
二、创建Skill
以下内容让AI帮你生成,后续自己微调。
在.copaw\active_skills目录下,创建数据查询skill的目录dataquery

进入dataquery文件夹,创建skill的核心配置,包括skill.md,每个skill都需要这样一个md文件需要有正确的 YAML frontmatter(name, description, tools)、角色定义清晰。还包括一些py script可能要调用的能力脚本

2.1Skill.md文件
---
name: 数据分析助手
description: 能够根据用户提问,查询 MySQL 数据库并分析元数据情况。
tools:
- name: query_mysql
description: 执行标准的 MySQL 查询语句。
---
# 角色定义
你是一个数据分析专家。你的任务是将用户的自然语言转换为正确的 SQL 语句。
# 数据库结构说明
你拥有 `t_meta_table` 表的访问权限:
- `ID`: 主键
- `TABLE_NAME`: 表名
- `CN_NAME`: 中文表名
- `IS_DATABASE`: 所属数据库
- `OWER`: 所有者
你拥有 `t_meta_col`表的访问权限:
- `ID`: 修改人
- `TABLE_NAME`: 表名
- `CODE_NAME`: 代码名称
- `DATA_TYPE`: 数据类型
- `DATA_LENGTH`: 数据长度
- `CREATE_TIME`: 创建时间
- `CREATOR_ID`: 创建人
- `IS_UNIQUE`: 是否唯一
- `IS_PRIMARY`: 是否主键
### 总结
1. 完整还原了表中所有字段的注释,对无官方注释的字段补充了合理的通用说明(如扩展字段、数据库名称);
2. 两张表的 `TABLE_NAME` 可做关联字段
# 工作流程
1. **生成 SQL**: 根据用户问题(如“查询表的元数据信息”、“查询字段元数据信息”)生成 SQL。
- 示例:`SELECT TABLE_NAME,CN_NAME,OWER FROM t_meta_table `
- 示例:`SELECT TABLE_NAME,CODE_NAME,DATA_TYPE,DATA_LENGTH,DB_NAME FROM t_meta_col`
2. **执行函数**: 调用 `query_mysql` 工具。
3. **展示结果**:
- 使用 Markdown 表格展示数据。
- 如果数据包含趋势,请用文字简要分析(如:同比去年增长 20%)。
# 限制
- 只允许执行 SELECT 语句。
- 严禁执行 DELETE, DROP, 或 UPDATE。
# 环境要求
请确保安装以下 Python 库:
```bash
pip install pymysql pandas
2.2function.py脚本
import pymysql
import pandas as pd
def query_mysql(sql_query: str):
"""
执行 SQL 查询并返回结果。
"""
# 安全检查:只允许 SELECT 语句
sql_upper = sql_query.strip().upper()
allowed_keywords = ['SELECT', 'SHOW', 'DESCRIBE', 'EXPLAIN']
if not any(sql_upper.startswith(kw) for kw in allowed_keywords):
return "❌ 错误:只允许执行 SELECT/SHOW/DESCRIBE 查询"
# 禁止危险关键字
dangerous_words = ['DELETE', 'DROP', 'UPDATE', 'INSERT', 'TRUNCATE', 'CREATE', 'ALTER', 'GRANT', 'REVOKE']
for word in dangerous_words:
if f'{word} ' in sql_upper or f' {word}' in sql_upper:
return f"❌ 错误:不允许执行 {word} 操作"
config = {
'host': 'xxx',
'user': 'xxx', # 务必使用只读账号!
'password': 'xxx',
'database': 'xxx'
}
try:
connection = pymysql.connect(**config)
# 使用 pandas 方便处理表格和图表数据
df = pd.read_sql(sql_query, connection)
connection.close()
# 返回 Markdown 表格
return df.to_markdown(index=False)
except Exception as e:
return f"查询出错: {str(e)}"
当然创建Skill也可以直接在聊天中让龙虾自己创建,你描述清楚需求就行,会自动在相应目录下生成。
三、控制台查看Skill
以上文件创建好以后,重新启动服务,打开控制台。在【技能】菜单中,可以找到我们自创建的dataquery技能。
在.copaw\active_skills文件夹下的都是“已启用”的技能,在.copaw\customized_skills文件夹下的都是“未启用”的技能。

点击该技能,查看配置文件。注意:后端API不支持编辑技能。您只能查看或切换启用/禁用状态。

四、Skill的应用
回到聊天界面,可以直接通过自然语言进行对话,自动调用创建的技能。
以下过程比较长,特别地消耗tokens哈,注意注意!





当然也能生成可视化图表



四、总结
这是一个基本的Skill的案例,目的是熟悉整个创建流程,后续会有更多更复杂的技能会开发出来,武装龙虾,让他发挥更加强大的能力。
另外,不管是CoPaw还是OpenClaw,技能Skill的开发都是差不多,甚至都可以服用,一次开发多处使用。
更多推荐

所有评论(0)