`experimental_streamTranscribe()`
experimental_streamTranscribe()
경고:
experimental_streamTranscribe는 실험적 기능이에요.
스트리밍을 지원하는 전사(transcription) 모델을 사용해 라이브 원시 오디오에서 트랜스크립트를 실시간으로 스트리밍해요.
import { experimental_streamTranscribe as streamTranscribe } from 'ai';
import { openai } from '@ai-sdk/openai';
const result = streamTranscribe({
model: openai.transcription('gpt-realtime-whisper'),
audio: audioStream, // ReadableStream<Uint8Array | string>
inputAudioFormat: { type: 'audio/pcm', rate: 24000 },
});
for await (const part of result.fullStream) {
if (part.type === 'transcript-delta') {
process.stdout.write(part.delta);
}
}
console.log(await result.text);
출처: 문서
본문
Import
import { experimental_streamTranscribe as streamTranscribe } from "ai"
API 시그니처 (API Signature)
파라미터 (Parameters)
| 이름 | 타입 | 선택 | 설명 |
|---|---|---|---|
model |
TranscriptionModelV4 |
사용할 전사 모델. 모델은 스트리밍(doStream)을 지원해야 해요. 문자열 모델 ID는 전역 provider(AI Gateway가 기본)를 통해 해석되며, 지원되는 모델(예: openai/gpt-realtime-whisper, xai/grok-stt)에 대해 스트리밍 전사를 지원해요: experimental_streamTranscribe({ model: 'openai/gpt-realtime-whisper', ... }). |
|
audio |
ReadableStream<Uint8Array | string> |
전사할 원시 오디오 청크. Uint8Array 청크는 원시 오디오 바이트, string 청크는 base64 인코딩된 원시 오디오 바이트를 담아요. |
|
inputAudioFormat |
{ type: string; rate?: number } |
원시 오디오 청크의 입력 오디오 형식, 예: { type: "audio/pcm", rate: 24000 }. 지원되는 타입은 provider별로 달라요(예: audio/pcm, audio/pcmu, audio/pcma). |
|
providerOptions |
Record<string, JSONObject> |
선택 | 추가 provider별 옵션. |
abortSignal |
AbortSignal |
선택 | 호출을 취소하는 선택적 abort 신호. |
headers |
Record<string, string> |
선택 | provider가 지원한다면 추가 HTTP/WebSocket 헤더. |
includeRawChunks |
boolean |
선택 | true면 provider가 원시 provider 청크를 raw 파트로 스트림에 포함해요. |
반환 (Returns)
| 이름 | 타입 | 설명 |
|---|---|---|
fullStream |
AsyncIterableStream<TranscriptionStreamPart> |
전사 파트(transcript-delta, transcript-partial, transcript-final, raw, error)의 단일 소비자 라이브 스트림. 스트림 파트와 최종 결과가 모두 필요할 때는 결과 promise보다 먼저, 한 번만 접근해야 해요. 결과 promise를 먼저 접근하면 스트림을 내부적으로 소비하므로 fullStream을 사용할 수 없어요. |
text |
Promise<string> |
오디오 입력에서 전사된 전체 텍스트. |
segments |
Promise<Array<{ text: string; startSecond: number; endSecond: number }>> |
가능하다면 타이밍 정보가 포함된 최종 전사 세그먼트. |
language |
Promise<string | undefined> |
가능하다면 ISO-639-1 형식의 트랜스크립트 언어. |
durationInSeconds |
Promise<number | undefined> |
가능하다면 트랜스크립트 길이(초). |
warnings |
Promise<Warning[]> |
호출에 대한 경고(예: 지원되지 않는 설정). provider가 스트림 시작을 내보낼 때 resolve돼요. |
responses |
Promise<Array<TranscriptionModelResponseMetadata>> |
응답 메타데이터(timestamp, model ID, headers). |
providerMetadata |
Promise<Record<string, JSONObject>> |
추가 provider별 메타데이터. |
참고: 결과 promise는 스트림이 소비되면서 settle돼요.
fullStream소비를 일찍 멈추면(예: 루프에서break), 기본 provider 연결이 닫히고 대기 중인 결과 promise가 reject돼요.
와이어 형식 (Wire format, 실험적)
WebSocket을 통한 스트리밍 전사는 @ai-sdk/provider-utils에 정의된 실험적 transcription-stream 봉투(experimental_parseTranscriptionStreamClientFrame, experimental_serializeTranscriptionStreamPart, experimental_parseTranscriptionStreamPart)로 직렬화돼요: 클라이언트는 transcription-stream.start TEXT 프레임 하나, 오디오는 BINARY 프레임, transcription-stream.audio-done TEXT 프레임 하나를 보내고, 각 서버 TEXT 프레임은 JSON 직렬화된 전사 스트림 파트 하나예요. AI Gateway가 이 봉투의 서버 쪽을 구현해요.