메인 콘텐츠로 건너뛰기
LiveKit Agents는 실시간 음성 AI를 구축하기 위한 프레임워크입니다. Venice는 채팅, 트랜스크립션, 스피치 모두 OpenAI와 완전히 호환되므로, 음성 에이전트의 세 단계 — 음성-텍스트 변환(STT), LLM, 텍스트-음성 변환(TTS) — 를 모두 livekit-plugins-openai 플러그인을 Venice base URL로 지정하여 구동할 수 있습니다.
Venice는 LiveKit Agents의 STT-LLM-TTS 파이프라인 아키텍처에 적합합니다. Venice는 OpenAI Realtime(스피치-투-스피치) WebSocket API를 제공하지 않으므로 RealtimeModel / 멀티모달 경로는 사용할 수 없습니다. 아래에 표시된 컴포넌트 기반 파이프라인을 사용하세요. 각 모델을 완전히 제어할 수 있으며 추론은 Venice의 프라이빗 인프라 안에서 유지됩니다.

Venice가 LiveKit Agents에 매핑되는 방식

설정

프레임워크와 아래에서 사용할 플러그인을 설치하세요:
Venice API 키와 LiveKit 연결 정보를 설정하세요:
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 클래스 모델을 선택하세요.
Venice 고유 옵션(웹 검색, 캐릭터 페르소나, 사고 제어)은 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-kokoro TTS, nvidia/parakeet-tdt-0.6b-v3 STT). 프라이빗하고 검열 없이 유지하려면 LLM은 venice-uncensored-1-2를 유지하세요. 첫 토큰까지의 시간이 더 빨라야 할 때만 flash 클래스 LLM으로 전환하세요.
  • 답변을 간결하게 유지하세요 — 체감 응답성을 좌우하는 것은 첫 문장입니다.

프로바이더 혼합

LiveKit은 각 컴포넌트를 독립적으로 선택할 수 있게 해주므로, 프라이버시와 검열 없는 모델이 가장 중요한 곳에서는 Venice를 유지하고 지연 시간이 중요한 곳에서는 스트리밍 프로바이더로 교체할 수 있습니다. 상호작용이 많은 일반적인 구성은 Venice LLM(및 선택적으로 STT)을 유지하면서 전용 스트리밍 TTS와 페어링하는 방식입니다:
가장 단순하고 가장 프라이빗한 설정을 위해 전체 Venice로 시작하세요. 빠르고 대화형이 강한 소비자 경험을 구축한다면 Venice LLM을 유지하고 음성 출력 단계에는 스트리밍 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 voice ID는 매칭되는 model에서만 유효합니다. Text-to-Speech Models를 참조하세요.
  • 모델 목록을 하드코딩하지 마세요. Venice 모델 ID는 정기적으로 폐기 및 교체됩니다 — 런타임에 GET /models / GET /models/traits를 쿼리하세요. Deprecations를 참조하세요.

관련 리소스