Files
lzwcai-mcp-server-package/.kilo/plans/lzwcai-agile-db-skill.md
yuanzhipeng 557361632c feat(.kilo): 新增 AgileDB 数据库操作技能
新增 lzwcai-agile-db 技能文件,为 AI Agent 提供 AgileDB 数据库操作的场景化工作流指导。
该技能支持数据源浏览、表数据 CRUD、SQL 执行和 AI 生成表结构等功能,包含完整的工具列表和使用场景。
2026-06-11 18:51:49 +08:00

452 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# lzwcai-agile-db Skill 实现计划
## 目标
创建一个 Kilo skill 文件,为 AI Agent 提供 AgileDB 数据库操作的场景化工作流指导。
## Skill 文件路径
`.kilo/skills/lzwcai-agile-db/SKILL.md`
## Skill 内容
以下为完整的 SKILL.md 内容:
```markdown
# lzwcai-agile-db
AgileDB 数据库操作技能。为 AI Agent 提供数据源浏览、表数据 CRUD、SQL 执行和 AI 生成表结构的场景化工作流。
## 可用 MCP 工具
本 skill 基于 `lzwcai_mcp_agile_db` MCP Server提供以下工具
### 数据源管理
| 工具 | 功能 |
|------|------|
| `list_datasources` | 获取数据源列表 |
| `get_datasource_detail` | 获取数据源详情(含数据库、表结构) |
| `create_datasource` | 创建外部数据源 |
| `update_datasource` | 更新数据源 |
| `toggle_datasource_status` | 启用/停用数据源 |
| `delete_datasource` | 删除数据源 |
### 数据库与表管理
| 工具 | 功能 |
|------|------|
| `list_databases` | 获取数据源下的数据库列表 |
| `list_tables` | 获取数据库下的表列表 |
| `get_table_detail` | 获取表结构详情(字段、类型、主键) |
| `create_table` | 创建新表 |
| `alter_table` | 修改表结构 |
| `generate_table_by_description` | AI 根据自然语言生成表结构 |
### 表数据操作
| 工具 | 功能 |
|------|------|
| `query_table_data` | 查询表数据(分页) |
| `insert_table_row` | 插入一行数据 |
| `update_table_row` | 更新一行数据 |
| `delete_table_rows` | 删除数据行(按主键) |
| `export_table_excel` | 导出表数据为 Excel |
### SQL 执行
| 工具 | 功能 |
|------|------|
| `execute_sql` | 执行原生 SQL 查询 |
---
## 场景 1浏览数据源
当用户想要了解有哪些数据源、数据库或表时,使用此流程。
### 工作流程
```
用户请求: "有哪些数据源?" / "看看 XX 数据源有哪些表?"
1. 调用 list_datasources()
2. 展示数据源列表(名称、类型、状态、数据库数、表数)
3. 用户选择数据源后,调用 get_datasource_detail(datasourceId="xx")
4. 展示数据库列表和实时表结构
```
### 示例
**用户**: "帮我看看有哪些数据源"
```
调用: list_datasources()
返回: [{id: "1", name: "订单系统", type: "builtin", status: 0, databases: 3, tables: 12}, ...]
回复: 共找到 3 个数据源:
- 订单系统内置运行中3 个库12 张表)
- 用户中心(外部 MySQL运行中1 个库5 张表)
- 报表系统(外部 PostgreSQL已停止
```
**用户**: "看看订单系统有哪些表"
```
调用: get_datasource_detail(datasourceId="1")
返回: {datasource: {...}, databases: [{name: "order_db", tables: [...]}]}
回复: 订单系统包含以下数据库:
order_db:
- orders (订单表, 15 个字段)
- order_items (订单明细, 10 个字段)
- users (用户表, 8 个字段)
```
### 注意事项
- 数据源状态:`0`=运行中,`1`=已停止
- 数据源类型:`builtin`=内置,`external`=外部
- 如果用户只说"查一下数据库",先调用 `list_datasources()` 再引导选择
---
## 场景 2查询表数据
当用户想要查看某张表的具体数据记录时,使用此流程。
### 工作流程
```
用户请求: "查一下 users 表的数据" / "看看前 20 条订单"
1. 如果不知道 tableId先浏览数据源找到目标表
2. 调用 query_table_data(tableId="xx", pageNum=1, pageSize=10, target="prod")
3. 展示数据(表格形式,包含字段名和值)
4. 如果数据量大,提示用户可翻页或调整 pageSize
```
### 示例
**用户**: "查一下 users 表前 10 条数据"
```
调用: query_table_data(tableId="5", pageNum=1, pageSize=10)
返回: {
columns: [{name: "id", type: "INTEGER"}, {name: "username", type: "VARCHAR"}, ...],
data: [{id: 1, username: "admin", email: "admin@test.com"}, ...],
total: 156
}
回复: users 表共 156 条记录,当前显示第 1-10 条:
| id | username | email | created_at |
|----|----------|-----------------|---------------------|
| 1 | admin | admin@test.com | 2024-01-15 10:30:00 |
| 2 | user1 | user1@test.com | 2024-01-16 14:20:00 |
...
```
### 注意事项
- `target` 参数:`prod`=生产环境,`test`=测试环境,默认 `prod`
- 如果用户未指定数量,默认 `pageSize=10`
- 数据返回格式为对象数组(已自动转换表头)
- 如果用户说"翻页",增加 `pageNum` 参数
---
## 场景 3执行 SQL
当用户需要执行自定义 SQL 查询时,使用此流程。
### 工作流程
```
用户请求: "帮我执行 SQL..." / "查一下订单数大于 100 的用户"
1. 如果用户直接提供 SQL直接使用
如果用户提供自然语言需求,先转换为 SQL
2. 调用 execute_sql(datasourceId="xx", executableSql="SELECT ...")
3. 展示查询结果
4. 如果 SQL 执行失败,展示错误信息并建议修正
```
### 示例
**用户**: "统计每个地区的订单数量"
```
转换为 SQL: SELECT region, COUNT(*) as order_count FROM orders GROUP BY region ORDER BY order_count DESC
调用: execute_sql(
datasourceId="1",
executableSql="SELECT region, COUNT(*) as order_count FROM orders GROUP BY region ORDER BY order_count DESC"
)
返回: {
columns: [{name: "region"}, {name: "order_count"}],
data: [{region: "华东", order_count: 1250}, {region: "华南", order_count: 980}, ...]
}
回复: 各地区订单统计:
| 地区 | 订单数 |
|------|--------|
| 华东 | 1,250 |
| 华南 | 980 |
| 华北 | 756 |
```
### 注意事项
- `datasourceId` 必须提供,如果用户未指定,先询问或使用最近使用的数据源
- `sqlTemplate` 可选,用于模板化查询
- `parameters` 可选,用于参数化查询(防止 SQL 注入)
- 执行危险操作DELETE/DROP/UPDATE**必须**向用户确认
- 如果查询结果超过 100 行,建议用户使用 `query_table_data` 代替
---
## 场景 4增删改数据
当用户需要修改表中的数据时,使用此流程。
### 4.1 插入数据
```
用户请求: "新增一个用户,用户名是 test_user"
1. 先调用 get_table_detail(tableId="xx") 了解表结构
2. 确认必填字段(非空字段、无默认值字段)
3. 调用 insert_table_row(tableId="xx", data={...})
4. 确认插入成功
```
**示例**:
**用户**: "新增一个用户,用户名 test_user邮箱 test@test.com"
```
调用: get_table_detail(tableId="5")
返回: {columns: [{name: "id", isPrimaryKey: true, isAutoIncrement: true}, {name: "username", isNullable: false}, ...]}
调用: insert_table_row(
tableId="5",
data={"username": "test_user", "email": "test@test.com"}
)
回复: 已成功插入用户 test_user (ID 自动生成)
```
### 4.2 更新数据
```
用户请求: "把用户 test_user 的邮箱改成 new@test.com"
1. 确认主键字段和要更新的值
2. 调用 update_table_row(tableId="xx", primaryKey={主键}, data={要更新的字段})
3. 确认更新成功
```
**示例**:
**用户**: "把 ID 为 5 的用户邮箱改成 new@test.com"
```
调用: update_table_row(
tableId="5",
primaryKey={"id": 5},
data={"email": "new@test.com"}
)
回复: 已更新用户 ID=5 的邮箱为 new@test.com
```
### 4.3 删除数据
```
用户请求: "删除用户 test_user"
1. ⚠️ 危险操作!先确认删除范围和影响
2. 向用户展示将要删除的数据,请求确认
3. 用户确认后,调用 delete_table_rows(tableId="xx", primaryKeys=[{主键}])
4. 确认删除成功
```
**示例**:
**用户**: "删除 ID 为 10 的订单"
```
回复: ⚠️ 确认要删除以下记录吗?
订单 ID=10, 订单号=ORD-2024-0010, 金额=¥1,250.00
此操作不可恢复。请回复"确认删除"继续。
用户: "确认删除"
调用: delete_table_rows(
tableId="3",
primaryKeys=[{"id": 10}]
)
回复: 已成功删除订单 ID=10
```
### 注意事项
- **删除操作必须二次确认**
- `primaryKey` 必须是对象格式,如 `{"id": 1}`
- `data` 只包含要更新的字段,不需要提供全部字段
- 插入数据时,自增主键不需要提供
- 如果操作涉及多行,使用批量操作或循环调用
---
## 场景 5AI 生成表结构
当用户需要创建新表但不知道如何设计表结构时,使用 AI 辅助生成。
### 工作流程
```
用户请求: "我需要一个用户表" / "帮我设计一个订单系统的表结构"
1. 调用 generate_table_by_description(requirement="用户描述")
2. 展示 AI 生成的表结构(表名、字段、类型、注释)
3. 用户确认后,调用 create_table(connectionId="xx", databaseName="xx", tableName="xx", columns=[...])
4. 确认创建成功
```
### 示例
**用户**: "帮我设计一个商品表,包含名称、价格、库存、分类"
```
调用: generate_table_by_description(
requirement="我需要一个商品表,包含商品名称、价格、库存、分类,用于电商系统"
)
返回: {
tableName: "products",
tableComment: "商品表",
columns: [
{columnName: "id", columnType: "SERIAL", isPrimaryKey: true, isAutoIncrement: true, columnComment: "主键ID"},
{columnName: "name", columnType: "VARCHAR", columnLength: 200, isNullable: false, columnComment: "商品名称"},
{columnName: "price", columnType: "DECIMAL", columnLength: 10, columnComment: "价格"},
{columnName: "stock", columnType: "INTEGER", columnComment: "库存数量"},
{columnName: "category_id", columnType: "INTEGER", columnComment: "分类ID"},
{columnName: "created_at", columnType: "TIMESTAMP", defaultValue: "NOW()", columnComment: "创建时间"}
]
}
回复: AI 已生成表结构设计:
表名: products (商品表)
字段:
- id (SERIAL, 主键, 自增) - 主键ID
- name (VARCHAR(200), 非空) - 商品名称
- price (DECIMAL(10)) - 价格
- stock (INTEGER) - 库存数量
- category_id (INTEGER) - 分类ID
- created_at (TIMESTAMP, 默认NOW()) - 创建时间
是否需要在此基础上修改或直接创建?
用户: "直接创建到 order_db 数据库"
调用: create_table(
connectionId="1",
databaseName="order_db",
tableName="products",
tableComment="商品表",
columns=[...] // 使用 AI 生成的 columns
)
回复: 已成功创建表 products (商品表)
```
### 注意事项
- `requirement` 参数应尽可能详细,包含业务场景和字段需求
- AI 生成的表结构可能需要用户调整(如字段长度、类型)
- 创建表前需要确认 `connectionId` 和 `databaseName`
- 常用字段类型:`VARCHAR`, `INTEGER`, `SERIAL`(自增主键), `DECIMAL`, `TIMESTAMP`, `TEXT`, `BOOLEAN`
- 如果用户描述模糊,先引导用户补充细节
---
## 最佳实践
### 1. 始终确认环境
- 默认使用 `prod`(生产环境)
- 如果用户提到"测试"或"测试环境",使用 `target="test"`
- 执行危险操作前,明确告知用户当前环境
### 2. 提供上下文
- 展示数据时,包含字段名和类型
- 执行操作后,告知影响的行数或具体变化
- 错误时,提供清晰的错误信息和建议
### 3. 分步引导
- 如果用户请求不完整(如未指定数据源),先引导补充信息
- 复杂操作分步执行,每步确认后继续
- 对于多表操作,先展示整体计划
### 4. 数据展示
- 表格数据使用 Markdown 表格格式
- 长文本截断显示(最多 100 字符)
- 数字格式化(千位分隔符、货币符号)
- 时间格式化为可读格式
### 5. 错误处理
- API 错误:展示错误信息,建议重试或检查参数
- SQL 错误:展示 SQL 错误位置,建议修正
- 连接错误:检查数据源状态,建议启用或重新配置
---
## 常用参数参考
### 数据源类型
- `builtin` - 内置 PostgreSQL
- `external` - 外部数据库MySQL/PostgreSQL/Oracle/SQL Server 等)
### 数据源状态
- `0` - 运行中
- `1` - 已停止
### 环境
- `prod` - 生产环境(默认)
- `test` - 测试环境
### 常用字段类型
| 类型 | 用途 | 示例 |
|------|------|------|
| `SERIAL` | 自增主键 | `id SERIAL PRIMARY KEY` |
| `VARCHAR(n)` | 短文本 | `username VARCHAR(50)` |
| `TEXT` | 长文本 | `description TEXT` |
| `INTEGER` | 整数 | `stock INTEGER` |
| `DECIMAL(m,n)` | 精确小数 | `price DECIMAL(10,2)` |
| `TIMESTAMP` | 时间戳 | `created_at TIMESTAMP` |
| `BOOLEAN` | 布尔值 | `is_active BOOLEAN` |
---
## 快速开始
如果用户说"帮我查一下数据库",按以下步骤操作:
1. 调用 `list_datasources()` 获取数据源列表
2. 展示列表,让用户选择或默认第一个运行中的数据源
3. 调用 `get_datasource_detail(datasourceId="xx")` 获取数据库和表信息
4. 引导用户选择要操作的表
5. 根据用户意图调用相应的工具(查询/执行 SQL/增删改)
```
## 实施步骤
1. 创建目录 `.kilo/skills/lzwcai-agile-db/`
2. 创建文件 `SKILL.md` 并写入上述内容
3. 验证 skill 文件格式正确
## 验证
创建完成后skill 应该可以被 Kilo 自动识别和加载。