바이브코딩
AssemblyAI Universal-3.5 Pro | OpenRouter Sync STT와 120초 동기 전사
한 HTTP 왕복으로 80ms~120초 클립을 전사하는 플래그십. 공식 정가와 OpenRouter 할인, 134ms와 0.71초를 나눠 읽는다.
AssemblyAI의 Universal-3.5 Pro는 짧은 오디오를 한 번의 HTTP 왕복으로 받아 전사하는 플래그십 음성-텍스트 모델이다. 제품 이름은 Sync Speech-to-Text API와 묶여 있고, 폴링이나 WebSocket 세션을 열지 않는다. OpenRouter는 같은 모델을 assemblyai/universal-3-5-pro 슬러그로 2026년 9월 22일에 올렸다. 조사 기준일은 2026년 9월 23일 Asia/Seoul이다.
공식 Sync 제품 페이지는 시간당 $0.45로 적으며, 초당으로 나누면 정가 $0.000125가 된다. OpenRouter 카드는 그 정가를 나란히 두고 50% 할인된 $0.000063/초를 실제 청구로 보여 준다. 프롬프트를 붙인 오디오는 OpenRouter 기준으로 $0.000069/초다. 지연시간은 출처가 갈린다. AssemblyAI 지연 블로그와 제품 페이지는 프리웜 뒤 US/EU P50을 약 134ms로 적고, OpenRouter 표의 P50은 0.71초다. 전자는 서버에 가까운 프리웜 측정, 후자는 중개 경로의 왕복으로 읽는 편이 맞다.
클립 길이는 80밀리초에서 120초다. 포맷은 WAV 또는 raw PCM S16LE이고, URL을 붙여 원격 파일을 끌어오는 인제스트는 Sync에 없다. 헤더 X-AAI-Model: universal-3-5-pro는 HTTP 직접 호출에서 필수다. 현재 시작 문서는 경로를 POST https://sync.assemblyai.com/v1/transcribe로 적는다. 2026년 8월 19일 기술 블로그와 OpenAPI 레퍼런스는 /transcribe도 보여 주므로, 배포 전에 문서 경로를 한 번 더 연다.
핵심 포인트: Sync는 120초 이하 완성 클립의 한 방 전사다. 화자 분리, PII 마스킹, Speech Understanding은 Sync에 없고 Pre-recorded로 넘어간다.
Universal-3.5 Pro가 Sync에서 하는 일
시작 문서는 Sync API가 플래그십 Universal-3.5 Pro를 쓰고, 80밀리초부터 120초까지의 오디오를 32개 언어로 전사한다고 적는다. SDK는 Python의 SyncTranscriber와 JavaScript client.sync.transcribe()가 한 메서드로 왕복을 감싼다. warm()은 오디오가 오기 전에 HTTPS 연결을 연다. DNS, TCP, TLS 핸드셰이크를 녹음 시간과 겹쳐 빼는 장치가 프리웜이다.
응답은 text만이 아니다. 단어 배열, 전체 confidence, audio_duration_ms, 지원용 session_id, 서버 쪽 처리 시간 request_time_ms가 같은 JSON에 붙는다. 단어 start/end는 요청에서 timestamps=True를 켠 뒤에만 채워진다. 켜지 않으면 단어는 텍스트와 confidence만 남고 시각은 비어 있다. 타임스탬프는 밀리초 단위다.
제품 페이지가 드는 자리는 받아쓰기, 자체 VAD를 가진 보이스 에이전트, 푸시투토크, IVR 한 발화, 보이스메일과 숏폼 클립이다. 말하는 도중에 단어를 받으려면 Real-time이고, 2분을 넘는 파일은 Pre-recorded다. Sync는 그 사이의 짧은 완성분을 폴링 없이 돌려 주는 API다.

