Cliente da TypeScript para API de voz em tempo real do OpenAI.
npm install openai-realtime-api
Este pacote é apenas ESM. Requer Node.js >= 18
, um ambiente de navegador ou um tempo de execução JS equivalente (Deno, Bun, CF, etc.).
Importante
Todo o uso e os eventos são 100% compatíveis com a versão JS Openai. A principal diferença além das correções de bugs é que todos os eventos são totalmente titados .
import { RealtimeClient } from 'openai-realtime-api'
// Create a new client; all params are optional; apiKey defaults to the
// `OPENAI_API_KEY` environment variable (when using Node.js).
const client = new RealtimeClient ( {
sessionConfig : {
instructions : 'You are a great, upbeat friend.' ,
voice : 'alloy'
}
} )
// Can change session config ahead of connecting.
client . updateSession ( {
turn_detection : null ,
input_audio_transcription : { model : 'whisper-1' }
} )
// Example of custom event handling
client . on ( 'conversation.updated' , ( event ) => {
// All events are fully-typed based on the event name.
// In this case, `event` will have the type `RealtimeCustomEvents.ConversationUpdatedEvent`
const { item , delta } = event
// Access the full list of conversation items.
const items = client . conversation . getItems ( )
} )
// Connect to the Realtime API.
await client . connect ( )
// Send a text message and trigger a response generation.
client . sendUserMessageContent ( [ { type : 'input_text' , text : 'How are you?' } ] )
// Wait for a completed response from the model.
// (`event` will be of type `RealtimeServerEvents.ResponseDoneEvent`)
const event = await client . realtime . waitForNext ( 'response.done' )
Veja exemplos para demos mais completos.
Veja também o Guia Official de API em tempo real do OpenAI e a referência da API.
Para obter mais informações sobre uso, ferramentas e eventos personalizados, consulte o ReadMe do OpenAI. Observe que este pacote é 100% compatível com o pacote beta da OpenAI em termos de eventos oficiais e não oficiais. A única diferença é que todos os eventos são digitados.
RealtimeClient
absorve um apiKey
opcional que indica o processo de process.env.OPENAI_API_KEY
.
RealtimeClient
recebe uma url
opcional que pode ser apontada para um servidor de retransmissão.
import { RealtimeClient } from 'openai-realtime-api'
// Create a browser client which points to a relay server.
const client = new RealtimeClient ( { url : RELAY_SERVER_URL } )
Como alternativa, você pode usar apiKey
com RealtimeClient
no navegador, mas também precisa passar dangerouslyAllowAPIKeyInBrowser: true
.
import { RealtimeClient } from 'openai-realtime-api'
// Create a browser client which connects directly to the OpenAI realtime API
// with an unsafe, client-side API key.
const client = new RealtimeClient ( {
apiKey : process . env . OPENAI_API_KEY ,
dangerouslyAllowAPIKeyInBrowser : true
} )
Cuidado
Recomendamos fortemente a inclusão de sua chave da API em qualquer cliente (móvel ou navegador). Pode ser útil para testes locais, mas para produção, você deve usar um servidor de retransmissão.
import { RealtimeClient } from 'openai-realtime-api'
import { RealtimeRelay } from 'openai-realtime-api/node'
// Setting `relay: true` disables tool calls and directly modifying the session,
// since that will be the responsibility of the upstream client.
const client = new RealtimeClient ( { relay : true } )
const relay = new RealtimeRelay ( { client } )
relay . listen ( 8081 )
Observe que RealtimeRelay
usa um caminho de importação diferente porque contém código específico do Node.js.
Um exemplo completo está incluído nos exemplos/nó/retranseia-server.ts.
Para executar os exemplos incluídos (requer Node.js >= 18
):
pnpm install
.env
com o seu OPENAI_API_KEY
Você pode definir debug: true
no construtor RealtimeClient
desses exemplos para imprimir o log de eventos completo.
Demonstração simples do Node.js usando o RealtimeClient
que envia uma mensagem de texto e aguarda uma resposta completa.
npx tsx examples/node/basic.ts
Demoção simples do Node.js usando o RealtimeClient
que envia uma mensagem de áudio curta e aguarda uma resposta completa.
npx tsx examples/node/audio.ts
Demoção simples do Node.js usando o RealtimeClient
com um microfone e um alto -falante para simular uma conversa completa e para trás do terminal.
mic
requer Sox; No macOS, você pode executar brew install sox
npx tsx examples/node/convo.ts
Este exemplo foi importado de https://github.com/openai/openai-realtime-console (no commit 6ea4dba). A única alteração foi substituir @openai/realtime-api-beta
pelo openai-realtime-api
e corrigir alguns tipos.
Para executar o exemplo do console em tempo real:
pnpm install
cd examples/openai-realtime-console
pnpm start
MIT © Travis Fischer
Se você achou este projeto interessante, considere me seguir no Twitter.