agents-sdk

Créez des agents IA sur Cloudflare Workers en utilisant l'Agents SDK. À charger lors de la création d'agents avec état, de workflows durables, d'applications WebSocket temps réel, de tâches planifiées, de serveurs MCP, d'applications de chat, d'agents vocaux ou d'automatisation de navigateur. Couvre la classe Agent, la gestion d'état, les RPC appelables, les Workflows, l'exécution durable, les queues, les retries, l'observabilité et les React hooks. Privilégie la récupération depuis la documentation Cloudflare plutôt que les connaissances pré-entraînées.

npx skills add https://github.com/cloudflare/skills --skill agents-sdk

SDK Agents Cloudflare

Votre connaissance du SDK Agents peut être obsolète. Préférez la récupération à la pré-formation pour toute tâche liée au SDK Agents.

Sources de récupération

Docs Cloudflare : https://developers.cloudflare.com/agents/

Sujet URL Docs Utiliser pour
Démarrage Quick start Premier agent, configuration du projet
Ajouter à un projet existant Add to existing project Installer dans une app Workers existante
Configuration Configuration wrangler.jsonc, bindings, assets, déploiement
Classe Agent Agents API Cycle de vie agent, patterns, pièges
État Store and sync state setState, validateStateChange, persistance
Routage Routing Patterns d'URL, routeAgentRequest
Méthodes appelables Callable methods @callable, RPC, streaming, timeouts
Planification Schedule tasks schedule(), scheduleEvery(), cron
Workflows Run workflows AgentWorkflow, tâches multi-étapes durables
HTTP/WebSockets WebSockets Hooks de cycle de vie, hibernation
Agents de chat Chat agents AIChatAgent, streaming, tools, persistance
Client SDK Client SDK useAgent, useAgentChat, React hooks
Outils client Client tools Outils côté client, autoContinueAfterToolResult
Messages pilotés par le serveur Trigger patterns saveMessages, waitUntilStable, tours initiés par le serveur
Streaming reprise Resumable streaming Récupération de stream à la déconnexion
Email Email Routage email, secure reply resolver
Client MCP MCP client Connexion aux serveurs MCP
Serveur MCP MCP server Construire des serveurs MCP avec McpAgent
Transports MCP MCP transports HTTP streamable, SSE, options de transport RPC
Sécuriser les serveurs MCP Securing MCP OAuth, proxy MCP, renforcement
Boucle humaine Human-in-the-loop Flux d'approbation, needsApproval, workflows
Exécution durable Durable execution runFiber(), stash(), survivant à l'éviction DO
Queue Queue Queue FIFO intégrée, queue()
Tentatives Retries this.retry(), backoff/jitter
Observabilité Observability Événements diagnostics-channel
Notifications push Push notifications Web Push + VAPID depuis les agents
Webhooks Webhooks Recevoir des webhooks externes
Auth multi-domaines Cross-domain auth Auth WebSocket, tokens, CORS
Connexions en lecture seule Readonly shouldConnectionBeReadonly
Voix Voice STT/TTS expérimental, withVoice
Naviguer sur le web Browser tools Automatisation navigateur CDP expérimentale
Think Think Classe agent de chat expérimentale haut niveau
Migrations AI SDK v5, AI SDK v6 Upgrade @cloudflare/ai-chat

Capacités

Le SDK Agents fournit :

  • État persistant — Soutenu par SQLite, auto-synchronisé aux clients via setState
  • RPC appelable — Méthodes @callable() invoquées via WebSocket
  • Planification — Tâches uniques, récurrentes (scheduleEvery), et cron
  • Workflows — Traitement multi-étapes durable via AgentWorkflow
  • Exécution durablerunFiber() / stash() pour le travail survivant à l'éviction DO
  • Queue — Queue FIFO intégrée avec tentatives via queue()
  • Tentativesthis.retry() avec backoff exponentiel et jitter
  • Intégration MCP — Se connecter à des serveurs MCP ou construire les vôtres avec McpAgent
  • Gestion des emails — Recevoir et répondre aux emails avec routage sécurisé
  • Chat streamingAIChatAgent avec streams reprenables, persistance des messages, tools
  • Messages pilotés par le serveursaveMessages, waitUntilStable pour les tours agents proactifs
  • React hooksuseAgent, useAgentChat pour les apps clients
  • Observabilité — Événements diagnostics_channel pour l'état, RPC, planification, cycle de vie
  • Notifications push — Livraison Web Push + VAPID depuis les agents
  • Webhooks — Recevoir et vérifier les webhooks externes
  • Voix (expérimental) — STT/TTS via @cloudflare/voice
  • Outils navigateur (expérimental) — Navigation alimentée par CDP via agents/browser
  • Think (expérimental) — Agent de chat haut niveau via @cloudflare/think