Pre-recorded가 느린 이유는 모델만이 아니다. 지연 블로그는 업로드 URL, 잡 제출, 수 초 간격 폴링, 완료 후 재조회라는 다섯 단계를 적는다. 전사가 서버에서 끝나도 다음 폴링까지 죽은 시간이 남는다. Sync는 그 고리를 접어 오디오 바이트를 바로 /transcribe 계열 엔드포인트에 붙인다. 짧은 보이스 메시지처럼 사람이 화면을 보고 있는 구간에서 의미가 있다.
OpenRouter 카드의 출시일과 가격
OpenRouter 모델 페이지 제목은 AssemblyAI: Universal-3.5 Pro다. 설명 문장은 Sync API로 최대 120초 클립을 동기 응답하고, 16비트 WAV를 받으며, 자유 텍스트 프롬프트와 keyterms, conversation context로 도메인 어휘를 유도한다고 적는다. 출시일은 2026년 9월 22일이다. 조사 다음날인 23일 기준으로 3일 가동률과 가용성은 카드에 100.00%로 보인다.
가격 표는 제공자 AssemblyAI, 정가 $0.000125, 할인 $0.000063, 지연 0.71초다. FAQ는 Audio Seconds $0.000063/초와 Prompted Audio Seconds $0.000069/초를 나란히 둔다. 입출력은 오디오 입력, 전사 텍스트 출력이다. OpenRouter는 이 모델을 한 제공자에 그대로 넘긴다고 적으며, 라우팅 선택이 없다고 한다. 채팅 모델처럼 제공자 풀을 고르는 자리가 아니다.
공식 제품의 $0.45/시간은 정가 $0.000125/초와 같다. 0.45를 3600으로 나누면 0.000125가 나온다. OpenRouter 할인은 그 정가의 절반이다. 프롬프트 가산 $0.000069는 공식 제품 페이지 한 줄에는 없고 OpenRouter FAQ에 있다. 에이전트 견적을 낼 때 프롬프트, keyterms, conversation_context를 쓰면 OpenRouter 경로의 프롬프트 단가를 따로 본다.

