Skip to content

技能 API

技能(Skill)模块提供技能包的创建、上传、下载、管理、AI 生成/优化以及在线文件编辑能力。技能以 zip 包形式存储,可绑定到智能体以扩展其能力。


获取技能分页列表

GET /snail-ai/skill/page

请求参数:

参数类型必填说明
pagenumber页码,默认 1
sizenumber每页条数
keywordstring关键词搜索

curl 示例:

bash
curl -X GET 'http://localhost:8900/snail-ai/skill/page?page=1&size=10' \
  -H 'Snail-Ai-Auth: eyJhbGciOiJIUzI1NiJ9...'

响应示例:

json
{
  "status": 1,
  "message": null,
  "data": [
    {
      "id": 1,
      "name": "天气查询技能",
      "description": "通过 API 查询实时天气信息",
      "fileName": "weather-skill.zip",
      "fileSize": 10240,
      "createDt": "2026-03-01T10:00:00",
      "updateDt": "2026-05-15T14:30:00"
    }
  ],
  "page": 1,
  "size": 10,
  "total": 5
}

获取技能详情

GET /snail-ai/skill/{id}

curl 示例:

bash
curl -X GET 'http://localhost:8900/snail-ai/skill/1' \
  -H 'Snail-Ai-Auth: eyJhbGciOiJIUzI1NiJ9...'

响应示例:

json
{
  "status": 1,
  "message": "success",
  "data": {
    "id": 1,
    "name": "天气查询技能",
    "description": "通过 API 查询实时天气信息",
    "fileName": "weather-skill.zip",
    "fileSize": 10240,
    "createDt": "2026-03-01T10:00:00",
    "updateDt": "2026-05-15T14:30:00"
  }
}

获取全量技能列表

获取所有技能(不分页),用于智能体配置时的下拉选择。

GET /snail-ai/skill/list

curl 示例:

bash
curl -X GET 'http://localhost:8900/snail-ai/skill/list' \
  -H 'Snail-Ai-Auth: eyJhbGciOiJIUzI1NiJ9...'

响应示例:

json
{
  "status": 1,
  "message": "success",
  "data": [
    { "id": 1, "name": "天气查询技能", "description": "查询实时天气" },
    { "id": 2, "name": "代码执行技能", "description": "执行 Python 代码" }
  ]
}

在线创建技能

仅创建技能元数据(DB 记录),后续通过文件管理接口编辑技能文件。

POST /snail-ai/skill

请求体:

字段类型必填说明
namestring技能名称
descriptionstring描述

curl 示例:

bash
curl -X POST 'http://localhost:8900/snail-ai/skill' \
  -H 'Content-Type: application/json' \
  -H 'Snail-Ai-Auth: eyJhbGciOiJIUzI1NiJ9...' \
  -d '{
    "name": "数据分析技能",
    "description": "提供数据统计与可视化能力"
  }'

响应示例:

json
{
  "status": 1,
  "message": "success",
  "data": {
    "id": 6,
    "name": "数据分析技能",
    "description": "提供数据统计与可视化能力",
    "fileName": "",
    "createDt": "2026-06-01T10:00:00"
  }
}

更新技能元数据

PUT /snail-ai/skill/{id}

请求体:

字段类型必填说明
namestring技能名称
descriptionstring描述

curl 示例:

bash
curl -X PUT 'http://localhost:8900/snail-ai/skill/6' \
  -H 'Content-Type: application/json' \
  -H 'Snail-Ai-Auth: eyJhbGciOiJIUzI1NiJ9...' \
  -d '{
    "name": "数据分析技能 v2",
    "description": "增强版数据统计与可视化能力"
  }'

AI 辅助生成与优化

AI 生成和 AI 优化接口都只返回草稿内容,不会直接保存技能,也不会创建新版本。管理端会把返回的 skillContent 写入编辑器并标记为未保存,确认后仍需调用保存文件接口或点击页面「保存」。

