Live API는 WebSockets를 사용하는 스테이트풀 API입니다. 이 섹션에서는 WebSockets API에 관한 추가 세부정보를 확인할 수 있습니다.
세션
WebSocket 연결은 클라이언트와 Gemini 서버 간에 세션을 설정합니다. 클라이언트가 새 연결을 시작한 후 세션에서 서버와 메시지를 교환하여 다음 작업을 실행할 수 있습니다.
- 텍스트, 오디오 또는 동영상을 Gemini 서버로 전송합니다.
- Gemini 서버로부터 오디오, 텍스트 또는 함수 호출 요청을 수신합니다.
WebSocket 연결
세션을 시작하려면 다음 WebSocket 엔드포인트에 연결하세요.
wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent
세션 구성
연결 후 첫 번째 메시지는 모델, 생성 매개변수, 시스템 안내, 도구가 포함된 세션 구성을 설정합니다.
세션 중에 모델을 제외한 구성 매개변수를 변경할 수 있습니다.
다음 구성 예시를 참고하세요. SDK의 이름 대소문자는 다를 수 있습니다. 여기에서 Python SDK 구성 옵션을 확인할 수 있습니다.
{
"model": string,
"generationConfig": {
"candidateCount": integer,
"maxOutputTokens": integer,
"temperature": number,
"topP": number,
"topK": integer,
"presencePenalty": number,
"frequencyPenalty": number,
"responseModalities": [string],
"speechConfig": object,
"mediaResolution": object
},
"systemInstruction": string,
"tools": [object]
}
API 필드에 관한 자세한 내용은 generationConfig를 참고하세요.
메시지 보내기
WebSocket 연결을 통해 메시지를 교환하려면 클라이언트가 열린 WebSocket 연결을 통해 JSON 객체를 전송해야 합니다. JSON 객체는 다음 객체 세트의 필드 중 하나만 포함해야 합니다.
{
"setup": BidiGenerateContentSetup,
"clientContent": BidiGenerateContentClientContent,
"realtimeInput": BidiGenerateContentRealtimeInput,
"toolResponse": BidiGenerateContentToolResponse
}
지원되는 클라이언트 메시지
지원되는 클라이언트 메시지는 다음 표를 참조하세요.
메시지 | 설명 |
---|---|
BidiGenerateContentSetup |
첫 번째 메시지로 전송할 세션 구성 |
BidiGenerateContentClientContent |
클라이언트에서 전송된 현재 대화의 점진적 콘텐츠 업데이트 |
BidiGenerateContentRealtimeInput |
실시간 오디오, 동영상 또는 텍스트 입력 |
BidiGenerateContentToolResponse |
서버에서 수신한 ToolCallMessage 에 대한 응답 |
메시지 수신
Gemini에서 메시지를 수신하려면 WebSocket 'message' 이벤트를 리슨한 다음 지원되는 서버 메시지의 정의에 따라 결과를 파싱합니다.
다음을 참조하세요.
async with client.aio.live.connect(model='...', config=config) as session:
await session.send(input='Hello world!', end_of_turn=True)
async for message in session.receive():
print(message)
서버 메시지에는 usageMetadata
필드가 있을 수 있지만, 그 외에는 BidiGenerateContentServerMessage
메시지의 다른 필드 중 하나만 포함됩니다. messageType
연합은 JSON으로 표현되지 않으므로 필드는 메시지의 최상위 수준에 표시됩니다.
메시지 및 이벤트
ActivityEnd
이 유형에는 필드가 없습니다.
사용자 활동 종료를 표시합니다.
ActivityHandling
사용자 활동을 처리하는 다양한 방법
열거형 | |
---|---|
ACTIVITY_HANDLING_UNSPECIFIED |
지정하지 않으면 기본 동작은 START_OF_ACTIVITY_INTERRUPTS 입니다. |
START_OF_ACTIVITY_INTERRUPTS |
이 속성이 true이면 활동 시작 시 모델의 응답이 중단됩니다('방해'라고도 함). 중단되는 순간 모델의 현재 응답이 끊깁니다. 이것이 기본 동작입니다. |
NO_INTERRUPTION |
모델의 응답이 중단되지 않습니다. |
ActivityStart
이 유형에는 필드가 없습니다.
사용자 활동의 시작을 표시합니다.
AudioTranscriptionConfig
이 유형에는 필드가 없습니다.
오디오 스크립트 작성 구성입니다.
AutomaticActivityDetection
활동 자동 감지를 구성합니다.
필드 | |
---|---|
disabled |
선택사항입니다. 사용 설정하면 (기본값) 감지된 음성 및 텍스트 입력이 활동으로 집계됩니다. 사용 중지된 경우 클라이언트는 활동 신호를 전송해야 합니다. |
startOfSpeechSensitivity |
선택사항입니다. 음성 감지 가능성을 결정합니다. |
prefixPaddingMs |
선택사항입니다. 음성 시작이 커밋되기 전에 감지된 음성의 필수 길이입니다. 이 값이 낮을수록 음성 시작 감지가 더 민감해지고 더 짧은 음성이 인식될 수 있습니다. 하지만 이렇게 하면 거짓양성의 가능성도 높아집니다. |
endOfSpeechSensitivity |
선택사항입니다. 감지된 음성이 종료될 가능성을 결정합니다. |
silenceDurationMs |
선택사항입니다. 말의 끝이 커밋되기 전에 감지된 비언어 (예: 정적)의 필수 길이입니다. 이 값이 클수록 사용자 활동을 중단하지 않고 더 긴 음성 갭을 사용할 수 있지만 모델의 지연 시간이 늘어납니다. |
BidiGenerateContentClientContent
클라이언트에서 전송된 현재 대화의 증분 업데이트입니다. 여기에 있는 모든 콘텐츠는 무조건 대화 기록에 추가되며 콘텐츠를 생성하기 위한 모델의 프롬프트의 일부로 사용됩니다.
여기에 메시지가 표시되면 현재 모델 생성이 중단됩니다.
필드 | |
---|---|
turns[] |
선택사항입니다. 모델과의 현재 대화에 추가된 콘텐츠입니다. 싱글턴 쿼리의 경우 이는 단일 인스턴스입니다. 멀티턴 쿼리의 경우 이는 대화 기록과 최근 요청이 포함된 반복 필드입니다. |
turnComplete |
선택사항입니다. true인 경우 서버 콘텐츠 생성이 현재 누적된 프롬프트로 시작해야 함을 나타냅니다. 그렇지 않으면 서버는 생성을 시작하기 전에 추가 메시지를 기다립니다. |
BidiGenerateContentRealtimeInput
실시간으로 전송되는 사용자 입력입니다.
다양한 형식 (오디오, 동영상, 텍스트)은 동시 스트림으로 처리됩니다. 이러한 스트림의 순서는 보장되지 않습니다.
이는 몇 가지 점에서 BidiGenerateContentClientContent
와 다릅니다.
- 모델 생성을 중단하지 않고 연속으로 전송할 수 있습니다.
BidiGenerateContentClientContent
와BidiGenerateContentRealtimeInput
에서 교차 삽입된 데이터를 혼합해야 하는 경우 서버는 최상의 응답을 위해 최적화하려고 시도하지만 보장되지는 않습니다.- 차례 종료는 명시적으로 지정되지 않으며 대신 사용자 활동 (예: 음성 종료)에서 파생됩니다.
- 턴이 끝나기 전에도 모델의 응답을 빠르게 시작할 수 있도록 데이터가 점진적으로 처리됩니다.
필드 | |
---|---|
mediaChunks[] |
선택사항입니다. 미디어 입력을 위한 인라인 바이트 데이터입니다. 여러 개의 지원 중단됨: 대신 |
audio |
선택사항입니다. 이러한 데이터가 실시간 오디오 입력 스트림을 형성합니다. |
video |
선택사항입니다. 이러한 프레임이 실시간 동영상 입력 스트림을 형성합니다. |
activityStart |
선택사항입니다. 사용자 활동의 시작을 표시합니다. 자동 (즉, 서버 측) 활동 감지가 사용 중지된 경우에만 전송할 수 있습니다. |
activityEnd |
선택사항입니다. 사용자 활동 종료를 표시합니다. 자동 (즉, 서버 측) 활동 감지가 사용 중지된 경우에만 전송할 수 있습니다. |
audioStreamEnd |
선택사항입니다. 마이크가 꺼져서 오디오 스트림이 종료되었음을 나타냅니다. 자동 활동 감지가 사용 설정된 경우에만 전송해야 합니다 (기본값). 클라이언트는 오디오 메시지를 전송하여 스트림을 다시 열 수 있습니다. |
text |
선택사항입니다. 이러한 텍스트가 실시간 텍스트 입력 스트림을 형성합니다. |
BidiGenerateContentServerContent
클라이언트 메시지에 대한 응답으로 모델에서 생성된 증분 서버 업데이트입니다.
콘텐츠는 실시간이 아닌 최대한 빨리 생성됩니다. 클라이언트는 버퍼링 및 실시간 재생을 선택할 수 있습니다.
필드 | |
---|---|
generationComplete |
출력 전용입니다. true인 경우 모델 생성이 완료되었음을 나타냅니다. 생성 중에 모델이 중단되면 중단된 턴에 'generation_complete' 메시지가 없으며 'interrupted > turn_complete'를 거칩니다. 모델이 실시간 재생을 가정하면 재생이 완료될 때까지 모델이 대기함에 따라 generation_complete와 turn_complete 사이에 지연이 발생합니다. |
turnComplete |
출력 전용입니다. true인 경우 모델이 턴을 완료했음을 나타냅니다. 생성은 추가 클라이언트 메시지에 대한 응답으로만 시작됩니다. |
interrupted |
출력 전용입니다. true인 경우 클라이언트 메시지가 현재 모델 생성을 중단했음을 나타냅니다. 클라이언트가 콘텐츠를 실시간으로 재생하는 경우 현재 재생목록을 중지하고 비우는 것이 좋습니다. |
groundingMetadata |
출력 전용입니다. 생성된 콘텐츠의 그라운딩 메타데이터입니다. |
outputTranscription |
출력 전용입니다. 오디오 스크립트 작성 출력 스크립트는 다른 서버 메시지와 별개로 전송되며, 특히 |
modelTurn |
출력 전용입니다. 모델이 사용자와의 현재 대화의 일부로 생성한 콘텐츠입니다. |
BidiGenerateContentServerMessage
BidiGenerateContent 호출에 대한 응답 메시지입니다.
필드 | |
---|---|
usageMetadata |
출력 전용입니다. 응답에 관한 사용 메타데이터입니다. |
통합 필드 messageType . 메시지의 유형입니다. messageType 은 다음 중 하나여야 합니다. |
|
setupComplete |
출력 전용입니다. 설정이 완료될 때 클라이언트의 |
serverContent |
출력 전용입니다. 클라이언트 메시지에 대한 응답으로 모델에서 생성된 콘텐츠입니다. |
toolCall |
출력 전용입니다. 클라이언트가 |
toolCallCancellation |
출력 전용입니다. 지정된 |
goAway |
출력 전용입니다. 서버의 연결이 곧 끊어질 것이라는 알림입니다. |
sessionResumptionUpdate |
출력 전용입니다. 세션 재개 상태 업데이트 |
BidiGenerateContentSetup
첫 번째 BidiGenerateContentClientMessage
에서만 전송되는 메시지입니다. 스트리밍 RPC 기간 동안 적용할 구성을 포함합니다.
클라이언트는 추가 메시지를 보내기 전에 BidiGenerateContentSetupComplete
메시지를 기다려야 합니다.
필드 | |
---|---|
model |
필수 항목입니다. 모델의 리소스 이름입니다. 이는 모델에서 사용할 ID로 사용됩니다. 형식: |
generationConfig |
선택사항입니다. 생성 구성 다음 필드는 지원되지 않습니다.
|
systemInstruction |
선택사항입니다. 사용자가 모델의 시스템 지침을 제공했습니다. 참고: 부분에는 텍스트만 사용해야 하며 각 부분의 콘텐츠는 별도의 단락에 위치합니다. |
tools[] |
선택사항입니다. 모델이 다음 응답을 생성하는 데 사용할 수 있는
|
realtimeInputConfig |
선택사항입니다. 실시간 입력 처리를 구성합니다. |
sessionResumption |
선택사항입니다. 세션 재개 메커니즘을 구성합니다. 포함된 경우 서버는 |
contextWindowCompression |
선택사항입니다. 컨텍스트 창 압축 메커니즘을 구성합니다. 포함된 경우 서버는 구성된 길이를 초과하면 컨텍스트 크기를 자동으로 줄입니다. |
outputAudioTranscription |
선택사항입니다. 이 옵션을 설정하면 모델의 오디오 출력 스크립트 작성이 사용 설정됩니다. 스크립트는 구성된 경우 출력 오디오에 지정된 언어 코드와 일치합니다. |
BidiGenerateContentSetupComplete
이 유형에는 필드가 없습니다.
클라이언트의 BidiGenerateContentSetup
메시지에 대한 응답으로 전송됩니다.
BidiGenerateContentToolCall
클라이언트가 functionCalls
를 실행하고 일치하는 id
를 가진 응답을 반환하도록 요청합니다.
필드 | |
---|---|
functionCalls[] |
출력 전용입니다. 실행할 함수 호출입니다. |
BidiGenerateContentToolCallCancellation
지정된 id
가 포함된 이전에 발급된 ToolCallMessage
가 실행되어서는 안 되며 취소되어야 한다는 클라이언트 알림입니다. 이러한 도구 호출에 부작용이 있는 경우 클라이언트는 도구 호출을 실행취소하려고 시도할 수 있습니다. 이 메시지는 클라이언트가 서버 전환을 중단하는 경우에만 발생합니다.
필드 | |
---|---|
ids[] |
출력 전용입니다. 취소할 도구 호출의 ID입니다. |
BidiGenerateContentToolResponse
클라이언트가 서버에서 수신한 ToolCall
에 대한 응답을 생성했습니다. 개별 FunctionResponse
객체는 id
필드를 통해 각각의 FunctionCall
객체와 일치합니다.
단항 및 서버 스트리밍 GenerateContent API 함수 호출이 Content
부분을 교환하여 발생하는 반면, bidi GenerateContent API 함수 호출은 이러한 전용 메시지 세트를 통해 발생합니다.
필드 | |
---|---|
functionResponses[] |
선택사항입니다. 함수 호출에 대한 응답입니다. |
BidiGenerateContentTranscription
오디오 스크립트 (입력 또는 출력)
필드 | |
---|---|
text |
스크립트 텍스트 |
ContextWindowCompressionConfig
모델의 컨텍스트 창이 지정된 길이를 초과하지 않도록 관리하는 메커니즘인 컨텍스트 창 압축을 사용 설정합니다.
필드 | |
---|---|
통합 필드 compressionMechanism . 사용된 컨텍스트 창 압축 메커니즘입니다. compressionMechanism 은 다음 중 하나여야 합니다. |
|
slidingWindow |
슬라이딩 창 메커니즘 |
triggerTokens |
컨텍스트 창 압축을 트리거하는 데 필요한 토큰 수 (회전 실행 전)입니다. 맥락 창이 짧을수록 모델 응답이 더 빨라질 수 있으므로 품질과 지연 시간 간의 균형을 맞추는 데 사용할 수 있습니다. 그러나 압축 작업을 하면 일시적으로 지연 시간이 증가하므로 자주 트리거해서는 안 됩니다. 설정하지 않으면 기본값은 모델의 컨텍스트 창 한도의 80% 입니다. 그러면 다음 사용자 요청/모델 응답에 20% 가 남게 됩니다. |
EndSensitivity
음성의 끝이 감지되는 방식을 결정합니다.
열거형 | |
---|---|
END_SENSITIVITY_UNSPECIFIED |
기본값은 END_SENSITIVITY_HIGH입니다. |
END_SENSITIVITY_HIGH |
자동 감지는 음성을 더 자주 종료합니다. |
END_SENSITIVITY_LOW |
자동 감지는 음성의 끝을 더 적게 감지합니다. |
GoAway
서버의 연결이 곧 끊어질 것이라는 알림입니다.
필드 | |
---|---|
timeLeft |
연결이 ABORTED로 종료되기까지 남은 시간입니다. 이 기간은 모델의 비율 제한과 함께 지정되는 모델별 최솟값보다 작을 수 없습니다. |
RealtimeInputConfig
BidiGenerateContent
에서 실시간 입력 동작을 구성합니다.
필드 | |
---|---|
automaticActivityDetection |
선택사항입니다. 설정하지 않으면 자동 활동 감지가 기본적으로 사용 설정됩니다. 자동 음성 감지가 사용 중지된 경우 클라이언트는 활동 신호를 전송해야 합니다. |
activityHandling |
선택사항입니다. 활동의 효과를 정의합니다. |
turnCoverage |
선택사항입니다. 사용자의 차례에 포함되는 입력을 정의합니다. |
SessionResumptionConfig
세션 재개 구성
이 메시지는 세션 구성에 BidiGenerateContentSetup.sessionResumption
로 포함됩니다. 구성된 경우 서버는 SessionResumptionUpdate
메시지를 전송합니다.
필드 | |
---|---|
handle |
이전 세션의 핸들입니다. 세션이 없으면 새 세션이 생성됩니다. 세션 핸들은 이전 연결의 |
SessionResumptionUpdate
세션 재개 상태 업데이트
BidiGenerateContentSetup.sessionResumption
가 설정된 경우에만 전송됩니다.
필드 | |
---|---|
newHandle |
재개할 수 있는 상태를 나타내는 새 핸들입니다. |
resumable |
이 시점에서 현재 세션을 재개할 수 있는 경우 true입니다. 세션의 일부 지점에서는 재개할 수 없습니다. 예를 들어 모델이 함수 호출을 실행하거나 생성하는 경우입니다. 이러한 상태에서 이전 세션 토큰을 사용하여 세션을 재개하면 일부 데이터가 손실됩니다. 이 경우 |
SlidingWindow
SlidingWindow 메서드는 컨텍스트 창의 시작 부분에서 콘텐츠를 삭제하여 작동합니다. 결과 컨텍스트는 항상 사용자 역할 차례의 시작 부분에서 시작됩니다. 시스템 안내와 모든 BidiGenerateContentSetup.prefixTurns
는 항상 결과의 시작 부분에 유지됩니다.
필드 | |
---|---|
targetTokens |
유지할 대상 토큰 수입니다. 기본값은 trigger_tokens/2입니다. 컨텍스트 창의 일부를 삭제하면 일시적인 지연 시간이 증가하므로 빈번한 압축 작업을 방지하기 위해 이 값을 보정해야 합니다. |
StartSensitivity
음성 시작이 감지되는 방식을 결정합니다.
열거형 | |
---|---|
START_SENSITIVITY_UNSPECIFIED |
기본값은 START_SENSITIVITY_HIGH입니다. |
START_SENSITIVITY_HIGH |
자동 감지를 사용하면 음성 시작이 더 자주 감지됩니다. |
START_SENSITIVITY_LOW |
자동 감지는 음성 시작을 더 적게 감지합니다. |
TurnCoverage
사용자의 차례에 포함되는 입력에 관한 옵션입니다.
열거형 | |
---|---|
TURN_COVERAGE_UNSPECIFIED |
지정하지 않으면 기본 동작은 TURN_INCLUDES_ONLY_ACTIVITY 입니다. |
TURN_INCLUDES_ONLY_ACTIVITY |
사용자 차례에는 비활성 상태 (예: 오디오 스트림의 침묵)를 제외하고 마지막 차례 이후의 활동만 포함됩니다. 이것이 기본 동작입니다. |
TURN_INCLUDES_ALL_INPUT |
사용자 차례에는 비활성 상태 (예: 오디오 스트림의 침묵)를 포함하여 마지막 차례 이후의 모든 실시간 입력이 포함됩니다. |
UsageMetadata
응답에 관한 사용 메타데이터입니다.
필드 | |
---|---|
promptTokenCount |
출력 전용입니다. 프롬프트의 토큰 수입니다. |
cachedContentTokenCount |
프롬프트의 캐시된 부분 (캐시된 콘텐츠)에 있는 토큰 수 |
responseTokenCount |
출력 전용입니다. 생성된 모든 응답 후보의 총 토큰 수입니다. |
toolUsePromptTokenCount |
출력 전용입니다. 도구 사용 프롬프트에 있는 토큰 수입니다. |
thoughtsTokenCount |
출력 전용입니다. 사고 모델의 생각 토큰 수입니다. |
totalTokenCount |
출력 전용입니다. 생성 요청의 총 토큰 수 (프롬프트 + 응답 후보)입니다. |
promptTokensDetails[] |
출력 전용입니다. 요청 입력에서 처리된 모달리티 목록입니다. |
cacheTokensDetails[] |
출력 전용입니다. 요청 입력에서 캐시된 콘텐츠의 모달 목록입니다. |
responseTokensDetails[] |
출력 전용입니다. 응답에 반환된 모달 목록입니다. |
toolUsePromptTokensDetails[] |
출력 전용입니다. 도구 사용 요청 입력에 대해 처리된 모달 목록입니다. |
일반적인 유형에 대한 자세한 정보
널리 사용되는 API 리소스 유형인 Blob
, Content
, FunctionCall
, FunctionResponse
, GenerationConfig
, GroundingMetadata
, ModalityTokenCount
, Tool
에 관한 자세한 내용은 콘텐츠 생성을 참고하세요.