AI系列面试7:如何规范地定义一个 Skill
一、Skill 的核心概念
Skill 是 Agent(智能体) 或 AI 系统 中封装的一组可执行能力单元。它通常包含:
- 触发条件:何时被调用(如用户指令、系统事件)。
- 输入参数:需要接收的数据或上下文。
- 执行逻辑:具体的处理步骤(如调用 API、运行代码、查询知识库)。
- 输出结果:返回给调用者的响应或动作。
二、规范定义 Skill 的步骤
1. 明确 Skill 的名称与描述
- 名称:简短、唯一、语义化(如
search_web、send_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 动态调度,也能被开发者直接集成到系统中,实现 “写一次,到处用” 的复用效果。
评论
暂无已展示的评论。
发表评论(匿名)