agents-sdk

--- Construisez des agents IA sur Cloudflare Workers en utilisant le Agents SDK. Chargez lors de la création d'agents avec état, de workflows durables, d'applications WebSocket en 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, l'appel RPC callable, les Workflows, l'exécution durable, les files d'attente, les tentatives, l'observabilité et les hooks React. Privilégie la récupération depuis la documentation Cloudflare plutôt que des connaissances pré-entraînées.

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

SDK d'Agents Cloudflare

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

Sources de récupération

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

Sujet URL de la documentation Utiliser pour
Démarrage rapide Quick start Premier agent, configuration du projet
Ajouter à un projet existant Add to existing project Installer dans une application Workers existante
Configuration Configuration wrangler.jsonc, bindings, assets, déploiement
Classe Agent Agents API Cycle de vie de l'agent, modèles, pièges
État Store and sync state setState, validateStateChange, persistance
Routage Routing Modèles 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, outils, persistance
Client SDK Client SDK useAgent, useAgentChat, hooks React
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 flux en cas de déconnexion
Email Email Routage d'email, résolveur de réponse sécurisé
Client MCP MCP client Connexion aux serveurs MCP
Serveur MCP MCP server Construire des serveurs MCP avec McpAgent
Transports MCP MCP transports HTTP diffusable, SSE, options de transport RPC
Sécurisation des serveurs MCP Securing MCP OAuth, proxy MCP, durcissement
Boucle humaine Human-in-the-loop Flux d'approbation, needsApproval, workflows
Exécution durable Durable execution runFiber(), stash(), survie à l'éviction DO
File d'attente Queue File d'attente FIFO intégrée, queue()
Tentatives Retries this.retry(), backoff/jitter
Observabilité Observability Événements diagnostics-channel
Notifications push Push notifications Web Push + VAPID des agents
Webhooks Webhooks Réception de webhooks externes
Auth multi-domaines Cross-domain auth Auth WebSocket, jetons, CORS
Connexions en lecture seule Readonly shouldConnectionBeReadonly
Voix Voice STT/TTS expérimental, withVoice
Parcourir le web Browser tools Automatisation de navigateur CDP expérimentale
Réfléchir Think Classe d'agent de chat de niveau supérieur expérimentale
Migrations AI SDK v5, AI SDK v6 Mise à niveau de @cloudflare/ai-chat

Capacités

Le SDK d'Agents fournit :

  • État persistant — Sauvegardé par SQLite, auto-synchronisé aux clients via setState
  • RPC appelable — Méthodes @callable() invoquées sur WebSocket
  • Planification — Tâches uniques, récurrentes (scheduleEvery) et cron
  • Workflows — Traitement de fond multi-étapes durable via AgentWorkflow
  • Exécution durablerunFiber() / stash() pour les travaux qui survivent à l'éviction DO
  • File d'attente — File d'attente FIFO intégrée avec tentatives via queue()
  • Tentativesthis.retry() avec backoff exponentiel et jitter
  • Intégration MCP — Connexion à des serveurs MCP ou construction des vôtres avec McpAgent
  • Gestion d'email — Réception et réponse aux emails avec routage sécurisé
  • Chat streamingAIChatAgent avec flux reprises, persistance de messages, outils
  • Messages pilotés par le serveursaveMessages, waitUntilStable pour les tours d'agent proactifs
  • Hooks ReactuseAgent, useAgentChat pour les applications clientes
  • Observabilité — Événements diagnostics_channel pour l'état, RPC, planification, cycle de vie
  • Notifications push — Livraison Web Push + VAPID depuis les agents
  • Webhooks — Réception et vérification de webhooks externes
  • Voix (expérimental) — STT/TTS via @cloudflare/voice
  • Outils de navigation (expérimental) — Navigation alimentée par CDP via agents/browser
  • Think (expérimental) — Agent de chat de niveau supérieur via @cloudflare/think

PREMIÈRE ÉTAPE : Vérifier l'installation

npm ls agents  # Should show agents package

Si pas 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 modifier les anciennes migrations — toujours ajouter de nouvelles balises
  • Chaque classe d'agent a besoin de sa propre liaison DO + entrée de 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 sont routées 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é : utilisez getAgentByName(env.MyAgent, "instance-id") puis agent.fetch(request).

APIs essentielles

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 un workflow await this.runWorkflow("ProcessingWorkflow", params)
Fibre durable await this.runFiber("name", async (ctx) => { ... })
Ajouter à la file this.queue("handler", payload)
Nouvelle 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

Essentielles

Chat et Streaming

Traitement en arrière-plan

Intégrations

Expérimental