Cree agentes que se ejecuten durante horas, no segundos
Bucles de agentes de larga duración y múltiples pasos en OpenRouter. Límites de costes y pasos, estado reanudable, progreso en streaming, entrada de voz y aprobaciones con intervención humana: todo en un solo SDK.
Funciones
Bucles de varias horas
Límites de coste y pasos
Estado reanudable
Progreso de la transmisión
Reintento con espera progresiva
Entrada de voz
Supervisión humana en el proceso
Autopreguntas y revisión
Un bucle, horas de trabajo
El SDK de agentes mantiene compactas las ejecuciones de largo horizonte. Establezca límites, persista el estado y transmita el progreso con las mismas primitivas.
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();Entrada y salida de voz
Controle el mismo bucle del agente desde una llamada telefónica, una aplicación de pulsar para hablar o un micrófono en directo. OpenRouter ofrece /api/v1/audio/transcriptions y /api/v1/audio/speech como endpoints dedicados.
Transcribir
Ejecutar el agente
Responder por voz
Agente controlado por voz en tres llamadas
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));Cómo funciona
Captura
Reciba entradas de texto o voz. La conversión de voz a texto de calidad comparable a Whisper está a una llamada a la API cuando la necesite.
Ejecutar
Pase la solicitud a callModel con herramientas y condiciones de parada. El SDK gestiona el bucle, los reintentos y el streaming.
Reanudar
Mantenga el estado con un StateAccessor. Pause para una revisión humana o reinicie tras un despliegue y continúe exactamente donde lo dejó.
Ponga en producción un agente de larga duración hoy
Obtenga una clave de API, copie la guía práctica y tenga en producción esta semana un agente que funcione durante varias horas y admita voz.