← Docs hub

LLM Live 현재 Broker

로컬 PoC Broker는 A1 AI Agent(온디바이스 서비스 앱)와 Gemini Live 사이의 WebSocket frame을 중계하고, 클라우드가 소유한 search_rag tool을 처리한다. API key, 모델, 기준 prompt와 최신정보 검색을 서버에서 관리하기 위한 개발·QA 구성이다. 구현 기준은 backend-cloud-llm-lambda-main/gemini/live_broker.pygemini/live_rag.py다.

역할 경계

Broker가 하는 일 Broker가 하지 않는 일
/llm/live 연결과 device ID 확인 Wake-up과 Agent 상태 전환
GEMINI_API_KEY를 Gemini upstream에만 사용 API key를 APK 또는 Agent에 반환
모델과 기준 prompt 적용 사용자 의도와 제품 실행 가능 여부의 최종 판단
setup, JSON과 PCM base64 frame 중계 FunctionCallHandler와 Device API 직접 실행
search_rag 선언 주입, 검색과 Gemini tool response execute_rewrite_query, end_conversation을 대신 실행
Agent 입력 종료를 audioStreamEnd로 변환 AudioTrack, F1/F3와 Barge-in 제어
연결·frame 유형·byte 수 요약 로그 원본 음성, 전체 전사와 base64 payload 기록
/healthz, /readyz 제공 대화 기록을 저장하는 세션 DB 역할

제품 명령은 Broker가 직접 실행하지 않는다. execute_rewrite_queryend_conversation은 A1 AI Agent로 전달되고, 기기가 검증해 Device API 또는 공통 종료 경로를 실행한다. 반면 search_rag는 Gateway 소유 tool이므로 Agent로 보내지 않고 서버에서 처리한다.

온디바이스와 클라우드 책임

온디바이스 팀: A1 AI Agent 클라우드 팀: SK Live Gateway
AudioRecord, AudioTrack, Barge-in, UI·자막 기기 WebSocket과 Gemini upstream 연결
SK_19 전환과 Live Runtime 상태 API key, model, voice와 DEFAULT_PROMPT
제품 명령 검증, Device API 정확히 1회 실행 search_rag, 검색 timeout·취소·결과 캐시
명시 종료·무발화 종료와 자원 회수 health/readiness, quota, 보안과 운영 관측

현재 연결

현재 LLM Live PoC Broker 구조

A1 AI Agent ws://127.0.0.1:8765/llm/live
  -> adb reverse tcp:8765
  -> local Broker :8765
  -> Google Gemini Live WSS

운영 목표 구조와 온디바이스/클라우드 팀 R&R은 향후 릴리즈 구조에서 관리한다.

세션 소유권

현재 별도 세션 생성 API와 세션 DB는 없다.

세션 생성과 유지
A1 AI Agent Wake-up 뒤 논리 session ID를 만들고 상태와 오디오 수명을 관리
Broker 기기 WebSocket 1개마다 Gemini upstream 1개를 열어 중계
Gemini Live upstream WebSocket이 유지되는 동안 대화 문맥 보관

Broker 또는 네트워크가 끊기면 같은 문맥으로 자동 복구되지 않는다. resumption이 필요하면 Agent session ID, Gemini resumption handle과 만료 정책을 공통 계약으로 추가해야 한다.

중계 순서

  1. Agent 연결에서 path와 device ID를 확인한다.
  2. 서버의 API key로 Gemini upstream WebSocket을 연다.
  3. Agent setup을 정규화하고 서버의 모델과 기준 prompt를 적용한다.
  4. Agent 입력 종료 메시지를 Gemini의 audioStreamEnd로 변환한다.
  5. Gemini tool call을 클라우드 소유 search_rag와 기기 소유 tool로 분리한다.
  6. search_rag는 서버에서 실행해 근거와 출처를 Gemini에 반환하고, 나머지 tool은 Agent에 전달한다.
  7. 이후 양쪽 JSON과 PCM frame을 중계한다.
  8. 한쪽 연결이 끝나면 검색 task, 반대쪽 task와 WebSocket도 정리한다.

