Skip to main content

概述

技能(Skill)是 PAI 的可扩展行为规则系统。每个技能是一份 Markdown 文档,定义了 Agent 在特定场景下的触发条件、工作流程、约束和输出格式。技能系统让用户可以通过自然语言定制 Agent 的行为模式。

Markdown 驱动

技能以 SKILL.md 格式存储,可读性强

自然语言管理

通过对话或 /skill 命令创建、更新技能

版本控制

每次修改自动创建新版本,支持版本回溯

生命周期管理

DRAFT -> PUBLISHED -> DISABLED 完整状态流转

SKILL.md 格式

每个技能文档包含 frontmatter 元数据和 4 个必需章节:

必需章节

缺少任何必需章节或 frontmatter 中的 namedescription 字段,技能校验将不通过。

技能类型

内建技能

系统自带的只读技能,存储在 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() 在对话处理时按以下逻辑加载匹配的技能:
  1. 加载所有内建技能文档
  2. 查询用户已发布的技能
  3. 对每个技能计算与当前查询的匹配分数
  4. 匹配规则:
    • 技能名称出现在查询中:+10 分
    • 技能 slug 出现在查询中:+8 分
    • 名称/slug/描述中的词命中查询:每词 +2 分
  5. 返回匹配度最高的技能列表

Slug 生成

技能使用 slug 作为唯一标识符:
  • 将名称转为小写,非字母数字字符替换为连字符
  • 合并连续连字符,去除首尾连字符
  • 最大长度 64 字符
  • 无法生成有效 slug 时使用 MD5 哈希回退:skill-{md5[:10]}

/skill 命令

用户可通过斜杠命令管理技能: 除了命令方式,用户也可以用自然语言描述需求(如”帮我创建一个翻译技能”),系统会自动解析意图并执行对应操作。