← 返回列表

AI系列面试7:如何规范地定义一个 Skill

一、Skill 的核心概念

Skill 是 Agent(智能体)AI 系统 中封装的一组可执行能力单元。它通常包含:

  • 触发条件:何时被调用(如用户指令、系统事件)。
  • 输入参数:需要接收的数据或上下文。
  • 执行逻辑:具体的处理步骤(如调用 API、运行代码、查询知识库)。
  • 输出结果:返回给调用者的响应或动作。

二、规范定义 Skill 的步骤

1. 明确 Skill 的名称与描述

  • 名称:简短、唯一、语义化(如 search_websend_email)。
  • 描述:用一句话说明该 Skill 的功能,便于 Agent 自动匹配。

2. 定义输入参数(Input Schema)

使用 JSON Schema 或类似格式,明确每个参数的类型、是否必填、默认值及约束。

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "搜索关键词",
      "required": true
    },
    "max_results": {
      "type": "integer",
      "description": "最大返回结果数",
      "default": 10
    }
  }
}

3. 编写执行逻辑(Execution Logic)

  • 确定性逻辑:直接调用函数、API 或数据库。
  • 非确定性逻辑:使用 LLM 生成响应(需提供 prompt 模板)。
  • 错误处理:定义超时、重试、降级策略。

4. 定义输出格式(Output Schema)

同样使用 JSON Schema 描述返回的数据结构。

{
  "type": "object",
  "properties": {
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "title": { "type": "string" },
          "url": { "type": "string", "format": "uri" }
        }
      }
    }
  }
}

5. 附加元数据(Metadata)

  • 版本号:便于迭代管理。
  • 作者/维护者:责任归属。
  • 依赖项:需要的外部服务或库。
  • 使用限制:如频率限制、权限要求。

三、示例:一个完整的 Skill 定义

name: "weather_query"
description: "根据城市名称查询当前天气"
version: "1.0.0"
author: "AI Team"

input:
  type: object
  properties:
    city:
      type: string
      description: "城市名称,如 '北京'"
      required: true
    unit:
      type: string
      enum: ["celsius", "fahrenheit"]
      default: "celsius"

execute:
  - step: "调用天气 API"
    api: "https://api.weather.com/v1/current"
    method: "GET"
    params:
      city: "{input.city}"
      unit: "{input.unit}"
  - step: "格式化结果"
    format: "当前 {city} 的温度为 {temperature}°{unit}"

output:
  type: object
  properties:
    temperature:
      type: number
    condition:
      type: string
    humidity:
      type: number

四、最佳实践

  • 单一职责:每个 Skill 只做一件事,避免过度耦合。
  • 自包含:尽量不依赖外部全局状态,输入即输出。
  • 可测试:提供 mock 数据或沙箱环境进行单元测试。
  • 文档化:为每个 Skill 编写使用说明和示例。

通过以上方法定义的 Skill,既能被 AI Agent 动态调度,也能被开发者直接集成到系统中,实现 “写一次,到处用” 的复用效果。

评论

暂无已展示的评论。

发表评论(匿名)