Agent Skills
Создавайте, управляйте и делитесь Skills для расширения возможностей Qwen Code.
В этом руководстве показано, как создавать, использовать и управлять Agent Skills в Qwen Code. Skills — это модульные возможности, которые повышают эффективность модели с помощью структурированных папок, содержащих инструкции (а также, при необходимости, скрипты и ресурсы).
Предварительные требования
- Qwen Code (последняя версия)
- Базовое знакомство с Qwen Code (Quickstart)
Что такое Agent Skills?
Agent Skills упаковывают экспертные знания в обнаруживаемые возможности. Каждый Skill состоит из файла SKILL.md с инструкциями, которые модель может загружать при необходимости, а также дополнительных файлов, таких как скрипты и шаблоны.
Как вызываются Skills
Skills вызываются моделью — модель автономно решает, когда их использовать, на основе вашего запроса и описания Skill. Это отличается от slash-команд, которые вызываются пользователем (вы явно вводите /command).
Если вы хотите явно вызвать Skill, введите его как slash-команду, используя имя Skill:
/<skill-name>Начните вводить /, чтобы использовать автодополнение и просматривать доступные Skills вместе с их описаниями. Команда /skills открывает панель Skills, где можно интерактивно просматривать, искать, включать и запускать Skills.
Примечание: Если ранее вы запускали Skill с помощью
/skills <skill-name>, теперь этот синтаксис просто открывает панель Skills и игнорирует конечный аргумент. Используйте/<skill-name>для прямого запуска Skill.
Преимущества
- Расширяйте возможности Qwen Code для ваших рабочих процессов
- Делитесь экспертными знаниями с командой через git
- Сокращайте количество повторяющихся промптов
- Комбинируйте несколько Skills для сложных задач
Создание Skill
Skills хранятся в виде директорий, содержащих файл SKILL.md.
Создание проектного Skill с помощью /learn
Используйте /learn, чтобы извлечь существующий источник знаний в переиспользуемый проектный Skill:
/learn https://docs.example.com/api
/learn ~/projects/acme-sdk
/learn Our deploy process: run migrate, deploy the service, then check healthКоманда выполняется как обычный ход агента и создаёт результат в
.qwen/skills/learned-skill-<name>/SKILL.md с source: learned в
фронтматере. Проверьте сгенерированные инструкции перед использованием или публикацией.
/learn также принимает локальные или прямые ссылки на видео .mp4, .webm, .mov и .m4v.
Добавьте текст после пути или URL, чтобы сфокусировать сгенерированный Skill на одной части
туториала:
/learn ./tutorial.mp4 focus on the deployment workflowДля обучения по видео требуется модель с поддержкой видео у OpenAI-совместимого провайдера. URL-адреса страниц YouTube не являются прямым видео-вводом; скачайте видео в рабочее пространство и передайте его локальный путь вместо этого.
Личные Skills
Личные Skills доступны во всех ваших проектах. Храните их в ~/.qwen/skills/:
mkdir -p ~/.qwen/skills/my-skill-nameИспользуйте личные Skills для:
- Ваших индивидуальных рабочих процессов и предпочтений
- Разрабатываемых вами Skills
- Помощников личной продуктивности
Проектные Skills
Проектные Skills доступны вашей команде. Храните их в .qwen/skills/ внутри вашего проекта:
mkdir -p .qwen/skills/my-skill-nameИспользуйте проектные Skills для:
- Командных рабочих процессов и соглашений
- Специфичных для проекта экспертных знаний
- Общих утилит и скриптов
Проектные Skills можно коммитить в git, и они автоматически станут доступны участникам команды.
Поддержка автогенерированных проектных Skills
Qwen Code отслеживает успешное использование сгенерированных проектных Skills локально, в том числе когда генерация новых Auto Skill отключена, чтобы при повторном включении обслуживания недавно использованный skill не был ошибочно принят за неактивный. Когда Auto Skill включён, он периодически перемещает неактивные сгенерированные Skills из активной библиотеки. Управляются только директории с именем .qwen/skills/auto-skill-*, чей фронтматер SKILL.md содержит source: auto-skill; личные, расширения, bundled и написанные вручную Skills никогда не выбираются.
- Через 30 дней без успешного использования или редактирования
SKILL.mdauto-skill помечается как устаревший. - Через 90 дней его полная директория перемещается в
.qwen/archived-skills/. Ничего не удаляется безвозвратно. - Автоматическое обслуживание запускается не чаще одного раза в 7 дней в доверенных рабочих пространствах. Каждый вновь обнаруженный auto-skill получает полный льготный период до начала обслуживания.
- Закреплённый auto-skill исключается из автоматических переходов в устаревшее состояние и архивирование до тех пор, пока не будет откреплён.
- Имена архивных директорий остаются зарезервированными, и существующий адресат архива пропускает только это совпадение, а не останавливает обслуживание для других skills.
Используйте /curator, чтобы увидеть активные, устаревшие, архивные и закреплённые auto-skills. Выполните /curator run --dry-run для предварительного просмотра обслуживания, /curator run для его немедленного применения, /curator pin <directory> или /curator unpin <directory> для управления обслуживанием каждого skill, или /curator restore <directory> для перемещения архивного auto-skill обратно в активную библиотеку.
Статус и предварительный просмотр dry-run доступны в safe mode и недоверенных рабочих пространствах. Применение обслуживания, изменение закрепления и восстановление архивных auto-skills требуют доверенного рабочего пространства вне safe mode.
Написание SKILL.md
Создайте файл SKILL.md с YAML frontmatter и Markdown-контентом:
---
name: your-skill-name
description: Brief description of what this Skill does and when to use it
priority: 10
---
# Your Skill Name
## Instructions
Provide clear, step-by-step guidance for Qwen Code.
## Examples
Show concrete examples of using this Skill.Требования к полям
В настоящее время Qwen Code проверяет, что:
name— это непустая строка, соответствующая/^[\p{L}\p{N}_:.-]+$/u— буквы и цифры Unicode (CJK / кириллица / латиница с диакритикой — все подходит), а также_,:,.,-. Пробелы, слеши, скобки и другие структурно небезопасные символы отклоняются на этапе парсинга.description— непустая строкаpriority— необязательное поле. Если указано, это должно быть конечное число. Более высокие значения сортируются раньше только в списке/skills— автодополнение slash-команд (ввод/) и просмотр пользовательских команд через/helpостаются в алфавитном порядке, поэтому Skill с высоким приоритетом никогда не меняет порядок встроенных команд. Пропущенные или недействительные значения считаются незаданными, что эквивалентно0.
Рекомендуемые соглашения:
- Предпочитайте нижний регистр ASCII с дефисами для имен, которыми можно делиться (например,
tsx-helper) - Делайте
descriptionконкретным: укажите как что делает Skill, так и когда его использовать (ключевые слова, которые пользователи будут естественно упоминать) - Используйте
priorityэкономно для Skills, которые должны надежно появляться перед стандартным алфавитным порядком в/skills. Отрицательные приоритеты разрешены и сортируются ниже незаданных Skills.
Опционально: ограничение Skill путями к файлам (paths:)
Для Skills, которые важны только для определенных частей кодовой базы, добавьте список paths: с glob-шаблонами. Skill не будет отображаться в списке доступных Skills для модели, пока вызов инструмента не затронет соответствующий файл:
---
name: tsx-helper
description: React TSX component helper
paths:
- 'src/**/*.tsx'
- 'packages/*/src/**/*.tsx'
---Примечания:
- Globs сопоставляются относительно корня проекта с помощью picomatch ; файлы за пределами корня проекта никогда не активируют Skill.
- Skill, ограниченный путями, остается активным до конца сессии после обращения к соответствующему файлу. Новая сессия или
refreshCache, вызванный редактированием любого файла Skill, сбрасывает активации. paths:ограничивает только обнаружение моделью, и только на уровне списка SkillTool. Если не установленоuser-invocable: false, вы всегда можете самостоятельно вызвать Skill, ограниченный путями, через/<skill-name>или селектор/skills— этот пользовательский путь запускает тело Skill независимо от состояния активации. Однако на стороне модели ограничение действует до тех пор, пока не будет затронут соответствующий файл: вызов через слеш не разблокирует активацию на стороне модели, поэтому, если вы хотите, чтобы модель выстроила цепочку после вашего вызова (сама вызвалаSkill { skill: ... }), сначала обратитесь к файлу, соответствующемуpaths:skill.- Комбинирование
paths:сdisable-model-invocation: trueразрешено, но ограничение не имеет эффекта — Skill в любом случае скрыт от модели, поэтому активация по пути никогда его не рекламирует.
Опционально: управление вызовом пользователем и моделью
По умолчанию Skills доступны для вызова пользователем. Чтобы скрыть Skill от прямого использования через slash-команды, но оставить его доступным для вызова моделью, установите user-invocable: false:
---
name: model-only-helper
description: Helper the model can call when appropriate
user-invocable: false
---Это удаляет Skill из вызова через /<skill-name> и результатов селектора /skills. Это не скрывает Skill от модели.
Чтобы скрыть Skill от вызова моделью, но оставить доступным для прямого вызова пользователем, установите disable-model-invocation: true:
---
name: manual-helper
description: Helper you invoke manually
disable-model-invocation: true
---Вы можете объединить оба поля, но тогда Skill будет недоступен через обычные пути вызова пользователем или моделью.
Добавление вспомогательных файлов
Создайте дополнительные файлы вместе с SKILL.md:
my-skill/
├── SKILL.md (required)
├── reference.md (optional documentation)
├── examples.md (optional examples)
├── scripts/
│ └── helper.py (optional utility)
└── templates/
└── template.txt (optional template)Ссылайтесь на эти файлы из SKILL.md:
For advanced usage, see [reference.md](reference.md).
Run the helper script:
```bash
python scripts/helper.py input.txt
```Просмотр доступных Skills
Qwen Code обнаруживает Skills из:
- Личных Skills:
~/.qwen/skills/ - Проектных Skills:
.qwen/skills/ - Расширений Skills: Skills, предоставляемые установленными расширениями
- Bundled Skills: Skills, поставляемые вместе с Qwen Code
Skills расширений
Расширения могут предоставлять пользовательские Skills, которые становятся доступными при включении расширения. Эти Skills хранятся в директории skills/ расширения и имеют тот же формат, что и личные и проектные Skills.
Skills расширений автоматически обнаруживаются и загружаются при установке и включении расширения.
Чтобы узнать, какие расширения предоставляют Skills, проверьте наличие поля skills в файле qwen-extension.json расширения.
Чтобы просмотреть доступные Skills, спросите напрямую у Qwen Code:
What Skills are available?Внимание — представление модели и пользователя. Запрос к модели показывает только те Skills, которые модель может видеть в данный момент. Если Skill использует
paths:(см. «Опционально: ограничение Skill путями к файлам» выше), он не будет в этом списке, пока не будет затронут соответствующий файл. Slash-команда/skillsпоказывает Skills, которые вы можете вызвать напрямую; Skills сuser-invocable: falseостаются видимыми на диске и могут быть по-прежнему видимы для модели.
Или просмотрите список, доступный для вызова пользователем, с помощью slash-команды (включая Skills, ограниченные путями, которые еще не активированы):
/skillsИли проверьте файловую систему:
# List personal Skills
ls ~/.qwen/skills/
# List project Skills (if in a project directory)
ls .qwen/skills/
# View a specific Skill's content
cat ~/.qwen/skills/my-skill/SKILL.mdТестирование Skill
После создания Skill протестируйте его, задав вопросы, соответствующие вашему описанию.
Пример: если в вашем описании упоминаются «PDF-файлы»:
Can you help me extract text from this PDF?Модель автономно решает использовать ваш Skill, если он соответствует запросу — вам не нужно явно вызывать его.
Отладка Skill
Если Qwen Code не использует ваш Skill, проверьте следующие распространенные проблемы:
Сделайте описание конкретным
Слишком расплывчато:
description: Helps with documentsКонкретно:
description: Extract text and tables from PDF files, fill forms, merge documents. Use when working with PDFs, forms, or document extraction.Проверьте путь к файлу
- Личные Skills:
~/.qwen/skills/<skill-name>/SKILL.md - Проектные Skills:
.qwen/skills/<skill-name>/SKILL.md
# Personal
ls ~/.qwen/skills/my-skill/SKILL.md
# Project
ls .qwen/skills/my-skill/SKILL.mdПроверьте синтаксис YAML
Недействительный YAML препятствует правильной загрузке метаданных Skill.
cat SKILL.md | head -n 15Убедитесь, что:
- Открывающие
---на 1-й строке - Закрывающие
---перед Markdown-контентом - Действительный синтаксис YAML (без табуляций, правильные отступы)
Просмотр ошибок
Запустите Qwen Code в режиме отладки, чтобы увидеть ошибки загрузки Skills:
qwen --debugПоделиться Skills с командой
Вы можете делиться Skills через репозитории проектов:
- Добавьте Skill в
.qwen/skills/ - Закоммитьте и запушьте
- Участники команды пуллят изменения
git add .qwen/skills/
git commit -m "Add team Skill for PDF processing"
git pushОбновление Skill
Отредактируйте SKILL.md напрямую:
# Personal Skill
code ~/.qwen/skills/my-skill/SKILL.md
# Project Skill
code .qwen/skills/my-skill/SKILL.mdВ обычном режиме Qwen Code отслеживает директории личных и проектных Skills. Добавление, редактирование или удаление Skill автоматически обновляет список Skills и состояние вызова через короткую задержку. Bare mode не запускает эти наблюдатели, поэтому перезапустите Qwen Code, чтобы загрузить изменения Skills в этом режиме.
Удаление Skill
Удалите директорию Skill:
# Personal
rm -rf ~/.qwen/skills/my-skill
# Project
rm -rf .qwen/skills/my-skill
git commit -m "Remove unused Skill"Лучшие практики
Фокусируйте Skills
Один Skill должен решать одну задачу:
- Сфокусированные: «Заполнение PDF-форм», «Анализ Excel», «Git commit-сообщения»
- Слишком широкие: «Обработка документов» (разбейте на более мелкие Skills)
Пишите понятные описания
Помогите модели понять, когда использовать Skills, включив конкретные триггеры:
description: Analyze Excel spreadsheets, create pivot tables, and generate charts. Use when working with Excel files, spreadsheets, or .xlsx data.Тестируйте с командой
- Активируется ли Skill, когда ожидается?
- Понятны ли инструкции?
- Не хватает ли примеров или граничных случаев?