INTEGRITY Dokumentace

Agent Skills

Agent Skills jsou instrukce, zdroje a skripty dostupné na vyžádání. Zdroj dovedností poskytuje katalog názvů a popisů dovedností; agent tento katalog přidá do systémového promptu a zpřístupní nástroje, které model může použít, když úkol uživatele odpovídá některé dovednosti: díky tomu rozsáhlá knihovna schopností nezahltí každý prompt.

Engine dovedností se nachází v agents/skills a je nezávislý na frameworku, takže libovolný agent (včetně obyčejného AIChatAgent onChatMessage) může sestavit SkillRegistry. @cloudflare/think ho reexportuje jako skills namespace a propojuje getSkills() do kola automaticky.

Používání Skills s Think

Předpřipravené skills se obvykle importují pomocí Agents Vite plugin:

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 se vyřeší na ./skills adresáře vedle importujícího souboru; použijte agents:skills/<dir> k nasměrování na jinak pojmenovaný sourozenecký adresář. agents:skills import je typován ambientními deklaracemi, které jsou součástí agents, takže import Think ve stejném souboru zpřístupní typ v daném rozsahu platnosti (pro soubor, který importuje pouze specifikátor, přidejte /// <reference types="agents/skills-module" />). Pokud nepoužíváte Agents Vite plugin, sestavte zdroj pomocí skills.fromManifest(...) místo toho.

Zdroje se aplikují v daném pořadí, přičemž vyhrává první zdroj, který zaregistruje daný název dovednosti; pozdější duplicity (nebo zdroj, který se nepodaří načíst) se přeskočí se zaznamenaným varováním, místo aby způsobily selhání agenta.

Importovaný adresář by měl obsahovat jeden podadresář pro každou dovednost:

src/skills/release-notes/SKILL.md
src/skills/release-notes/scripts/format-release-notes.ts
src/skills/release-notes/references/style-guide.md

Nástroje typu Skill

Když jsou k dispozici skills, agent zpřístupní:

Nástroj Účel
activate_skill Načíst instrukce odpovídající skill a přiložený seznam zdrojů
read_skill_resource Přečíst sdružený prostředek podle { name, path } nebo skill-name/path
run_skill_script Spusťte sbalený skript, když getSkillScriptRunner() vrátí runner

Skills nejsou trvale aktivní text systémového promptu. Použijte getSystemPrompt() nebo blok kontextu Session pro chování, které by se mělo uplatnit v každém kole. Dovednosti použijte pro postupy, reference, skripty, šablony a materiály specifické pro daný úkol, které se mají načíst jen tehdy, když jsou relevantní.

Spouštění skriptu

Spouštění skriptů je volitelné a vyžaduje vazbu Worker Loader:

{
	"worker_loaders": [{ "binding": "LOADER" }]
}
[[worker_loaders]]
binding = "LOADER"

skills.runner() je experimentální a spouští skripty JavaScript, TypeScript, Python a Bash pod scripts/. TypeScript se kompiluje pomocí @cloudflare/worker-bundler; Python běží jako Python Dynamic Workers; Bash běží prostřednictvím just-bash.

Skripty v JavaScriptu a TypeScriptu mají podobu funkce:

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 je { skill, files, workspace, tools, output }. ctx.files uchovává sbalené textové prostředky podle relativní cesty, ctx.workspace je podmíněno oprávněním workspace, ctx.tools zpřístupňuje pouze nástroje, které runner dostal, a ctx.output.writeFile(name, content) vrátí modelu dočasné artefakty (neupravuje pracovní prostor). Python a Bash místo toho používají kontrakt založený na cestách: /input.json, /context.json, sdružené prostředky pod /skill, a /output pro artefakty.

Předávání workspaceInstance ve výchozím nastavení dává skriptům přístup k pracovnímu prostoru pouze pro čtení. Přístup k síti, nástroje a zápis do pracovního prostoru je nutné povolit explicitně. Výchozí časový limit je 30 sekund.

Příklad

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/" })];
	}
}

Viz agent-skills příklad ↗ pro předpřipravené skills, skills uložené v R2 a spouštění skriptů.