OpenRouter 문서의 일반 STT 엔드포인트는 POST /api/v1/audio/transcriptions이고, Whisper 계열 예시가 많다. Universal-3.5 Pro 카드는 AssemblyAI Sync를 가리키므로, OpenRouter 채팅 호환 스니펫의 base URL만 바꿔 쓰는 방식과 AssemblyAI 공식 sync.assemblyai.com 직접 호출을 한 코드로 섞지 않는다. 키와 헤더가 다르다. AssemblyAI HTTP는 Authorization에 키만 넣고 Bearer 접두사를 쓰지 말라고 시작 문서가 적는다.
오디오 한도와 HTTP 경로
한 요청의 하한은 80밀리초, 상한은 120초다. 서버 처리 기한은 따로 있다. 시작 문서는 30초 서버 기한을 넘기면 504와 inference_timeout이 온다고 적는다. 오디오가 120초여도 추론이 기한을 넘으면 타임아웃이다. timeout=60을 클라이언트에 두는 예시는 네트워크 대기이지, 서버 기한을 60초로 늘린다는 뜻이 아니다.
포맷은 WAV와 raw PCM S16LE다. WAV는 헤더에 샘플레이트와 채널이 있으므로 config 없이 보낼 수 있다. PCM은 sample_rate와 channels를 같이 보내며, 둘 중 하나라도 있으면 원본을 raw PCM으로 탄다. HTTP에서는 audio 파트의 Content-Type을 WAV는 audio/wav, PCM은 audio/pcm으로 두고, config는 JSON 파트로 붙인다. 로컬 경로와 바이트는 되고, URL은 안 된다. 원격 파일이면 먼저 받아 바이트로 만들거나 Pre-recorded를 쓴다.
모델 헤더는 필수다. 값은 universal-3-5-pro다. OpenAPI는 레거시 별칭 u3-sync-pro, u3-pro도 받는다고 적는다. SDK config의 model 기본값도 universal-3-5-pro다. 경로 표기는 문서마다 조금 다르다. 시작 가이드와 conversation-context 예시는 /v1/transcribe이고, 2026년 8월 19일 블로그 코드와 OpenAPI paths는 /transcribe다. 본문은 현재 시작 문서의 /v1/transcribe를 기본으로 쓰고, 블로그 스니펫을 복사할 때는 호스트만 바꾸지 말고 경로를 확인한다.
Python SDK 첫 호출은 환경 변수 키와 로컬 WAV 한 장으로 충분하다. 아래는 시작 문서의 최소 형태다.
import os
from assemblyai.sync.v1 import SyncTranscriber
transcriber = SyncTranscriber(api_key=os.environ["ASSEMBLYAI_API_KEY"])
transcriber.warm()
result = transcriber.transcribe("./sample.wav")
print(result.text)
cURL은 멀티파트 audio와 두 헤더가 핵심이다. 키를 Bearer로 감싸지 않는다.
curl -X POST https://sync.assemblyai.com/v1/transcribe \
-H 'Authorization: <YOUR_API_KEY>' \
-H 'X-AAI-Model: universal-3-5-pro' \
-F 'audio=@sample.wav;type=audio/wav'
에러 JSON은 두 모양이다. 오디오, 용량, 추론 실패는 error_code와 message이고, 코드 예시는 bad_audio, audio_too_short, audio_too_large, unsupported_media_type, capacity_exceeded, service_unavailable, inference_timeout, inference_error다. 401과 429는 detail 필드다. SDK는 SyncTranscriptError로 상태, 코드, 429/503의 Retry-After를 담는다. 지원 메일을 보낼 때는 실패가 아니어도 session_id를 남기라고 문서가 못 박는다.
prompt, keyterms, conversation_context
Sync가 Pre-recorded와 갈리는 지점 중 하나는 짧은 턴을 도메인 어휘로 붙잡는 장치다. OpenRouter 설명은 자유 텍스트 프롬프트, keyterms, conversation context를 나란히 적는다. conversation-context 문서는 세 장치를 같은 config JSON에 같이 넣을 수 있다고 한다. prompt로 통화 종류를 설명하고, keyterms_prompt로 고유 명사를 나열하고, conversation_context로 직전 대사를 넘긴다.
conversation_context는 현재 오디오 앞에 있던 대화를 배열로 준다. 한 문자열은 한 턴으로 취급된다. 화자 라벨은 없다. 에이전트 답과 발화자 말을 시간 순으로 따로 넣는다. 상한은 500턴 또는 총 16000자다. 넘치면 거절이 아니라 앞쪽 오래된 턴부터 잘린다. 모델 컨텍스트 창을 넘길 때도 같다. 전사는 이번 턴만 하고, 문맥은 정확도를 올리는 힌트다.
주문 번호처럼 숫자가 많은 턴에서 직전 대사가 있으면 모델이 주제를 유지하기 쉽다. 문서 예시는 상담원이 주문 번호를 물은 뒤, 현재 오디오가 그 번호 답이라는 상황을 세 턴 문맥으로 붙인다. 보이스 에이전트가 자체 VAD로 턴을 자르면, 직전 LLM 발화와 발화자 전사를 배열에 쌓아 다음 Sync 호출에 실을 수 있다. Real-time은 세션 안에서 문맥을 자동으로 이어 가고, 에이전트 말은 agent_context로 끼워 넣는다. Sync는 그 일을 요청마다 다시 넣어야 한다.
언어는 language_codes에 ISO 639-1 코드를 리스트로 준다. 하나면 단일 언어, 여러 개면 다국어 클립이다. 스페인어만이면 ["es"]다. 시작 문서의 언어 절은 32개 지원을 가리킨다. 단어 타임스탬프는 지연을 조금 늘린다고 문서가 적으므로, 자막 정렬이 필요할 때만 켠다. 받아쓰기만 필요하면 끄고 text와 전체 confidence만 본다.
언어 수 표기가 갈리는 이유
공식 문장이 두 개다. Sync 시작 가이드는 "32 languages"다. 제품 페이지 Core Models는 "18 languages with prompt steering"이다. 둘 다 AssemblyAI 도메인이다. OpenRouter 카드 본문은 조사 시점에 언어 개수를 큰 숫자로 박지 않고, 프롬프트와 keyterms, 문맥을 적는다. OpenRouter 카드가 예전에 19개 언어로 적혔다는 이차 언급은 조사 시점 카드 본문에서 확인되지 않았다. 19를 단정하지 않고, 확인된 32와 18만 나란히 둔다.
실무에서는 시작 가이드의 32를 공식 Sync 언어 서술로 쓰고, 제품 마케팅 문장의 18은 프롬프트 스티어링을 강조한 다른 집계로 읽는다. 배포 전에 language 목록 페이지를 열어 필요한 코드가 실제로 있는지를 본다. 한국어가 목록에 있는지는 시작 가이드 본문에서 코드 표를 다시 그리지 않았다. 미확인이다. 한국어 에이전트는 샘플 클립으로 language_codes를 고정해 보고, 자동 감지에 맡기지 않는 편이 안전하다.
제품 페이지가 18을 적은 맥락에는 프롬프트 스티어링, 단어 시각, confidence가 같이 있다. 화자 분리와 PII, Speech Understanding이 Sync에 없다는 한계 문장도 같은 절이다. 언어 개수만 떼어 "모델이 18개국만 된다"고 읽으면 시작 가이드와 충돌한다. 개수 충돌은 기능 부재(다이어리제이션)와 종류가 다르다.
프리웜과 지연시간 두 층
지연 블로그 날짜는 2026년 8월 19일이다. 데모는 약 15초 녹음을 싱가포르에서 글로벌 엔드포인트로 EU를 거쳐 보냈고, 전체 응답이 대략 1,900ms였다고 적는다. 지구 반대편에서도 2초 안이다. US나 EU에 가까우면 P50이 약 134ms로 떨어진다. 제품 페이지도 같은 134ms p50을 쓴다. 정확도는 Universal-3.5 Pro를 비동기로 쓰던 것과 같고, 전달만 한 요청이라고 블로그가 말한다.
프리웜의 요지는 녹음이 시작되는 순간에 연결을 연다는 것이다. 녹음이 이어지는 동안 핸드셰이크가 끝나고, POST 시점에는 업로드와 추론만 남는다. SDK warm()이 그 호출이다. 녹음 버튼 핸들러에 transcribe()만 두면, 짧은 클립에서도 TLS가 체감 지연의 상당 부분을 차지할 수 있다. 보이스 에이전트라면 VAD가 말을 감지하는 시점에 warm을 거는 식이다.
OpenRouter P50 0.71초는 이 134ms와 단위가 같아 보여도 층이 다르다. 카드 표는 제공자 왕복의 중앙값이다. 프리웜 여부, 클라이언트 위치, 오디오 길이, 타임스탬프 옵션이 공개 표에 붙어 있지 않다. 에이전트 SLO를 134ms로 적고 OpenRouter 경로로 배포하면 숫자가 어긋난다. 공식 직접 호출과 중개 경로를 같은 대시보드 한 칸에 넣지 않는다.
블로그 데모의 1,900ms는 15초 클립의 업로드가 포함된 끝에서 끝까지다. 134ms는 P50이지 15초 파일의 보장 값이 아니다. request_time_ms는 서버 처리만 담으므로, 클라이언트에서 잰 왕복과 비교해 업로드와 네트워크를 가른다. 싱가포르 예시처럼 레지던시와 물리 거리가 크면 업로드가 추론보다 커진다.
데이터 레지던시 엔드포인트
요청 형식은 같고 호스트만 바뀐다. 블로그 표는 글로벌 https://sync.assemblyai.com/transcribe, US https://sync.us.assemblyai.com/transcribe, EU https://sync.eu.assemblyai.com/transcribe다. OpenAPI servers는 글로벌이 가까운 리전으로 보내고, US는 us-east-1, us-east-2, us-west-1, us-west-2, EU는 eu-central-1부터 eu-west-3까지를 적는다. 블로그 본문의 US 리전 나열(us-west-2, us-east-1)보다 OpenAPI가 넓다. 거주 요건이 있으면 OpenAPI와 레지던시 문서를 우선한다.
글로벌 호스트는 가까운 리전으로 붙는다. 데이터가 반드시 한국에 남는다는 뜻은 아니다. EU 거주가 계약 조건이면 sync.eu.assemblyai.com을 고정한다. 헤더와 멀티파트는 동일하다. SDK가 리전 호스트를 어떻게 받는지까지는 시작 가이드 첫 페이지가 자세히 풀지 않으므로, 클라우드 엔드포인트 문서를 따로 연다. 호스트 세 개는 확인된 사실로 두고, SDK 생성자 인자 이름은 미확인으로 남긴다.
OpenRouter를 쓰면 중개 계층이 하나 더 생긴다. 카드는 AssemblyAI로 그대로 포워드한다고 하지만, 레지던시 호스트를 호출자가 고르는 것과 같은지는 카드가 말하지 않는다. EU 전용 처리가 필요하면 OpenRouter가 아니라 sync.eu.assemblyai.com 직접 호출이 문서와 맞다.
Sync와 Pre-recorded와 Real-time
세 API는 모델 가족은 같아도 수명 주기가 다르다. Sync는 완성된 짧은 파일, Pre-recorded는 긴 파일과 이해 기능, Real-time은 아직 말하는 스트림이다. Universal-3.5 Pro라는 이름이 Real-time 쪽 Pipecat 가이드에도 나온다. 스트리밍 모델 문자열도 universal-3-5-pro다. 같은 이름이라도 Sync HTTP와 Real-time 소켓을 한 클라이언트로 취급하면 한도가 엉킨다. Sync는 턴당 120초, 부분 전사 없음이다.
제품 페이지는 Sync 가격을 Universal-3.5 Pro Realtime과 같은 $0.45/시간으로 적는다. 과금 단위가 같아도 연결 방식은 다르다. Real-time은 세션을 유지하고 부분 결과를 받는다. Sync는 요청이 끝나면 연결 역할이 끝난다. 프리웜은 다음 짧은 POST를 위한 연결 재사용이지, 스트리밍 세션이 아니다.
다이어리제이션, PII 레다션, Speech Understanding은 Sync에 없다. 콜센터 녹음을 화자별로 나누거나 주민번호를 지우려면 Pre-recorded다. 보이스 에이전트가 한 발화만 빠르게 텍스트로 바꿔 LLM에 넣는 파이프라인은 Sync 자리다. 한 발화가 2분을 넘기면 VAD 임계를 조정해 자르거나 Pre-recorded로 올린다. 자르지 않고 Sync에 120초를 초과해 보내면 audio_too_large 쪽으로 떨어진다.
| API | 입력 | 응답 방식 | 길이 | Sync에 없는 기능 |
|---|---|---|---|---|
| Sync STT | 바이트/파일 (URL 없음) | 한 HTTP 응답 | 80ms~120s | 화자 분리, PII, Speech Understanding |
| Pre-recorded | 업로드/URL | 잡+폴링 | 긴 파일 | (이쪽에서 이해 기능) |
| Real-time | 스트림 | WebSocket 부분 결과 | 세션 | 한 방 동기 JSON이 아님 |
| 출처 | 숫자 | 무엇을 재는지 | ||
| 제품 페이지 | $0.45/시간, p50 약 134ms | 공식 Sync 요금과 프리웜 지연 | ||
| OpenRouter 카드 | $0.000063/초, 프롬프트 $0.000069/초, P50 0.71s | 중개 할인 가격과 왕복 | ||
| 시작 가이드 | 32 languages, /v1/transcribe | 언어 수와 현재 HTTP 경로 | ||
| 제품 Core Models | 18 languages with prompt steering | 마케팅 문장의 언어 집계 | ||
| conversation-context | 500턴 / 16000자 | 문맥 상한, 초과 시 앞부터 절단 |
표의 18과 32는 오류가 아니라 문서 층이다. 구현 체크리스트에는 32 쪽 목록을 열고, 카피 문장에는 18을 섞지 않는다.
바이브 코딩 에이전트에 붙이는 자리
Cursor나 로컬 에이전트가 음성 명령을 받을 때, 흔한 실수는 마이크 스트림을 채팅 모델 멀티모달에 바로 넣는 것이다. Universal-3.5 Pro Sync는 그 앞단을 전담한다. 브라우저나 데스크톱이 VAD로 무음을 자르고 WAV를 만들면, 에이전트 도구 하나가 Sync POST를 친다. 돌아온 text만 LLM 컨텍스트에 들어간다. 부분 가설이 필요 없는 푸시투토크와 잘 맞는다.

