agents-sdk

Par shobcoder · shob

Créez des agents IA sur Cloudflare Workers à l'aide du SDK Agents. À charger 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 ou d'applications de chat. Couvre la classe Agent, la gestion des états, les RPC appelables, l'intégration Workflows et les hooks React.

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

Cloudflare Agents SDK

STOP. Vos connaissances du Agents SDK peuvent être obsolètes. Préférez la récupération de documentation à la pré-formation pour toute tâche Agents SDK.

Documentation

Récupérez la documentation actuelle depuis https://github.com/cloudflare/agents/tree/main/docs avant d'implémenter.

Sujet Doc À utiliser pour
Démarrage rapide docs/getting-started.md Premier agent, configuration du projet
État docs/state.md setState, validateStateChange, persistance
Routage docs/routing.md Modèles d'URL, routeAgentRequest, basePath
Méthodes appellables docs/callable-methods.md @callable, RPC, streaming, timeouts
Planification docs/scheduling.md schedule(), scheduleEvery(), cron
Workflows docs/workflows.md AgentWorkflow, tâches multi-étapes durables
HTTP/WebSockets docs/http-websockets.md Hooks de cycle de vie, hibernation
Email docs/email.md Routage email, résolveur de réponse sécurisé
Client MCP docs/mcp-client.md Connexion à des serveurs MCP
Serveur MCP docs/mcp-servers.md Construction de serveurs MCP avec McpAgent
Client SDK docs/client-sdk.md useAgent, useAgentChat, hooks React
Human-in-the-loop docs/human-in-the-loop.md Flux d'approbation, pause de workflows
Streaming reprise docs/resumable-streaming.md Récupération de flux à la déconnexion

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

Capacités

Le Agents SDK fournit :

  • État persistant - Soutenu par SQLite, auto-synchronisé avec les clients
  • RPC appelable - Méthodes @callable() invoquées via WebSocket
  • Planification - Tâches uniques, récurrentes (scheduleEvery), et cron
  • Workflows - Traitement en arrière-plan multi-étapes durable via AgentWorkflow
  • Intégration MCP - Connectez-vous à des serveurs MCP ou construisez les vôtres avec McpAgent
  • Gestion email - Recevez et répondez à des emails avec routage sécurisé
  • Chat streaming - AIChatAgent avec flux reprennables
  • Hooks React - useAgent, useAgentChat pour les apps clients

D'ABORD : Vérifier l'installation

npm ls agents  # Should show agents package

Si non installé :

npm install agents

Configuration Wrangler

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

Classe Agent

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

type State = { count: number }

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

  // Validation hook - runs before state persists (sync, throwing rejects the update)
  validateStateChange(nextState: State, source: Connection | "server") {
    if (nextState.count < 0) throw new Error("Count cannot be negative")
  }

  // Notification hook - runs after state persists (async, non-blocking)
  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 se routent 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" })

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}`
Planification (délai) await this.schedule(60, "task", payload)
Planification (cron) await this.schedule("0 * * * *", "task", payload)
Planification (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)

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

Skills similaires