clientCancel은 현재 Broker 전용 제어 message다. Broker가 로그 후 소비하며 Gemini upstream에 그대로 전달하지 않는다. 실제 모델 응답 중단은 새 음성에 대한 Gemini Interrupted와 Agent의 로컬 PCM queue 정리가 함께 완료돼야 한다.

환경 변수

변수 기본값 또는 조건 용도
GEMINI_API_KEY 필수 Gemini 인증. 소스, 로그와 APK에 저장하지 않음
GEMINI_LIVE_BROKER_HOST 0.0.0.0 Agent 연결 수신 주소
GEMINI_LIVE_BROKER_PORT 8765 Agent WebSocket 포트
GEMINI_LIVE_BROKER_PATH /llm/live 허용 path
GEMINI_LIVE_HEALTH_PORT 8766 /healthz, /readyz; 0이면 비활성
GEMINI_LIVE_MODEL models/gemini-3.1-flash-live-preview Agent setup 모델을 최종 교체
GEMINI_LIVE_UPSTREAM_URL Google v1beta bidi endpoint Gemini upstream 주소
GEMINI_LIVE_DEFAULT_PROMPT_PATH gemini/gemini_default_prompt_kr.txt 기준 prompt 파일
GEMINI_LIVE_RAG_ENABLED true search_rag 선언과 서버 실행 활성화
GEMINI_LIVE_RAG_TIMEOUT_SECONDS 7.0 검색 전체 제한 시간
GEMINI_LIVE_RAG_MAX_QUERY_CHARS 500 검색어 최대 길이
GEMINI_LIVE_RAG_WEB_RESULTS 5 웹 근거 최대 결과 수
GEMINI_LIVE_RAG_WEB_MODEL gemini-2.5-flash-lite Custom Search 실패 시 Grounding 모델
GEMINI_LIVE_RAG_INTERNAL_ENABLED false 내부 File Search 사용 여부

최신정보 검색 경로

Gemini Live -> search_rag
  -> SK Live Gateway
     -> Google Custom Search
        -> 성공: 검색 결과 반환
        -> 현재 테스트 키 403: Gemini Google Search Grounding으로 전환
  -> toolResponse(근거 + 출처)
  -> Gemini Live 최종 PCM + 전사

2026-08-19 E2E에서 Grounding 대체 경로와 최종 음성·자막 반환을 확인했다. 내부 File Search는 구현 경로는 있으나 현재 테스트 키가 지정 store에 접근하지 못해 비활성이다. 따라서 DEFAULT_PROMPT와 웹 최신정보 검색은 현재 연결됐지만, 내부 SK 문서 RAG는 운영 권한 확인 전까지 연결 완료로 보지 않는다.

WebSocket 설정

연결 설정 현재값
Broker -> Gemini ping_interval / ping_timeout 20초 / 20초
Broker -> Gemini max_size None
Agent -> Broker max_size None

max_size=None은 PoC 편의 설정이다. 운영 서비스에는 인증, TLS, rate limit, 최대 frame과 session byte, 동시 연결, backpressure와 구조화 지표가 필요하다. 이 항목은 향후 릴리즈 구조의 출시 게이트에서 관리한다.

실행 확인

확인 기준
readiness GET :8766/readyz가 model과 broker path를 반환
Agent 연결 session_open 뒤 upstream setup 완료
입력 app -> upstream audio frame 순번과 byte 증가
출력 upstream -> app audio/transcription event 수신
종료 양쪽 task 취소와 session_close가 한 번씩 기록
RAG search_rag가 Agent로 전달되지 않고 Gateway가 tool response를 Gemini에 반환
로그 안전 key, 원본 PCM과 전체 base64가 출력되지 않음

관련 문서

Keyboard shortcuts

⌘K / Ctrl+KOpen command palette
/Focus search
g hGo to home
g pGo to projects
g sGo to sessions
j / kNext / prev row (tables)
?Show this help
EscClose dialogs

Structured queries

Mix key:value filters with free text in the palette:

type:sessionOnly session pages
project:llm-wikiFilter by project name (substring)
model:claudeFilter by model name (substring)
date:>2026-03-01Sessions after a date
date:<2026-04-01Sessions before a date
tags:rustPages mentioning a tag/topic
sort:dateSort results by date (newest first)

Example: type:session project:llm-wiki date:>2026-04 sort:date