본문으로 건너뛰기
버전: 최신 버전

Start Session

세션 토큰으로 인터랙티브 아바타 세션을 시작합니다. 응답으로 받은 livekit.urllivekit.token으로 실시간 영상 스트리밍에 연결합니다.

LiveKit 이란?

LiveKit은 WebRTC 기반의 실시간 영상 스트리밍 인프라입니다. Start Session API 응답으로 livekit.url, livekit.token, room_name을 받은 뒤 client에서 room.connect(url, token)과 같은 메서드로 LiveKit server에 연결합니다. 연결이 성공하면 아바타의 영상, 음성, 데이터 채널이 실시간으로 스트리밍됩니다.

POST /api/v2/sessions/start

Headers

헤더
AuthorizationBearer {session_token}
Content-Typeapplication/json

Body

필드타입필수 여부설명
avatar_idstringrequired사용할 Avatar / model ID
avatar_personaobjectoptionalPersona 및 LLM override. 생략 시 server default가 적용됩니다: English(en), OpenAI, gpt-4.1-nano.
avatar_persona.languagestringoptional예: en, ko, en-US
avatar_persona.llm_configurationsobjectoptionalLLM provider/model 설정. 생략 시 server default가 적용됩니다.
avatar_persona.llm_configurations.providerstringoptional예: openai, anthropic, google, custom
avatar_persona.llm_configurations.modelstringoptionalModel ID
avatar_persona.llm_configurations.temperaturenumberoptionalLLM으로 전달되는 temperature
avatar_persona.llm_configurations.custom_settingsobjectoptionalgreeting_text, system_prompt override
avatar_persona.llm_configurations.custom_httpobjectoptionalprovider"custom"일 때 사용합니다. endpoint 또는 url이 필요합니다.
max_session_durationintegeroptional세션 최대 길이(분). Plan limit 이하여야 합니다.
lip_audio_modestringoptionalllm_tts 또는 external_pcm. 생략 시 기본 audio 동작이 적용됩니다.

max_session_duration을 생략하면 Account subscription limit이 적용됩니다. max_session_numbers는 request body에서 받지 않으며 내부 billing validation에서 가져옵니다.

Custom HTTP LLM

자체 HTTP LLM endpoint를 session에서 사용하려면 avatar_persona.llm_configurations.provider: "custom"custom_http를 사용합니다.

필드타입설명
endpointstringCustom LLM server의 전체 POST URL
urlstringendpoint alias. endpoint가 없으면 endpoint로 mapping됩니다.
connect_timeout_sec, read_timeout_sec, timeout_secnumber연결/읽기 timeout(초)
max_messages, max_chars, max_buffer_charsnumber대화 trim 및 text flush 제한
http_error_messagestringUpstream HTTP 4xx/5xx 발생 시 반환할 message prefix
stream_connect_retries, stream_connect_retry_delay_secnumber첫 SSE line 또는 response body를 받기 전 retry 설정
headers, extra_headersobject정적 header. 둘 중 하나 사용을 권장합니다. 둘 다 있으면 headers를 사용합니다.
auth_pluginsarrayAuth plugin objects
streamboolean기본값은 SSE용 true. 단일 JSON 응답이면 false를 사용합니다.
api_presetstringopenai_compatible(기본), anthropic_messages, gemini_generate_content

동작 메모:

  • api_preset 기본값은 openai_compatible입니다. Anthropic Messages API payload에는 anthropic_messages, Gemini GenerateContent payload에는 gemini_generate_content를 사용합니다.
  • api_presetanthropic_messages이면 model이 필수입니다.
  • stream 기본값은 true이며 SSE를 기대합니다. Upstream이 단일 JSON 응답을 반환할 때만 stream: false를 설정하세요. openai_compatible에서는 choices[0].message.content에서 text를 읽습니다.
  • Header merge 순서는 default headers(Content-Type, Accept) → headers / extra_headersauth_plugins입니다. 뒤 값이 앞 값을 덮어씁니다.
  • 기본 timing 값은 connect_timeout_sec: 10, read_timeout_sec: 120, stream_connect_retries: 1, stream_connect_retry_delay_sec: 0.4입니다.
  • Production에서는 신뢰할 수 없는 client가 raw API key를 보내게 하기보다 auth_plugins 또는 environment-backed header로 server-side에서 secret을 조합하는 방식을 권장합니다.

Greeting / first utterance

custom_settings.greeting_text가 있고 trim 후 빈 문자열이 아니면, 서비스는 Start Session 성공 직후 server-side chat message를 자동으로 한 번 보냅니다.

  • Message: [FIRST_MESSAGE] + trimmed greeting_text
  • Internal talk type: first_message

팁: [FIRST_MESSAGE] 뒤에 붙은 텍스트는 그대로 아바타가 발화하므로, greeting_text를 초기 안내/인사 발화로 활용할 수 있습니다.

lip_audio_modeexternal_pcm이면 서비스는 자동 첫 message를 보내지 않습니다.

예시

기본 session

curl https://ai-streamer.deepbrain.io/api/v2/sessions/start \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${SESSION_TOKEN}" \
-d '{
"avatar_id": "${YOUR_AVATAR_ID}"
}'

Custom LLM 사용

Custom HTTP LLM endpoint에 연결합니다.

curl https://ai-streamer.deepbrain.io/api/v2/sessions/start \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${SESSION_TOKEN}" \
-d '{
"avatar_id": "${YOUR_AVATAR_ID}",
"avatar_persona": {
"language": "en",
"llm_configurations": {
"provider": "custom",
"model": "my-llm-model",
"custom_settings": {
"system_prompt": "You are a helpful assistant.",
"greeting_text": "Hello! How can I help you today?"
},
"custom_http": {
"endpoint": "https://your-llm-backend.example.com/v1/chat/completions",
"api_preset": "openai_compatible",
"stream": true,
"read_timeout_sec": 180,
"headers": {
"Authorization": "Bearer ${YOUR_LLM_API_KEY}"
}
}
}
}
}'

성공 (201, code: 1000)

{
"code": 1000,
"data": {
"session_id": "${SESSION_ID}",
"max_session_duration": 20,
"max_session_numbers": 10,
"use_server_ready": true,
"livekit": {
"url": "wss://your-livekit-host",
"room_name": "room-…",
"token": "${LIVEKIT_ACCESS_TOKEN}"
}
},
"message": "Session created successfully"
}

요청에 lip_audio_mode: "external_pcm"이 포함되면 응답 data에 LiveKit byte stream topic, PCM format, segment 동작을 설명하는 lip_audio가 추가됩니다. lip_audio_mode가 생략되었거나 llm_tts이면 lip_audio는 생략됩니다.

use_server_ready는 LiveKit server-side readiness를 위한 client coordination flag입니다. 현재 V2 start에서는 true로 반환됩니다.

Next Step

Start Session 호출 후 livekit.urllivekit.token을 사용하여 LiveKit에 연결하면 아바타의 영상과 음성이 실시간으로 스트리밍됩니다. 사용자 message 없이 session을 유지해야 하면 Session Keep-Alive API를 주기적으로 호출하세요.