Crie agentes que executam por horas, não segundos
Ciclos de agentes de longo horizonte e múltiplas etapas no OpenRouter. Limites de custo e de etapas, estado retomável, progresso em streaming, entrada por voz e aprovações com intervenção humana — tudo em um único SDK.
Recursos
Loops de várias horas
Limites de custo e etapas
Estado retomável
Progresso do streaming
Nova tentativa com espera progressiva
Entrada de voz
Humano no ciclo
Autoquestionamento e revisão
Um loop, horas de trabalho
O SDK de agentes mantém compactas as execuções de longa duração. Defina limites máximos, persista o estado e transmita o progresso com as mesmas 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 e saída de voz
Conduza o mesmo ciclo de agente a partir de uma chamada telefônica, um aplicativo de pressionar para falar ou um microfone ao vivo. O OpenRouter oferece endpoints dedicados de /api/v1/audio/transcriptions e /api/v1/audio/speech .
Transcrever
Executar o agente
Responder por voz
Agente controlado por voz em três chamadas
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));Como funciona
Captura
Receba entradas de texto ou voz. Quando precisar, a conversão de fala em texto com qualidade equivalente à do Whisper está a uma chamada de API de distância.
Executar
Passe a solicitação para callModel com ferramentas e condições de parada. O SDK gerencia o loop, as novas tentativas e o streaming.
Retomar
Persista o estado com um StateAccessor. Pause para revisão humana ou reinicie após uma implantação e continue exatamente de onde parou.
Coloque um agente de longa duração em produção hoje
Obtenha uma chave de API, copie o guia de receitas e tenha um agente que opera por várias horas e reconhece voz em produção nesta semana.