도구 스키마는 파일 경로나 바이트를 받고 URL을 받지 않게 만드는 편이 문서와 같다. 슬랙 보이스 메시지 URL을 그대로 넘기면 Sync가 거절한다. 다운로드 단계를 도구 안에 두거나, 이미 로컬에 있는 클립만 받게 한다. session_id와 request_time_ms는 로그에 남겨 지연 버그를 서버 시간과 클라이언트 시간으로 가른다. 타임스탬프가 필요 없는 명령 실행은 timestamps를 끄고 지연을 아낀다.
프롬프트에는 "한국어 개발 용어, 함수 이름, 리포지토리 이름"처럼 도메인을 한 줄로 적고, keyterms_prompt에 실제 심볼을 넣는다. 직전 발화 명령과 에이전트 확인 멘트를 conversation_context 배열에 쌓으면, "그거 커밋해" 같은 지시가 빈 문맥보다 덜 깨진다. 상한 16000자를 넘기지 않게 최근 N턴만 남긴다. 잘릴 때는 오래된 턴부터 사라진다는 점을 세션 메모리 설계에 반영한다.
OpenRouter로 붙일 때는 카드 출시가 2026-09-22인 점과, 일반 STT 가이드의 Whisper 예시가 이 모델과 교환 가능한지를 전제로 두지 않는다. 입력 포맷(OpenRouter의 base64 JSON vs AssemblyAI 멀티파트)이 다르다. 팀이 이미 OpenRouter 키만 있다면 카드의 오디오 초당 과금을 따르고, 레지던시와 X-AAI-Model 제어가 필요하면 공식 Sync를 쓴다. 두 경로를 환경 변수 하나로 숨기면 장애 때 헤더를 못 찾는다.
IVR와 보이스메일은 에이전트보다 단순한 호출이다. 한 발화 WAV를 넣고 text로 라우팅 키워드를 본다. 화자가 여러 명이면 Sync가 화자를 나누지 않으므로, 두 사람이 겹친 보이스메일은 Pre-recorded 다이어리제이션 후보다. 푸시투토크 무전기 앱처럼 한 사람, 한 클립이면 Sync의 한 방 응답이 제품 페이지 유스케이스와 같다.
Pipecat 문서는 Sync를 AssemblyAISyncSTTService로, 턴당 HTTP, 부분 전사 없음, 120초 한도로 소개한다. 로컬 VAD가 침묵을 감지하면 그 턴만 보낸다. 같은 문서의 Real-time 플러그인은 소켓을 유지한다. 바이브 코딩으로 보이스 에이전트를 붙일 때, 프레임워크가 Sync를 쓰는지 스트림을 쓰는지를 모델 이름만 보고 추측하지 않는다. 문자열 universal-3-5-pro가 양쪽 다 등장한다.
응답 필드와 운영에서 남길 값
성공 JSON의 text는 전체 문장이다. words는 단어와 confidence, 옵션 시각이다. confidence는 0에서 1이다. audio_duration_ms로 보낸 길이와 과금 초를 대조한다. OpenRouter 경로면 초당 단가에 이 길이를 곱하는 식이 카드와 맞다. 공식 $0.45/시간은 같은 길이에 정가를 적용한다. 프롬프트를 쓴 OpenRouter 호출은 0.000069를 쓴다.
request_time_ms는 서버가 스스로 잰 처리 시간이다. 블로그 예시 값은 243.7ms였다. P50 134ms 이야기와 한 예시의 243.7ms를 모순으로 읽지 않는다. 분포의 중앙값과 한 요청의 실측이다. 클라이언트 로그에 둘 다 남기면 네트워크 구간을 빼기 쉽다. session_id는 UUID다. 지원과 내부 트레이스에 같은 값을 쓴다.
용량 초과와 단시간 장애는 capacity_exceeded, service_unavailable이다. 429/503에는 Retry-After가 있다. 재시도 루프를 즉시 폭주시키지 않는다. bad_audio와 unsupported_media_type은 재시도로 고쳐지지 않는다. 코덱을 WAV/PCM으로 맞추고 길이를 검사하는 쪽이 맞다. 80ms 미만은 audio_too_short, 120초 초과는 audio_too_large다.
운영 대시보드에는 세 시계열을 나누는 편이 문서와 맞다. 첫째는 클라이언트 왕복, 둘째는 request_time_ms, 셋째는 OpenRouter를 쓸 때의 카드 P50이다. 한 숫자로 SLO를 정하면 134ms와 0.71초 중 무엇이 깨졌는지 안 보인다. 오디오 길이 히스토그램을 옆에 두면 120초 근처에서 타임아웃이 늘어나는지를 본다.
조사 과정에서는 실제 API 키로 샘플 WAV를 치지 않았다. 코드 블록은 시작 가이드와 conversation-context 문서의 공개 예시를 옮긴 것이다. warm()의 체감 이득, 한국어 language_codes 정확도, OpenRouter 중개 경로의 실제 0.71초는 카드 숫자이며 여기서 다시 재지 않았다. 가격과 한도와 헤더는 페이지 문장에 있는 것만 적었다.
Tip: 녹음 시작 핸들러에서warm()을 먼저 호출하고, 파일 저장이 끝나는 시점에transcribe()를 부른다. 짧은 푸시투토크일수록 핸드셰이크가 지연의 큰 몫이다.
한국어 보이스 코딩 명령은 영어 샘플보다 고유 명사가 많다. 리포 이름, 한글 이슈 제목, 라이브러리 한글 별칭을 keyterms_prompt에 넣는 실험이 문서의 도메인 어휘 유도 설명과 맞닿는다. 다만 한국어가 32개 목록에 포함되는지는 이 조사에서 언어 표 원문을 다시 옮기지 않았으므로, 샘플 한 장으로 확인한 뒤에 기본 언어를 고정한다.
120초는 벽이다. 회의 요약 봇을 Sync로 만들려다 파일을 잘라 12번 POST하는 우회는 가능하지만, 화자 분리와 긴 문맥은 Pre-recorded 자리다. Sync의 conversation_context는 이번 클립의 정확도용이지, 한 시간 회의를 이어 붙이는 저장소가 아니다. 에이전트 메모리는 따로 두고, Sync에는 최근 턴만 넣는다.
OpenRouter 출시가 9월 22일이라 카드의 3일 가용성 100%는 출시 직후 창이다. 장기 가동률로 읽지 않는다. 공식 직접 호출의 상태 페이지는 조사 범위에서 따로 열어 보지 않았다. 장애 대응은 session_id와 HTTP 상태, error_code를 한 묶음으로 남기는 쪽이 시작 문서의 지원 안내와 같다.
마무리
앞에서 다룬 AssemblyAI Universal-3.5 Pro와 Sync STT, OpenRouter 카드의 핵심만 짧게 정리한다.
- Universal-3.5 Pro는 80ms~120초 클립을 한 HTTP 응답으로 전사하는 Sync 플래그십이다.
- OpenRouter 출시는 2026-09-22, 할인 $0.000063/초, 프롬프트 $0.000069/초, 표 P50 0.71초다.
- 공식 정가는 $0.45/시간이며 초당 $0.000125와 같고, 프리웜 US/EU P50은 약 134ms다.
- 경로는 시작 문서 기준
POST https://sync.assemblyai.com/v1/transcribe이고, 헤더X-AAI-Model이 필수다. - URL 인제스트는 없고 WAV 또는 PCM S16LE 바이트만 받는다.
- 시작 가이드는 32개 언어, 제품 페이지는 18개(프롬프트 스티어링)로 적어 두 문장을 함께 둔다.
- 화자 분리, PII, Speech Understanding은 Sync에 없다. 긴 파일은 Pre-recorded, 라이브는 Real-time이다.
「짧은 완성 클립은 Sync, 긴 이해는 Pre-recorded, 말하는 중은 Real-time」 에이전트에는 VAD로 자른 WAV와 최근 턴 문맥만 넣고, OpenRouter 0.71초와 공식 134ms를 같은 SLO 칸에 넣지 않는다.
출처와 링크
조사 기준: 2026년 9월 (2026-09-23 Asia/Seoul). OpenRouter 카드 출시 2026-09-22. 지연 블로그 2026-08-19.
FAQ
자주 묻는 질문
Universal-3.5 Pro는 어떤 API에서 쓰이나요?
AssemblyAI Sync Speech-to-Text의 플래그십 모델입니다. 짧은 오디오를 한 번의 HTTP 요청/응답으로 전사하며 폴링과 WebSocket 세션이 없습니다. 같은 모델 이름은 Real-time 쪽에도 등장하므로, HTTP Sync와 스트리밍 소켓을 한 클라이언트로 취급하면 안 됩니다.
OpenRouter 가격과 공식 $0.45/시간은 어떻게 맞추나요?
공식 제품 페이지의 $0.45/시간을 3600으로 나누면 정가 $0.000125/초가 됩니다. OpenRouter 카드는 그 정가의 50%인 $0.000063/초를 청구 가격으로 보여 주고, 프롬프트를 붙인 오디오는 $0.000069/초입니다. 할인과 정가를 한 견적에 섞지 않습니다.
지연시간 134ms와 0.71초 중 무엇을 SLO로 쓰나요?
약 134ms는 AssemblyAI가 프리웜 뒤 US/EU에서 제시한 P50입니다. OpenRouter 표의 0.71초는 중개 경로 왕복 P50입니다. 공식 직접 호출과 OpenRouter를 같은 칸의 목표값으로 두면 어긋납니다. 서버 필드 request_time_ms와 클라이언트 왕복을 나눠 로그에 남깁니다.
오디오 URL을 그대로 보내면 되나요?
안 됩니다. Sync는 로컬 경로나 바이트만 받고 URL 인제스트가 없습니다. 원격 파일이면 먼저 내려받아 WAV 또는 PCM으로 만들거나 Pre-recorded API를 씁니다. HTTP에서는 multipart의 audio 파트로 붙입니다.
지원 언어는 32개인가요 18개인가요?
시작 가이드는 32개 언어라고 적고, 제품 페이지 Core Models는 프롬프트 스티어링과 함께 18개라고 적습니다. 둘 다 공식 도메인입니다. 구현 시에는 언어 코드 목록 페이지를 열고, 필요한 ISO 639-1 코드가 실제로 있는지 확인합니다.
화자 분리나 PII 삭제를 Sync에서 켜나요?
제품 페이지는 스피커 다이어리제이션, PII 레다션, Speech Understanding이 Sync에 없다고 명시합니다. 그 기능이 필요하면 Pre-recorded Speech-to-Text를 씁니다. Sync는 짧은 클립의 빠른 전사와 프롬프트, keyterms, 대화 문맥에 맞춰져 있습니다.
conversation_context는 얼마나 넣나요?
배열 또는 문자열이며 상한은 500턴 또는 총 16000자입니다. 넘치면 요청이 거절되지 않고 가장 오래된 턴부터 잘립니다. 화자 라벨은 없고, 에이전트 말과 발화자 말을 시간 순으로 따로 넣습니다. 전사는 현재 오디오만 대상입니다.
HTTP 경로는 /v1/transcribe인가요 /transcribe인가요?
2026년 9월 23일 기준 시작 가이드와 conversation-context 예시는 POST https://sync.assemblyai.com/v1/transcribe 입니다. 2026년 8월 19일 블로그와 OpenAPI는 /transcribe도 보여 줍니다. 배포 전에 현재 문서를 열고, 헤더 X-AAI-Model: universal-3-5-pro는 두 표기 모두에서 필수입니다.
용어
관련 용어
서버 요청, 파일 읽기, 타이머처럼 결과가 바로 오지 않는 작업을 순서대로 읽히는 코드처럼 작성하게 해 주는 JavaScript 문법이다. async 함수 안에서 await를 사용하면 Promise가 끝날 때까지 다음 줄 실행을 기다린다. 바이브 코딩 초보자는 '데이터가 아직 오기 전에 화면이 먼저 그려지는 문제'를 자주 만나는데, async/await를 이해하면 로딩 상태, 에러 처리, 재시도 흐름을 더 안전하게 설계할 수 있다. 단, await는 실패할 수 있으므로 try/catch나 에러 UI와 함께 써야 한다.
프론트엔드·UI 프로미스비동기 작업이 나중에 성공하거나 실패할 결과를 표현하는 JavaScript 객체이다. 서버에서 데이터를 받아오는 fetch, 이미지 로딩, 데이터베이스 호출처럼 시간이 걸리는 작업은 Promise로 다루는 경우가 많다. Promise는 pending, fulfilled, rejected 상태를 가지며, async/await는 Promise를 더 읽기 쉽게 사용하는 문법이다. AI가 생성한 코드에서 .then(), .catch(), await가 섞여 있다면 Promise의 흐름을 이해해야 에러가 삼켜지거나 로딩 상태가 끝나지 않는 버그를 찾을 수 있다.
IDE·AI 어시스턴트 제드Rust 프로그래밍 언어로 처음부터 작성된 고성능 코드 편집기로, Atom 에디터의 창시자들이 만들었다. 네이티브 속도가 가장 큰 강점으로, Electron 기반(VS Code, Cursor, Windsurf 등)의 에디터보다 파일 열기, 검색, 렌더링 등 모든 작업에서 체감 가능한 속도 차이를 보인다. 네이티브 AI 어시스턴트를 내장하여 코드 선택 후 AI에게 리팩토링이나 설명을 요청할 수 있으며, 실시간 멀티플레이어 협업(동시 편집)도 핵심 기능이다. 2026년 3월에는 ACP(Agent Context Protocol) Registry에 합류하여 에이전틱 워크플로를 지원하기 시작했다. 현재 macOS와 Linux를 공식 지원하며 Windows 지원은 개발 중이다. AI 기능 자체는 Cursor나 Windsurf에 비해 아직 성숙도가 낮지만, 속도에 민감한 개발자나 대규모 코드베이스를 다루는 환경에서 주목받고 있다. 오픈소스 프로젝트로 커뮤니티 기여가 활발하다.
링크
관련 링크
관련 글
관련 글
Recommended
Ming Image 0.1 Design | OpenRouter 무료 텍스트→이미지 디자인 모델
Ming Image 0.1 Design은 글(텍스트 프롬프트)을 넣으면 디자인용 이미지를 만들어 주는 AI 이미지 생성 모델이다. OpenRouter 슬러그는 inclusionai/ming-image-0.1-design이고, 모델 페이지에 적힌 가격은 Free(무료)다. inclusionAI가 만든 6B 계열이며, 조사 기준일은 2026년 9월 23일(서울)이다.
하는 일은 단순하다. 프롬프트를 보내면 PNG, JPEG, WebP 중 하나로 이미지가 나온다. OpenRouter와 Hugging Face는 공통으로 포스터, UI, 인포그래픽처럼 화면 안 글자가 읽혀야 하는 디자인을 목표로 소개한다. 참조 사진(레퍼런스 이미지)을 넣고 따라 그리게 하는 경로는 이 OpenRouter 카드에는 없다. 프롬프트만 넣는…
Jev ai 가 뭐길래 이리 난리일까? | TypeSafe 개발 어디에 어떻게 쓰며 단점 한계는?
TypeSafe는 2026년 9월 System One 모델 클래스와 플래그십 Jev를 공개했다. Jev는 LLM이 아니다. 자연어 state를 읽고 Choice, Score, Noul 같은 typed 결정과 확률을 돌려, 소프트웨어 if와 라우팅에 바로 붙이는 판단 전용 모델이다. ChatGPT, Claude처럼 답장, 코드, 설명을 토큰 스트림으로 쓰지 않고, 미리 정한 스키마에 맞춰 「이 중 뭐야」「어느 정도야」「맞아?」만 찍는다.
조사 기준일은 2026년 9월 19일(Asia/Seoul)이다. 가격, 컨텍스트, 입력 형태, jaggedness는 docs.typesafe.ai를 정본으로 쓴다. OpenRouter의 typesafe/j…