概述
技能(Skill)是 PAI 的可扩展行为规则系统。每个技能是一份 Markdown 文档,定义了 Agent 在特定场景下的触发条件、工作流程、约束和输出格式。技能系统让用户可以通过自然语言定制 Agent 的行为模式。Markdown 驱动
技能以 SKILL.md 格式存储,可读性强
自然语言管理
通过对话或 /skill 命令创建、更新技能
版本控制
每次修改自动创建新版本,支持版本回溯
生命周期管理
DRAFT -> PUBLISHED -> DISABLED 完整状态流转
SKILL.md 格式
每个技能文档包含 frontmatter 元数据和 4 个必需章节:必需章节
| 章节 | 用途 |
|---|---|
# Trigger | 定义技能的触发条件 |
# Workflow | 描述执行步骤 |
# Constraints | 约束规则与限制 |
# Output Contract | 输出格式约定 |
技能类型
内建技能
系统自带的只读技能,存储在backend/skills/ 目录:
| 技能 | 说明 |
|---|---|
translator | 翻译助手 |
writer | 写作助手 |
- 新格式:
backend/skills/<skill-name>/SKILL.md - 兼容格式:
backend/skills/*.md
用户技能
用户通过自然语言或/skill 命令创建的自定义技能,存储在数据库中。
技能生命周期
| 状态 | 说明 |
|---|---|
DRAFT | 草稿,新创建的技能默认状态 |
PUBLISHED | 已发布,在对话中可被匹配和加载 |
DISABLED | 已禁用,暂停使用但不删除 |
版本管理
技能采用递增版本号管理:- 每次更新创建新的
SkillVersion记录 Skill.active_version字段追踪当前激活版本- 版本内容存储在
skill_versions表的content_md字段
技能意图解析
当用户输入与技能相关的指令时,系统通过两层机制识别意图:LLM 结构化解析
使用 LLM 提取用户意图,输出结构化结果:
action:操作类型(create / update / delete / list / show / publish / disable / help)skill_name:技能名称skill_slug:技能标识target:操作目标
技能加载
load_skills() 在对话处理时按以下逻辑加载匹配的技能:
- 加载所有内建技能文档
- 查询用户已发布的技能
- 对每个技能计算与当前查询的匹配分数
- 匹配规则:
- 技能名称出现在查询中:+10 分
- 技能 slug 出现在查询中:+8 分
- 名称/slug/描述中的词命中查询:每词 +2 分
- 返回匹配度最高的技能列表
Slug 生成
技能使用 slug 作为唯一标识符:- 将名称转为小写,非字母数字字符替换为连字符
- 合并连续连字符,去除首尾连字符
- 最大长度 64 字符
- 无法生成有效 slug 时使用 MD5 哈希回退:
skill-{md5[:10]}
/skill 命令
用户可通过斜杠命令管理技能:| 命令 | 功能 |
|---|---|
/skill list | 列出所有技能 |
/skill show <slug> | 查看技能详情 |
/skill create | 创建新技能 |
/skill update <slug> | 更新技能内容 |
/skill publish <slug> | 发布技能 |
/skill disable <slug> | 禁用技能 |
/skill delete <slug> | 删除技能 |