`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가 이 봉투의 서버 쪽을 구현해요.

더 알아보기 (Learn more)