使用前需要先配置可用的默认 CHAT 模型。模型不可用时:

  • AI 生成会退回规则模板,并在 warnings 中返回 AI 生成失败,已使用规则草稿
  • AI 优化会保留当前内容,并在 warnings 中返回 AI 优化失败,已保留当前内容

AI 生成技能草稿

POST /snail-ai/skill/ai/generate

请求体:

字段类型必填说明
namestring期望生成的技能名称
descriptionstring期望生成的技能描述
requirementstring需求说明,描述技能目标、场景和约束
optimizeInstructionstring额外生成要求或风格偏好

curl 示例:

bash
curl -X POST 'http://localhost:8900/snail-ai/skill/ai/generate' \
  -H 'Content-Type: application/json' \
  -H 'Snail-Ai-Auth: eyJhbGciOiJIUzI1NiJ9...' \
  -d '{
    "name": "java-code-review",
    "description": "Java 代码规范审查",
    "requirement": "提供 Java 开发规范检查、代码重构建议和最佳实践指导",
    "optimizeInstruction": "输出结构清晰,包含触发条件、输入要求和输出格式"
  }'

响应示例:

json
{
  "status": 1,
  "message": "success",
  "data": {
    "name": "java-code-review",
    "description": "Java 代码规范审查",
    "skillContent": "---\nname: java-code-review\ndescription: \"Java 代码规范审查\"\n---\n# Java 代码规范审查\n...",
    "warnings": []
  }
}

AI 优化现有技能

POST /snail-ai/skill/{id}/ai/optimize

请求体:

字段类型必填说明
namestring当前或期望的技能名称
descriptionstring当前或期望的技能描述
requirementstring优化需求说明
currentContentstring当前编辑器中的 SKILL.md 内容;为空时服务端读取已保存的 SKILL.md
optimizeInstructionstring优化方向,如“更清晰”“补充边界条件”“统一输出格式”

curl 示例:

bash
curl -X POST 'http://localhost:8900/snail-ai/skill/6/ai/optimize' \
  -H 'Content-Type: application/json' \
  -H 'Snail-Ai-Auth: eyJhbGciOiJIUzI1NiJ9...' \
  -d '{
    "name": "java-code-review",
    "description": "Java 代码规范审查",
    "requirement": "优化现有 Skill,使其更适合 Java 规范检查和代码重构建议",
    "currentContent": "---\nname: java-code-review\n---\n# Java 代码规范审查\n...",
    "optimizeInstruction": "补充输入要求、工作流程、输出格式和失败处理"
  }'

响应示例:

json
{
  "status": 1,
  "message": "success",
  "data": {
    "name": "java-code-review",
    "description": "Java 代码规范审查",
    "skillContent": "---\nname: java-code-review\ndescription: \"Java 代码规范审查\"\n---\n# Java 代码规范审查\n...",
    "warnings": []
  }
}

上传技能 zip 包

上传技能 zip 包并自动解析元数据。

POST /snail-ai/skill/upload

Content-Type: multipart/form-data

表单字段:

字段类型必填说明
fileFile技能 zip 压缩包

curl 示例:

bash
curl -X POST 'http://localhost:8900/snail-ai/skill/upload' \
  -H 'Snail-Ai-Auth: eyJhbGciOiJIUzI1NiJ9...' \
  -F 'file=@/path/to/weather-skill.zip'

响应示例:

json
{
  "status": 1,
  "message": "success",
  "data": {
    "id": 7,
    "name": "weather-skill",
    "description": "天气查询技能",
    "fileName": "weather-skill.zip",
    "fileSize": 10240,
    "createDt": "2026-06-01T10:00:00"
  }
}

下载技能 zip 包

GET /snail-ai/skill/{id}/download

返回二进制流(application/zip),需带 Snail-Ai-Auth 头。

curl 示例:

bash
curl -X GET 'http://localhost:8900/snail-ai/skill/1/download' \
  -H 'Snail-Ai-Auth: eyJhbGciOiJIUzI1NiJ9...' \
  -o weather-skill.zip

删除技能

