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.py와 gemini/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_query와 end_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, 보안과 운영 관측 |
현재 연결
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과 만료 정책을 공통 계약으로 추가해야 한다.
중계 순서
- Agent 연결에서 path와 device ID를 확인한다.
- 서버의 API key로 Gemini upstream WebSocket을 연다.
- Agent setup을 정규화하고 서버의 모델과 기준 prompt를 적용한다.
- Agent 입력 종료 메시지를 Gemini의
audioStreamEnd로 변환한다. - Gemini tool call을 클라우드 소유
search_rag와 기기 소유 tool로 분리한다. search_rag는 서버에서 실행해 근거와 출처를 Gemini에 반환하고, 나머지 tool은 Agent에 전달한다.- 이후 양쪽 JSON과 PCM frame을 중계한다.
- 한쪽 연결이 끝나면 검색 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가 출력되지 않음 |