一、Skills概述

Skills(技能)是AI智能体的能力模块,定义了智能体可以执行的具体操作。

核心概念:

  • 封装特定功能
  • 可被智能体调用
  • 标准化接口
  • 可复用

二、Skills的作用

能力扩展

智能体通过Skills获得具体能力:

  • 搜索信息
  • 执行代码
  • 操作文件
  • 调用API
  • 访问数据库

标准化

Skills提供统一的接口规范:

  • 输入参数定义
  • 输出格式定义
  • 错误处理
  • 权限控制

可复用

Skills可以跨智能体共享:

  • 一次开发,多处使用
  • 版本管理
  • 依赖管理

三、Skills结构

基本组成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
name: search_skill
description: 搜索互联网信息
parameters:
- name: query
type: string
description: 搜索关键词
required: true
- name: limit
type: integer
description: 返回结果数量
required: false
default: 5
returns:
type: array
description: 搜索结果列表

执行逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def search_skill(query: str, limit: int = 5) -> list:
"""
搜索互联网信息

Args:
query: 搜索关键词
limit: 返回结果数量

Returns:
搜索结果列表
"""
# 执行搜索
results = search_engine.search(query, limit)
return results

四、Skills类型

信息获取类

搜索:

  • 网页搜索
  • 图片搜索
  • 新闻搜索

查询:

  • 数据库查询
  • API查询
  • 文档检索

操作执行类

文件操作:

  • 读取文件
  • 写入文件
  • 删除文件

系统操作:

  • 执行命令
  • 进程管理
  • 服务控制

数据处理类

转换:

  • 格式转换
  • 数据清洗
  • 文本处理

分析:

  • 数据分析
  • 图像识别
  • 文本分析

交互类

通信:

  • 发送邮件
  • 发送消息
  • 创建任务

集成:

  • 第三方API
  • 数据库操作
  • 云服务调用

五、Skills开发

定义接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from pydantic import BaseModel

class SearchInput(BaseModel):
query: str
limit: int = 5

class SearchResult(BaseModel):
title: str
url: str
snippet: str

class SearchSkill:
name = "search"
description = "搜索互联网信息"
input_schema = SearchInput
output_schema = SearchResult

def execute(self, input: SearchInput) -> list[SearchResult]:
# 实现搜索逻辑
pass

实现逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class SearchSkill:
def execute(self, input: SearchInput) -> list[SearchResult]:
# 参数验证
if not input.query:
raise ValueError("query不能为空")

# 执行搜索
response = requests.get(
"https://api.search.com/search",
params={"q": input.query, "limit": input.limit}
)

# 处理结果
results = []
for item in response.json()["results"]:
results.append(SearchResult(
title=item["title"],
url=item["url"],
snippet=item["snippet"]
))

return results

错误处理

1
2
3
4
5
6
7
8
9
class SearchSkill:
def execute(self, input: SearchInput) -> list[SearchResult]:
try:
# 执行逻辑
pass
except requests.Timeout:
raise SkillError("搜索超时")
except requests.RequestException as e:
raise SkillError(f"搜索失败: {str(e)}")

六、Skills注册

注册到智能体

1
2
3
4
5
6
7
8
agent = Agent(
name="assistant",
skills=[
SearchSkill(),
CodeSkill(),
FileSkill()
]
)

动态加载

1
2
3
4
5
6
def load_skill(skill_name: str):
module = importlib.import_module(f"skills.{skill_name}")
skill_class = getattr(module, f"{skill_name.capitalize()}Skill")
return skill_class()

agent.add_skill(load_skill("search"))

七、Skills调用

智能体决策

智能体根据用户请求选择合适的Skill:

1
2
用户: 帮我搜索Python教程
智能体: 调用search_skill(query="Python教程")

参数提取

智能体从用户请求中提取参数:

1
2
用户: 搜索最近5篇关于AI的新闻
智能体: 调用search_skill(query="AI新闻", limit=5)

结果处理

智能体处理Skill返回的结果:

1
2
Skill返回: [{title: "...", url: "..."}, ...]
智能体: 整理后返回给用户

八、Skills管理

版本控制

1
2
3
4
5
skill:
name: search
version: 1.2.0
dependencies:
- requests>=2.28.0

权限控制

1
2
3
4
5
6
class SearchSkill:
permissions = ["internet_access"]

def check_permission(self, context):
if "internet_access" not in context.permissions:
raise PermissionError("无网络访问权限")

监控和日志

1
2
3
4
5
6
7
8
9
10
11
class SearchSkill:
def execute(self, input: SearchInput):
logger.info(f"执行搜索: {input.query}")
start_time = time.time()

result = self._do_search(input)

duration = time.time() - start_time
logger.info(f"搜索完成, 耗时: {duration}s")

return result

九、Skills最佳实践

单一职责

每个Skill只做一件事:

  • search_skill只负责搜索
  • file_skill只负责文件操作

清晰描述

提供详细的描述和示例:

1
2
3
4
5
6
description: |
搜索互联网信息

示例:
- 搜索Python教程
- 搜索最新的AI新闻

参数验证

使用Pydantic等工具验证参数:

1
2
3
class SearchInput(BaseModel):
query: str = Field(min_length=1, max_length=100)
limit: int = Field(ge=1, le=20)

错误处理

提供清晰的错误信息:

1
raise SkillError("搜索关键词不能为空,请提供有效的搜索词")

十、总结

Skills核心要点:

  • 封装智能体的具体能力
  • 标准化接口定义
  • 可复用和可组合
  • 清晰的参数和返回值定义
  • 完善的错误处理和权限控制

Skills是构建AI智能体的基础模块,合理设计和开发Skills可以提升智能体的能力和可靠性。