TypeScript -Client für die Echtzeit -Voice -API von OpenAI.
npm install openai-realtime-api
Dieses Paket ist nur ESM. Es erfordert Node.js >= 18
, eine Browserumgebung oder eine gleichwertige JS -Laufzeit (Deno, Bun, CF -Arbeiter usw.).
Wichtig
Alle Verwendung und Ereignisse sind zu 100% kompatibel mit der OpenAI JS -Version. Der Hauptunterschied von Fehlerbehebungen besteht darin, dass alle Ereignisse voll ausgestattet sind .
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' )
Beispiele finden Sie für vollständigere Demos.
Siehe auch den offiziellen OpenAI -Echtzeit -API -Leitfaden und die API -Referenz.
Weitere Informationen zu Nutzung, Tools und benutzerdefinierten Ereignissen finden Sie unter OpenAIs Readme. Beachten Sie, dass dieses Paket zu 100% kompatibel mit OpenAIs Beta -Paket sowohl offizieller als auch inoffizieller Ereignisse ist. Der einzige Unterschied besteht darin, dass alle Ereignisse getippt werden.
RealtimeClient
nimmt einen optionalen apiKey
auf, der standardmäßig process.env.OPENAI_API_KEY
.
RealtimeClient
nimmt eine optionale url
ein, die auf einen Relay -Server gerichtet werden kann.
import { RealtimeClient } from 'openai-realtime-api'
// Create a browser client which points to a relay server.
const client = new RealtimeClient ( { url : RELAY_SERVER_URL } )
Alternativ können Sie apiKey
im Browser mit RealtimeClient
verwenden, aber Sie müssen auch dangerouslyAllowAPIKeyInBrowser: true
verabschieden.
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
} )
Vorsicht
Wir empfehlen dringend, Ihren API -Schlüssel in einen Kunden (Mobile oder Browser) aufzunehmen. Es kann für lokale Tests nützlich sein, aber für die Produktion sollten Sie einen Relay -Server verwenden.
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 )
Beachten Sie, dass RealtimeRelay
einen anderen Importpfad verwendet, da er Node.js-spezifischen Code enthält.
Ein vollständiges Beispiel ist in Beispielen/Knoten/Relay-server.ts enthalten.
Um die enthaltenen Beispiele auszuführen (erfordert Node.js >= 18
):
pnpm install
aus.env
mit Ihrem OPENAI_API_KEY
Sie können debug: true
im RealtimeClient
-Konstruktor dieser Beispiele festlegen, um das vollständige Ereignisprotokoll auszudrucken.
Einfache Node.js -Demo mit dem RealtimeClient
, der eine Textnachricht sendet und auf eine vollständige Antwort wartet.
npx tsx examples/node/basic.ts
aus Einfache Node.js -Demo mit dem RealtimeClient
, der eine kurze Audio -Nachricht sendet und auf eine vollständige Antwort wartet.
npx tsx examples/node/audio.ts
aus Einfache Node.js -Demo, die den RealtimeClient
mit einem Mikrofon und einem Sprecher verwendet, um eine vollständige, backgange Konversation aus dem Terminal zu simulieren.
mic
benötigt SOX; Auf macOS können Sie brew install sox
ausführennpx tsx examples/node/convo.ts
Dieses Beispiel wurde von https://github.com/openai/openai-realtime-console (bei Commit 6ea4dba) importiert. Die einzige Änderung bestand darin, @openai/realtime-api-beta
durch openai-realtime-api
zu ersetzen und einige Typen zu beheben.
Um das Beispiel für Echtzeitkonsolen auszuführen:
pnpm install
cd examples/openai-realtime-console
pnpm start
MIT © Travis Fischer
Wenn Sie dieses Projekt interessant fanden, sollten Sie mich auf Twitter folgen.