기능
여러 시간에 걸친 루프
많은 단계 수와 긴 타임아웃으로 에이전트 루프를 실행하십시오. 에이전트 SDK가 도구 호출, 재시도, 턴별 상태를 대신 관리합니다.
비용 및 단계 상한
maxCost 및 stepCountIs와 같은 중지 조건으로 실행을 제한하십시오. 여러 보호 조건을 조합하여 예산이 소진되면 에이전트가 정상적으로 종료되도록 하십시오.
재개 가능한 상태
대화 메시지, 도구 결과, 공유 컨텍스트를 영구 저장합니다. 충돌, 배포 또는 사람의 검토 후 장기 실행을 재현하거나 재개합니다.
스트리밍 진행 상황
토큰, 도구 호출, 단계 이벤트를 실시간으로 스트리밍하여 대시보드와 UI에서 장시간 실행되는 작업의 진행 상황을 표시할 수 있습니다.
백오프를 적용한 재시도
일시적인 API 오류에 대한 자동 재시도로, 수동 개입 없이 제공업체의 일시적 장애에도 여러 시간 동안 실행되는 에이전트가 계속 작동합니다.
음성 입력
/api/v1/audio/transcriptions를 도입하면 전화 통화, 눌러서 말하기 또는 실시간 마이크 입력으로 동일한 에이전트 루프를 구동할 수 있습니다.
사람 참여형 루프
중대한 도구 호출에서는 승인을 위해 일시 중지하고, 수정 사항을 반영한 다음, 전체 컨텍스트를 유지한 채 동일한 실행을 재개하십시오.
자체 질문 및 검토
에이전트가 [DONE]을 출력할 때까지 실행되는 적대적 자체 검토 루프로 callModel을 감싸십시오. 출시 전에 누락, 환각, 검증되지 않은 주장을 찾아내십시오.
하나의 루프, 수 시간의 작업
에이전트 SDK는 장기 실행을 간결하게 유지합니다. 동일한 기본 요소로 상한을 설정하고, 상태를 영속화하고, 진행 상황을 스트리밍하십시오.
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();음성 입력, 음성 출력
전화 통화, 푸시 투 토크 앱 또는 실시간 마이크로 동일한 에이전트 루프를 구동하십시오. OpenRouter는 전용 /api/v1/audio/transcriptions 및 /api/v1/audio/speech 엔드포인트를 제공합니다.
음성 전사
오디오를 /api/v1/audio/transcriptions로 전송하고 Whisper를 포함한 OpenRouter의 모든 STT 모델 중에서 선택하십시오.
에이전트 실행
텍스트 기반 실행에 사용하는 것과 동일한 도구, 중지 조건, 상태와 함께 대화 내용을 callModel에 전달하십시오.
음성 응답
결과를 /api/v1/audio/speech로 전달하여 음성 응답을 반환하거나 호출자에게 오디오를 스트리밍하십시오.
세 번의 호출로 구현하는 음성 기반 에이전트
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));작동 방식
1
캡처
텍스트 또는 음성으로 입력을 받습니다. 필요할 때 API 호출 한 번으로 Whisper 수준의 STT를 사용할 수 있습니다.
2
실행
요청을 callModel 에 도구 및 중단 조건과 함께 전달하십시오. SDK가 루프, 재시도, 스트리밍을 처리합니다.
3
재개
StateAccessor로 상태를 유지하십시오. 사람의 검토를 위해 일시 중지하거나 배포 후 다시 시작해도 중단한 바로 그 지점부터 계속할 수 있습니다.