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

Ejecute bucles de agentes con un gran número de pasos y tiempos de espera prolongados. El SDK de agentes organiza las llamadas a herramientas, los reintentos y el estado de cada turno por usted.

Límites de coste y pasos

Limite las ejecuciones con condiciones de parada como maxCost y stepCountIs. Combine varias comprobaciones para que los agentes finalicen de forma controlada cuando se agoten los presupuestos.

Estado reanudable

Conserve los mensajes de la conversación, los resultados de las herramientas y el contexto compartido. Reproduzca o reanude ejecuciones prolongadas tras un fallo, un despliegue o una revisión humana.

Progreso de la transmisión

Transmita tokens, llamadas a herramientas y eventos de pasos en tiempo real para que los paneles y las interfaces de usuario puedan mostrar el progreso de los trabajos de larga duración.

Reintento con espera progresiva

Los reintentos automáticos ante errores transitorios de la API mantienen activos a los agentes que funcionan durante varias horas pese a los fallos momentáneos del proveedor, sin intervención manual.

Entrada de voz

Integre /api/v1/audio/transcriptions para ejecutar el mismo bucle de agente desde una llamada telefónica, una función de pulsar para hablar o un micrófono en directo.

Supervisión humana en el proceso

Pause las llamadas a herramientas de alto riesgo para solicitar aprobación, introduzca correcciones y luego reanude la misma ejecución con todo el contexto.

Autopreguntas y revisión

Envuelva callModel en un bucle de autorrevisión adversarial que se ejecute hasta que el agente emita [DONE]. Detecte carencias, alucinaciones y afirmaciones sin verificar antes del lanzamiento.

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.

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();

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

Envíe audio a /api/v1/audio/transcriptions y elija entre cualquier modelo STT de OpenRouter, incluido Whisper.

Ejecutar el agente

Pase la transcripción a callModel con las mismas herramientas, condiciones de parada y estado que utiliza para las ejecuciones basadas en texto.

Responder por voz

Canalice el resultado a través de /api/v1/audio/speech para devolver una respuesta hablada o transmitir audio a quien realiza la llamada.

Agente controlado por voz en tres llamadas

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));

Cómo funciona

1

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.

2

Ejecutar

Pase la solicitud a callModel con herramientas y condiciones de parada. El SDK gestiona el bucle, los reintentos y el streaming.

3

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.