Créez des agents qui fonctionnent pendant des heures, pas des secondes

Des boucles d’agents à long horizon et à plusieurs étapes sur OpenRouter. Plafonds de coût et d’étapes, état permettant la reprise, progression en streaming, saisie vocale et approbations avec intervention humaine — le tout dans un seul SDK.

Fonctionnalités

Boucles de plusieurs heures

Exécutez des boucles d’agent avec un nombre élevé d’étapes et de longs délais d’expiration. Le SDK d’agent orchestre pour vous les appels d’outils, les nouvelles tentatives et l’état à chaque tour.

Plafonds de coût et d’étapes

Limitez les exécutions avec des conditions d’arrêt comme maxCost et stepCountIs. Combinez plusieurs garde-fous pour que les agents s’arrêtent proprement lorsque les budgets sont épuisés.

État permettant la reprise

Conservez les messages de conversation, les résultats des outils et le contexte partagé. Rejouez ou reprenez les exécutions longues après un plantage, un déploiement ou une vérification humaine.

Progression du streaming

Diffusez les jetons, les appels d’outils et les événements d’étape en temps réel afin que les tableaux de bord et les interfaces puissent afficher la progression des tâches de longue durée.

Nouvelle tentative avec temporisation

Les nouvelles tentatives automatiques en cas d’erreurs API transitoires permettent aux agents de fonctionner pendant plusieurs heures malgré les incidents des fournisseurs, sans intervention manuelle.

Saisie vocale

Intégrez /api/v1/audio/transcriptions pour piloter la même boucle d’agent depuis un appel téléphonique, un bouton de prise de parole ou un microphone en direct.

Intervention humaine dans la boucle

Mettez en pause les appels d’outils à fort enjeu pour obtenir une approbation, injectez des corrections, puis reprenez la même exécution avec tout le contexte.

Auto-questionnement et révision

Encapsulez callModel dans une boucle d’autoévaluation contradictoire qui s’exécute jusqu’à ce que l’agent émette [DONE]. Détectez les lacunes, les hallucinations et les affirmations non vérifiées avant la mise en production.

Une boucle, des heures de travail

Le SDK d’agent maintient les exécutions à long horizon compactes. Définissez des plafonds, persistez l’état et diffusez la progression en continu avec les mêmes primitives.

TypeScript
import { OpenRouter, tool, stepCountIs, maxCost } from '@openrouter/agent';
import { z } from '@openrouter-monorepo/lib-zod';

const openrouter = new OpenRouter();

const searchTool = tool({
  name: 'search',
  description: 'Search the web for information',
  inputSchema: z.object({ query: z.string() }),
  execute: async ({ query }) => {
    return { results: await fetchResults(query) };
  },
});

// Run for up to 200 steps OR $5 — whichever comes first
const result = openrouter.callModel({
  model: '~anthropic/claude-opus-latest',
  input: 'Research the fusion energy landscape and write a 5-page report.',
  tools: [searchTool],
  stopWhen: [stepCountIs(200), maxCost(5)],
});

// Stream tool calls as they happen so dashboards stay live
for await (const call of result.getToolCallsStream()) {
  console.log('tool', call.name, call.arguments);
}

const text = await result.getText();

Entrée vocale, sortie vocale

Pilotez la même boucle d’agent depuis un appel téléphonique, une application avec bouton pour parler ou un micro en direct. OpenRouter propose des /api/v1/audio/transcriptions et /api/v1/audio/speech comme points de terminaison dédiés.

Transcrire

Envoyez de l’audio à /api/v1/audio/transcriptions et choisissez parmi tous les modèles STT sur OpenRouter, y compris Whisper.

Exécuter l’agent

Transmettez la transcription à callModel avec les mêmes outils, conditions d’arrêt et état que vous utilisez pour les exécutions pilotées par du texte.

Réponse vocale

Transmettez le résultat à /api/v1/audio/speech pour renvoyer une réponse vocale ou diffuser l’audio en continu vers l’appelant.

Agent à commande vocale en trois appels

TypeScript
import { OpenRouter } from '@openrouter/sdk';
import { OpenRouter as Agent, stepCountIs, maxCost } from '@openrouter/agent';
import { readFile, writeFile } from 'node:fs/promises';

const sdk = new OpenRouter();
const agent = new Agent();

// 1. Voice in -> text
const audio = await readFile('./request.wav');
const { text: prompt } = await sdk.stt.createTranscription({
  model: 'openai/whisper-1',
  inputAudio: { data: audio.toString('base64'), format: 'wav' },
});

// 2. Long-horizon agent loop with ceilings + tool calls
const result = agent.callModel({
  model: '~anthropic/claude-opus-latest',
  input: prompt,
  stopWhen: [stepCountIs(50), maxCost(2)],
});
const reply = await result.getText();

// 3. Text -> voice out
const stream = await sdk.tts.createSpeech({
  model: 'openai/gpt-4o-mini-tts-2025-12-15',
  input: reply,
  voice: 'alloy',
  responseFormat: 'mp3',
});
const chunks: Uint8Array[] = [];
const reader = stream.getReader();
while (true) {
  const { done, value } = await reader.read();
  if (done) break;
  chunks.push(value);
}
await writeFile('./reply.mp3', Buffer.concat(chunks));

Fonctionnement

1

Capture

Acceptez des entrées textuelles ou vocales. Une reconnaissance vocale de qualité Whisper est accessible en un appel API lorsque vous en avez besoin.

2

Exécution

Transmettez la requête à callModel avec des outils et des conditions d’arrêt. Le SDK gère la boucle, les nouvelles tentatives et le streaming.

3

Reprendre

Conservez l’état avec un StateAccessor. Mettez en pause pour une vérification humaine ou redémarrez après un déploiement et reprenez exactement là où vous en étiez.

Déployez un agent de longue durée dès aujourd’hui

Obtenez une clé API, copiez le guide pratique et mettez en production cette semaine un agent capable de fonctionner pendant plusieurs heures et de prendre en charge la voix.