livekit-plugins-openai 플러그인을 Venice base URL로 지정하여 구동할 수 있습니다.
Venice는 LiveKit Agents의 STT-LLM-TTS 파이프라인 아키텍처에 적합합니다. Venice는 OpenAI Realtime(스피치-투-스피치) WebSocket API를 제공하지 않으므로
RealtimeModel / 멀티모달 경로는 사용할 수 없습니다. 아래에 표시된 컴포넌트 기반 파이프라인을 사용하세요. 각 모델을 완전히 제어할 수 있으며 추론은 Venice의 프라이빗 인프라 안에서 유지됩니다.Venice가 LiveKit Agents에 매핑되는 방식
설정
프레임워크와 아래에서 사용할 플러그인을 설치하세요:OpenAI 플러그인은
api_key가 생략되면 OPENAI_API_KEY로 대체됩니다. Venice를 지정하고 있으므로 항상 api_key를 명시적으로 전달하세요(그렇지 않으면 잘못된 환경 변수에서 키를 읽게 됩니다). 아래 예제는 VENICE_API_KEY를 읽습니다.전체 음성 에이전트
다음은 Venice STT로 트랜스크립션하고, Venice LLM으로 사고하며, Venice TTS로 말하는 완전한 음성 에이전트입니다. Silero가 로컬 음성 활동 감지를 제공하여 배치 STT가 언제 턴이 끝났는지 파악할 수 있게 합니다.각 컴포넌트 설정하기
LLM
LLM은 가장 깔끔한 매핑입니다 — Venice/chat/completions는 SSE 스트리밍, 툴 호출, 비전을 모두 지원하며 LiveKit이 이 모든 것을 직접 사용합니다. venice-uncensored-1-2는 추론을 프라이빗하고 검열 없이 유지하면서 TTS 파이프라인에 공급합니다. 첫 토큰까지의 시간이 더 짧아야 하는 경우에만 flash 클래스 모델을 선택하세요.
extra_body를 통해 전달하세요:
Speech-to-Text
LiveKit의 OpenAI STT는 음성 세그먼트마다/audio/transcriptions를 호출하므로, 턴이 언제 끝나는지 감지하기 위해 VAD(위의 Silero)가 필요합니다. 기본 모델을 Venice STT 모델로 재정의하세요. nvidia/parakeet-tdt-0.6b-v3는 가장 작고 지연 시간이 낮은 옵션이며, 더 높은 정확도가 필요하다면 stt-xai-v1이나 elevenlabs/scribe-v2가 최신 대안입니다.
Text-to-Speech
LiveKit의 OpenAI TTS는/audio/speech를 호출합니다. Venice에서 음성은 모델별로 정해져 있으므로 — 동일한 모델의 model/voice 쌍을 전달하세요. tts-kokoro는 음성 단계를 프라이빗하고 검열 없이 유지하여 LLM의 출력을 그대로 말할 수 있습니다. MP3 디코드 단계를 피하고 지연 시간을 약간 줄이려면 pcm을 요청하세요. 프로바이더 기반의 더 빠른 음성(예: Gemini)은 콘텐츠 필터링을 적용할 수 있으므로, 검열 없는 음성이 필요하다면 피하세요.
권장 모델
모델 ID는 시간이 지남에 따라 변경됩니다 — 하드코딩하는 대신 런타임에GET /models?type=... 및 GET /models/traits로 현재 옵션을 확인하세요. 음성 에이전트의 경우 체감 응답성은 첫 토큰까지의 시간과 TTS 속도에 의존하므로 저지연 티어(이름에 flash, turbo, mini가 있거나 파라미터 수가 적은 모델)를 우선시하세요. 현재 카탈로그에서 시작하기 좋은 지점들:
모든 모델 둘러보기
텍스트, 음성-텍스트, 텍스트-음성으로 필터링하고 실시간 가격 및 기능을 확인하세요.
지연 시간 및 프로덕션 팁
음성 에이전트의 품질은 턴 전환 지연 시간 — 사용자가 문장을 끝낸 시점과 에이전트가 말하기 시작하는 시점 사이의 시간 — 에 좌우됩니다. 전체 Venice 파이프라인에서는 대략 다음을 예상하세요:
첫 오디오까지 약 0.8–1.5초를 예상하세요 — 어시스턴트 스타일의 차분한 턴 전환에는 훌륭합니다. 매우 자주 끊기고 겹치는 대화의 경우에는 네이티브 스피치-투-스피치 모델 대비 간격이 느껴질 것입니다.
지연 시간 줄이기
- TTS에서
response_format="pcm"을 사용해 MP3 디코드 단계를 건너뛰세요. - Silero VAD를 조정(
silero.VAD.load(min_silence_duration=0.4))하여 음성을 잘라내지 않고 엔드포인팅을 단축하세요. - STT/TTS에는 저지연 티어를 선호하세요(예:
tts-kokoroTTS,nvidia/parakeet-tdt-0.6b-v3STT). 프라이빗하고 검열 없이 유지하려면 LLM은venice-uncensored-1-2를 유지하세요. 첫 토큰까지의 시간이 더 빨라야 할 때만flash클래스 LLM으로 전환하세요. - 답변을 간결하게 유지하세요 — 체감 응답성을 좌우하는 것은 첫 문장입니다.
프로바이더 혼합
LiveKit은 각 컴포넌트를 독립적으로 선택할 수 있게 해주므로, 프라이버시와 검열 없는 모델이 가장 중요한 곳에서는 Venice를 유지하고 지연 시간이 중요한 곳에서는 스트리밍 프로바이더로 교체할 수 있습니다. 상호작용이 많은 일반적인 구성은 Venice LLM(및 선택적으로 STT)을 유지하면서 전용 스트리밍 TTS와 페어링하는 방식입니다:제약 사항 및 참고
- 스피치-투-스피치 / Realtime API 없음. Venice에는 OpenAI Realtime WebSocket이 없으므로
openai.realtime.RealtimeModel및 멀티모달 에이전트 경로는 사용할 수 없습니다. 위에 나온 STT-LLM-TTS 파이프라인을 사용하세요. - STT는 배치이며 스트리밍이 아닙니다. Venice 트랜스크립션은 요청/응답 방식이므로 엔드포인팅을 위해 VAD(Silero)가 필요합니다. 이는 스트리밍 STT 소켓 대비 약간의 지연 시간을 추가합니다.
- TTS는 플러그인에 의해 버퍼링됩니다. LiveKit의 OpenAI TTS 래퍼는
streaming=False를 보고하므로 Venice의 문장 단위streaming플래그를 사용하지 않습니다. 그래도 대부분의 에이전트에서 지연 시간은 충분히 양호합니다. 디코드 오버헤드를 최소화하려면response_format="pcm"을 사용하세요. - 음성을 모델과 일치시키세요. TTS
voiceID는 매칭되는model에서만 유효합니다. Text-to-Speech Models를 참조하세요. - 모델 목록을 하드코딩하지 마세요. Venice 모델 ID는 정기적으로 폐기 및 교체됩니다 — 런타임에
GET /models/GET /models/traits를 쿼리하세요. Deprecations를 참조하세요.