跳转到主要内容

Skills

Skills 是可复用的 prompt 模块。可以加载 SKILL.md,把面向特定领域的指令添加到会话中。

概览

  • 可以将领域知识作为技能复用
  • 可以在项目之间共享相同的行为
  • 可以按会话切换启用 / 禁用
在 Laravel 版中使用 SessionConfigskillDirectoriesdisabledSkills 进行配置。

基本使用方式

skillDirectories 中指定父目录后,会加载其下每个子目录中的 SKILL.md
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionConfig;

Copilot::start(function (CopilotSession $session) {
    $response = $session->sendAndWait(prompt: '从安全角度评审这个差异');

    dump($response->content());
}, config: new SessionConfig(
    skillDirectories: [
        base_path('skills'),
    ],
));
也可以用数组形式指定。
Copilot::run(
    prompt: '提出 README 的改进建议',
    config: [
        'skillDirectories' => [base_path('skills')],
    ],
);

禁用技能

使用 disabledSkills 可以只禁用一部分已加载的技能。
$config = new SessionConfig(
    skillDirectories: [base_path('skills')],
    disabledSkills: ['experimental-feature', 'deprecated-tool'],
);

目录结构

skills/
├── code-review/
│   └── SKILL.md
└── documentation/
    └── SKILL.md
skillDirectories 中指定像 skills/ 这样的父目录。

SKILL.md 的格式

SKILL.md 是 Markdown,可以选择性附带 YAML frontmatter。
---
name: code-review
description: Specialized code review capabilities
---

# Code Review Guidelines

When reviewing code, always check for:

1. Security vulnerabilities
2. Performance issues
3. Code style
4. Test coverage
frontmatter 的主要项:
  • name: 技能标识(在 disabledSkills 中指定的名字)
  • description: 技能的简短描述
省略 name 时会使用目录名。

与 Custom Agents 结合

customAgents[].skills 中指定技能名后,当目标代理启动时,会事先加载该技能的内容。
use Revolution\Copilot\Types\SessionConfig;

$config = new SessionConfig(
    skillDirectories: [base_path('skills/security')],
    customAgents: [
        [
            'name' => 'security-auditor',
            'description' => 'Security-focused code reviewer',
            'prompt' => 'Focus on OWASP Top 10 vulnerabilities',
            'skills' => ['security-scan', 'dependency-check'],
        ],
    ],
);
省略 skills 时,代理中不会注入技能内容。

通过 RPC 查看和操作

技能的发现、启用 / 禁用也可以通过 RPC 操作。
// 在服务器级别发现技能
$result = Copilot::client()->rpc()->skills()->discover();

// 会话内技能列表
$session->rpc()->skills()->list();

// 在会话内单独切换启用 / 禁用
$session->rpc()->skills()->enable(['name' => 'security-scan']);
$session->rpc()->skills()->disable(['name' => 'security-scan']);

最佳实践

  • 按领域拆分技能(如 skills/securityskills/testing
  • 在 frontmatter 中写上 namedescription
  • 有冲突的指令时通过 disabledSkills 显式排除
  • 先单独验证再组合多个技能

参考

最后修改于 2026年7月13日