← Создание агентов на Cloudflare / agents / runtime / execution
Agent Skills
Agent Skills представляют собой инструкции, ресурсы и скрипты, доступные по запросу. Источник навыков предоставляет каталог названий и описаний навыков; агент добавляет этот каталог в системный промпт и открывает инструменты, которые модель может использовать, когда задача пользователя соответствует навыку, поэтому большая библиотека возможностей не перегружает каждый промпт.
Движок навыков находится в agents/skills и не привязан к конкретному фреймворку, поэтому любой агент (включая обычный AIChatAgent onChatMessage) может собрать SkillRegistry. @cloudflare/think повторно экспортирует это как skills пространство имён и связывает getSkills() в ход автоматически.
Использование skills с Think
Встроенные skills обычно импортируются с помощью плагина Agents Vite:
import { Think, skills } from "@cloudflare/think";
import bundledSkills from "agents:skills"; // resolves to ./skills next to this file
export class MyAgent extends Think {
getSkills() {
return [
bundledSkills,
skills.r2(this.env.SKILLS_BUCKET, { prefix: "skills/" }),
];
}
getSkillScriptRunner() {
return skills.runner({
loader: this.env.LOADER,
workspaceInstance: this.workspace,
});
}
}import { Think, skills } from "@cloudflare/think";
import bundledSkills from "agents:skills"; // resolves to ./skills next to this file
type Env = {
AI: Ai;
LOADER: WorkerLoader;
SKILLS_BUCKET: R2Bucket;
};
export class MyAgent extends Think<Env> {
getSkills() {
return [
bundledSkills,
skills.r2(this.env.SKILLS_BUCKET, { prefix: "skills/" }),
];
}
getSkillScriptRunner() {
return skills.runner({
loader: this.env.LOADER,
workspaceInstance: this.workspace,
});
}
}agents:skills разрешается в ./skills каталог рядом с импортирующим файлом; используйте agents:skills/<dir> чтобы указать на соседний каталог с другим именем. Переменная agents:skills импорт типизируется амбиентными объявлениями, которые поставляются вместе с agents, поэтому импорт Think в том же файле делает тип доступным в области видимости (для файла, который импортирует только спецификатор, добавьте /// <reference types="agents/skills-module" />). Если вы не используете плагин Agents Vite, соберите источник с помощью skills.fromManifest(...) взамен.
Источники применяются по порядку: побеждает тот источник, который первым зарегистрирует имя навыка, а более поздние дубликаты (или источник, который не удалось загрузить) пропускаются с записью предупреждения в лог, вместо того чтобы приводить к сбою агента.
Импортируемый каталог должен содержать один дочерний каталог для каждого skill:
src/skills/release-notes/SKILL.md
src/skills/release-notes/scripts/format-release-notes.ts
src/skills/release-notes/references/style-guide.mdИнструменты skills
Когда skills доступны, агент предоставляет:
| Инструмент | Назначение |
|---|---|
activate_skill |
Загружает инструкции подходящего навыка и список сопутствующих ресурсов |
read_skill_resource |
Прочитайте встроенный ресурс по { name, path } или skill-name/path |
run_skill_script |
Запустите собранный скрипт, когда getSkillScriptRunner() возвращает runner |
Skills не являются текстом, который постоянно присутствует в системном промпте. Используйте getSystemPrompt() или блок контекста Session для поведения, применимого к каждому ходу. Навыки используйте для процедур под конкретные задачи, справочных материалов, скриптов, шаблонов и ресурсов, которые следует загружать только при необходимости.
Выполнение скрипта
Выполнение скриптов является опциональным и требует привязки Worker Loader:
{
"worker_loaders": [{ "binding": "LOADER" }]
}[[worker_loaders]]
binding = "LOADER"skills.runner() является экспериментальным и выполняет скрипты на JavaScript, TypeScript, Python и Bash под scripts/. TypeScript компилируется с помощью @cloudflare/worker-bundler; Python выполняется как Python Dynamic Workers; Bash выполняется через just-bash.
Скрипты на JavaScript и TypeScript оформляются в виде функций:
export default async function run(input, ctx) {
const guide = ctx.files["references/style-guide.md"]; // bundled text resources
const docs = await ctx.workspace.readFile("README.md"); // gated by permission
const summary = await ctx.tools.call("summarize", { input }); // explicit tools
await ctx.output.writeFile("notes.md", summary); // scratch artifact
return { ok: true };
}import type { SkillRunContext } from "@cloudflare/think";
export default async function run(input: unknown, ctx: SkillRunContext) {
const guide = ctx.files["references/style-guide.md"]; // bundled text resources
const docs = await ctx.workspace.readFile("README.md"); // gated by permission
const summary = await ctx.tools.call("summarize", { input }); // explicit tools
await ctx.output.writeFile("notes.md", summary); // scratch artifact
return { ok: true };
}ctx это { skill, files, workspace, tools, output }. ctx.files хранит сборные текстовые ресурсы по относительному пути, ctx.workspace контролируется разрешением workspace, ctx.tools предоставляет только те инструменты, которые получил runner, и ctx.output.writeFile(name, content) возвращает модели scratch-артефакты (не изменяя workspace). Python и Bash вместо этого используют контракт на основе путей: /input.json, /context.json, объединённые ресурсы под /skill, а также /output для артефактов.
Передача workspaceInstance по умолчанию даёт скриптам доступ к рабочему пространству только для чтения. Доступ к сети, инструменты и запись в рабочее пространство нужно включать отдельно. Тайм-аут по умолчанию составляет 30 секунд.
Пример
import { Think, skills } from "@cloudflare/think";
export class SkillsAgent extends Think {
getSkills() {
return [skills.r2(this.env.SKILLS_BUCKET, { prefix: "skills/" })];
}
}import { Think, skills } from "@cloudflare/think";
export class SkillsAgent extends Think<Env> {
getSkills() {
return [skills.r2(this.env.SKILLS_BUCKET, { prefix: "skills/" })];
}
}См. agent-skills пример ↗ для встроенных skills, skills на основе R2 и выполнения скриптов.
См. также
- Think : связывает
getSkills()иgetSkillScriptRunner()в агентный цикл - Инструменты Think : как инструменты skills объединяются с инструментами рабочей области, пользовательскими, MCP и клиентскими инструментами