D'ABORD : Vérifier l'installation

npm ls agents  # Devrait afficher le package agents

Si non installé :

npm install agents

Pour les agents de chat :

npm install agents @cloudflare/ai-chat ai @ai-sdk/react

Configuration Wrangler

{
  "compatibility_flags": ["nodejs_compat"],
  "durable_objects": {
    "bindings": [{ "name": "MyAgent", "class_name": "MyAgent" }]
  },
  "migrations": [{ "tag": "v1", "new_sqlite_classes": ["MyAgent"] }]
}

Pièges :

  • Ne PAS activer experimentalDecorators dans tsconfig (casse @callable)
  • Ne jamais éditer les anciennes migrations — ajouter toujours de nouvelles balises
  • Chaque classe agent a besoin de son propre binding DO + entrée migration
  • Ajouter "ai": { "binding": "AI" } pour Workers AI

Classe Agent

import { Agent, routeAgentRequest, callable } from "agents";

type State = { count: number };

export class Counter extends Agent<Env, State> {
  initialState = { count: 0 };

  validateStateChange(nextState: State, source: Connection | "server") {
    if (nextState.count < 0) throw new Error("Count cannot be negative");
  }

  onStateUpdate(state: State, source: Connection | "server") {
    console.log("State updated:", state);
  }

  @callable()
  increment() {
    this.setState({ count: this.state.count + 1 });
    return this.state.count;
  }
}

export default {
  fetch: (req, env) => routeAgentRequest(req, env) ?? new Response("Not found", { status: 404 })
};

Routage

Les requêtes s'acheminent vers /agents/{agent-name}/{instance-name} :

Classe URL
Counter /agents/counter/user-123
ChatRoom /agents/chat-room/lobby

Client : useAgent({ agent: "Counter", name: "user-123" })

Routage personnalisé : utiliser getAgentByName(env.MyAgent, "instance-id") puis agent.fetch(request).

APIs principales

Tâche API
Lire l'état this.state.count
Écrire l'état this.setState({ count: 1 })
Requête SQL this.sql`SELECT * FROM users WHERE id = ${id}`
Planifier (délai) await this.schedule(60, "task", payload)
Planifier (cron) await this.schedule("0 * * * *", "task", payload)
Planifier (intervalle) await this.scheduleEvery(30, "poll")
Méthode RPC @callable() myMethod() { ... }
RPC streaming @callable({ streaming: true }) stream(res) { ... }
Démarrer workflow await this.runWorkflow("ProcessingWorkflow", params)
Fiber durable await this.runFiber("name", async (ctx) => { ... })
Ajouter en queue this.queue("handler", payload)
Tentative avec backoff await this.retry(fn, { maxAttempts: 5 })
Diffuser aux clients this.broadcast(message)
Obtenir les connexions this.getConnections(tag?)

Client React

import { useAgent } from "agents/react";

function App() {
  const [state, setLocalState] = useState({ count: 0 });

  const agent = useAgent({
    agent: "Counter",
    name: "my-instance",
    onStateUpdate: (newState) => setLocalState(newState),
    onIdentity: (name, agentType) => console.log(`Connected to ${name}`)
  });

  return (
    <button onClick={() => agent.setState({ count: state.count + 1 })}>
      Count: {state.count}
    </button>
  );
}

Références

Cœur

Chat & Streaming

Traitement en arrière-plan

Intégrations

Expérimental

Skills similaires