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