DELETE /snail-ai/skill/{id}

curl 示例:

bash
curl -X DELETE 'http://localhost:8900/snail-ai/skill/1' \
  -H 'Snail-Ai-Auth: eyJhbGciOiJIUzI1NiJ9...'

响应示例:

json
{
  "status": 1,
  "message": "success",
  "data": null
}

文件管理(在线编辑)

获取技能文件树

GET /snail-ai/skill/{skillId}/files

curl 示例:

bash
curl -X GET 'http://localhost:8900/snail-ai/skill/1/files' \
  -H 'Snail-Ai-Auth: eyJhbGciOiJIUzI1NiJ9...'

响应示例:

json
{
  "status": 1,
  "message": "success",
  "data": {
    "name": "weather-skill",
    "type": "directory",
    "children": [
      {
        "name": "index.js",
        "type": "file",
        "size": 2048
      },
      {
        "name": "config.json",
        "type": "file",
        "size": 256
      },
      {
        "name": "lib",
        "type": "directory",
        "children": [
          {
            "name": "weather-api.js",
            "type": "file",
            "size": 1024
          }
        ]
      }
    ]
  }
}

获取文件内容

GET /snail-ai/skill/{skillId}/files/content

请求参数:

参数类型必填说明
pathstring文件路径(如 index.js

curl 示例:

bash
curl -X GET 'http://localhost:8900/snail-ai/skill/1/files/content?path=index.js' \
  -H 'Snail-Ai-Auth: eyJhbGciOiJIUzI1NiJ9...'

响应示例:

json
{
  "status": 1,
  "message": "success",
  "data": {
    "content": "module.exports = {\n  name: 'weather-skill',\n  ...\n}",
    "encoding": "utf-8",
    "size": 2048
  }
}

保存文件内容

PUT /snail-ai/skill/{skillId}/files/content

请求参数:

参数类型必填说明
pathstring文件路径

请求体:

字段类型必填说明
contentstring文件内容
encodingstring编码,默认 utf-8

curl 示例:

bash
curl -X PUT 'http://localhost:8900/snail-ai/skill/1/files/content?path=index.js' \
  -H 'Content-Type: application/json' \
  -H 'Snail-Ai-Auth: eyJhbGciOiJIUzI1NiJ9...' \
  -d '{
    "content": "module.exports = {\n  name: \"weather-skill\",\n  version: \"2.0\"\n}",
    "encoding": "utf-8"
  }'

新建文件/目录

POST /snail-ai/skill/{skillId}/files

请求体:

字段类型必填说明
pathstring文件/目录路径(如 lib/utils.js
typestring类型:filedirectory

curl 示例:

bash
curl -X POST 'http://localhost:8900/snail-ai/skill/1/files' \
  -H 'Content-Type: application/json' \
  -H 'Snail-Ai-Auth: eyJhbGciOiJIUzI1NiJ9...' \
  -d '{
    "path": "lib/utils.js",
    "type": "file"
  }'

删除文件/目录

DELETE /snail-ai/skill/{skillId}/files

请求参数:

参数类型必填说明
pathstring文件路径

curl 示例:

bash
curl -X DELETE 'http://localhost:8900/snail-ai/skill/1/files?path=lib/utils.js' \
  -H 'Snail-Ai-Auth: eyJhbGciOiJIUzI1NiJ9...'

重命名文件/目录

PUT /snail-ai/skill/{skillId}/files/rename

请求体:

字段类型必填说明
oldPathstring原路径
newPathstring新路径

curl 示例:

bash
curl -X PUT 'http://localhost:8900/snail-ai/skill/1/files/rename' \
  -H 'Content-Type: application/json' \
  -H 'Snail-Ai-Auth: eyJhbGciOiJIUzI1NiJ9...' \
  -d '{
    "oldPath": "lib/utils.js",
    "newPath": "lib/helpers.js"
  }'

响应示例:

json
{
  "status": 1,
  "message": "success",
  "data": null
}

Apache 2.0 Licensed