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
Plafonds de coût et d’étapes
État permettant la reprise
Progression du streaming
Nouvelle tentative avec temporisation
Saisie vocale
Intervention humaine dans la boucle
Auto-questionnement et révision
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.
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
Exécuter l’agent
Réponse vocale
Agent à commande vocale en trois appels
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
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.
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.
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.