GPT-Live의 위임과 도구
GPT-Live의 위임과 도구
GPT-Live는 음성 대화를 관리하면서 추론과 도구 사용을 백엔드에 위임합니다. 백엔드 작업은 구성된 Responses 모델을 통해, 또는 클라이언트 위임에서는 애플리케이션이 운영하는 어떤 모델·에이전트·서비스든 통해 실행될 수 있습니다. 어느 모드에서든 애플리케이션이 권한, 확인, 비즈니스 기록, 작업 상태를 소유합니다.
위임과 도구를 위한 라이브 모델 스티어링에 대해 프롬프팅 가이드에서 자세히 읽어보세요.
이 페이지의 이벤트 예시는 연결 가이드의 연결된 기본 Live WebSocket 또는 사이드밴드인 connection을 사용합니다. 기본 연결에서는 이벤트 헬퍼를 호출하기 전에 session.started를 기다리세요. 연결된 사이드밴드는 이미 실행 중인 세션에 속합니다.
출처: 문서
본문
위임 모드 선택
**Responses 위임**으로 GPT-Live가 선택한 Responses 모델을 호출하고, 대화 컨텍스트를 제공하며, 백엔드 결과를 라이브 대화로 반환하게 합니다. **클라이언트 위임**에서는 애플리케이션이 컨텍스트를 준비하고, 에이전트나 워크플로를 실행하며, 결과를 GPT-Live로 다시 보냅니다.
GPT-Live가 요청을 관리하기를 원하면 Responses 위임으로 시작하세요. 자체 워크플로를 실행하거나 GPT-Live에 보내기 전에 결과를 검토해야 할 때는 클라이언트 위임을 선택하세요.
| 고려 사항 | 다음과 같은 경우 Responses 위임을 선호 | 다음과 같은 경우 클라이언트 위임을 선호 |
|---|---|---|
| 구현 노력 | GPT-Live가 백엔드 요청을 준비하고, 연결을 관리하고, 결과를 대화로 반환하게 하려는 경우. | 그 부분들을 직접 구축하고 운영하려는 경우. |
| 백엔드 결과 검토 | 백엔드 출력이 GPT-Live에 직접 반환될 수 있는 경우. | 애플리케이션이 GPT-Live에 도달하기 전에 결과를 검증·삭제·결합·폐기해야 하는 경우. |
| 백엔드 기능 | 워크플로가 GPT-Live가 지원하는 Responses 설정과 도구에 맞는 경우. | 관리되는 구성 너머의 다른 백엔드, 여러 모델 또는 API 기능이 필요한 경우. |
| 컨텍스트 소유권 | GPT-Live가 제공하는 대화 컨텍스트가 애플리케이션에 맞는 경우. | 각 백엔드 요청이 받을 기록, 메모리, 애플리케이션 상태를 정확히 선택해야 하는 경우. |
| 실행 정책 | 구성된 모델과 도구 루프가 작업에 맞는 경우. | 백엔드 단계 전반에서 코드와 모델 간 커스텀 라우팅, 폴백, 체크포인트 또는 예산이 필요한 경우. |
예를 들어 여행 assistant는 항공편 상태 질문을 항공사 서비스로, 일정 변경을 별도의 계획 에이전트로 보낼 수 있습니다. 애플리케이션이 어떤 백엔드를 호출하고 GPT-Live에 어떤 검증된 결과를 반환할지 선택합니다.
두 모드 모두에서 애플리케이션은 작업 진행 상황을 추적하고, 커스텀 도구를 실행하기 전에 권한과 필요한 사용자 확인을 검사합니다. GPT-Live는 애플리케이션이 백엔드 결과를 검토하는 동안 계속 말할 수 있습니다. 사용자가 오디오를 듣는 시점을 애플리케이션이 제어해야 한다면 재생 제어를 추가하세요.
클라이언트 위임은 애플리케이션이 대화 컨텍스트를 유지해야 합니다. 위임 이벤트는 메타데이터를 포함하지, 작업 텍스트를 포함하지 않습니다. 대본 이벤트와 애플리케이션 상태를 사용해 백엔드 요청을 준비하세요.
음성 에이전트를 평가할 때 자체 워크로드에서 지연 시간, 작업 성공, 비용을 비교하세요. 기존 아키텍처에 대한 지침은 GPT-Live로 마이그레이션을 참고하세요.
세션을 만들 때 모드를 선택하세요. 모드를 바꾸려면 새 세션을 시작하세요.
Responses 위임 구성
Live 세션을 만들 때 이 위임 구성을 추가하세요. 음성 모델과 독립적으로 Responses 모델을 선택하세요:
from openai.types.live.session_config_param import SessionConfigParam
session: SessionConfigParam = {
"model": "gpt-live-1",
"delegation": {
"type": "responses",
"responses": {
"model": "gpt-6-luna",
"instructions": "[Your backend prompt]",
},
},
}
gpt-6-luna로 시작하거나, 더 복잡한 백엔드 작업에는 gpt-6-sol을 시도하세요. 백엔드 모델을 선택하기 전에 작업에서 답변 품질과 지연 시간을 비교하세요.
delegation.responses.tools에 지원되는 도구를 등록하세요. delegation.responses.tool_choice를 "auto"(백엔드가 도구 선택), "required"(도구 호출 요구), 또는 "none"(도구 호출 비활성화)으로 설정하세요. 명명된 함수를 선택할 수도 있습니다.
delegation.responses.parallel_tool_calls를 true(응답 내 여러 도구 호출 허용) 또는 false(순차 호출)로 설정하세요. 애플리케이션이 커스텀 함수를 실행하고 그 의존성과 필요한 승인을 확인합니다. 이 설정은 GPT-Live가 위임한 후에 적용됩니다. 언제 위임해야 하는지 안내하려면 라이브 프롬프트를 사용하세요.
Responses 구성은 생성 시 백엔드 model을 요구합니다. tools에서 function 정의와 web_search 항목을 지원합니다. 또한 max_output_tokens(설정 시 최소 16), service_tier, 선택한 백엔드 모델이 지원하는 reasoning과 text 설정을 노출합니다. 조정할 수 있는 설정은 백엔드 지연 시간 줄이기를 참고하세요.
모델과 프로젝트에 Fast mode를 사용할 수 있다면 지연 시간에 민감한 호출에 고려하세요. GPT-Live의 경우 delegation.responses.service_tier: "priority"로 선택하세요.
대화 중 백엔드 모델, 지침, 도구, tool_choice 또는 다른 지원 설정을 업데이트하려면 session.delegation.responses의 변경 사항과 함께 session.update를 보내세요. 생략된 설정은 현재 값을 유지합니다.
Responses와 클라이언트 위임을 전환하려면 새 Live 세션을 만드세요. delegation을 null로 업데이트하는 것은 클라이언트 모드를 선택하는 것이므로, 실행 중인 Responses 세션에 보내면 immutable_field_update로 실패합니다.
이 설정들은 익숙한 Responses 개념을 사용하지만, Live는 독립형 Responses API의 하위 집합을 지원합니다. Live가 대화 컨텍스트를 제공하고 위임된 작업을 시작합니다. 세션을 통해 백엔드를 구성하세요. Live response.create 명령은 그 구성을 사용하며 독립형 Responses 요청 본문을 받지 않습니다.
애플리케이션에서 라이브 대화 스티어링
Responses 위임이 백엔드 워크플로를 관리하지만, 애플리케이션은 여전히 GPT-Live 모델에 직접 컨텍스트를 보낼 수 있습니다. 사이드밴드 WebSocket이나 메인 이벤트 연결로 통화를 모니터링한다면 delegation_id: null과 함께 session.instructions.append, session.thinking.append, 또는 session.commentary.append를 사용할 수 있습니다. 예를 들어 대본 기반 가드레일이 대화를 리디렉션하는 지침을 추가할 수 있습니다. 이것은 라이브 모델을 스티어링합니다. Responses 백엔드 프롬프트를 변경하거나 이미 진행 중인 작업을 취소하지는 않습니다.
Responses 위임 처리
Responses 기반 작업의 경우 session.delegation.created에서 target: "responses"와 response_id를 가집니다. 이후 Responses 이벤트는 response.event 봉투 안에 도착합니다:
{
"type": "response.event",
"event_id": "event_response_1",
"delegation_id": "item_9tA2cB6n2V8c4X1z7Q5r9",
"event": {
"type": "response.output_text.delta",
"sequence_number": 4,
"item_id": "msg_123",
"output_index": 0,
"content_index": 0,
"delta": "The forecast is",
"logprobs": []
}
}
최상위 이벤트 유형이 response.event일 때 envelope.event.type으로 디스패치하세요. 외부 delegation_id를 저장해 백엔드 이벤트를 그 위임과 연관시키세요. 핸들러는 여기에 표시된 것 너머의 중첩된 Responses 수명 주기 이벤트도 받을 수 있습니다.
Live 음성과 위임된 작업은 독립적으로 계속됩니다. 완료된 백엔드 응답이 사용자가 답을 들었다는 의미는 아닙니다. 상호작용의 음성 부분에는 Live 출력 대본과 오디오를 사용하세요.
커스텀 함수 실행 및 결과 반환
중첩된 response.output_item.done 이벤트에서 완료된 함수 호출을 읽으세요. 완료된 함수 항목은 call_id, name, arguments를 포함합니다. 인자 완료 이벤트만으로는 호출을 식별하기에 충분하지 않습니다.
외부 delegation_id와 함께 중첩된 response.created의 응답 ID를 추적하세요. response.output_item.done에서 응답의 함수 호출을 수집하고, 계속하기 전에 어떤 도구 결과를 제출할지 결정하는 데 그 수집을 사용하세요.
response.completed를 포함한 전달된 수명 주기 이벤트는 함수 호출에 결과가 필요할 때도 response.output: []을 포함합니다. 이 이벤트들은 빈 tools 배열, instructions: null, input 필드가 없습니다. 함수 호출은 개별 출력 항목 이벤트에서 읽으세요.
승인된 작업을 실행한 뒤 결과를 Responses 항목으로 추가하세요:
export function sendUpdate(connection) {
connection.send({
type: "response.item.create",
event_id: "tool_result_1",
item: {
type: "function_call_output",
call_id: "call_123",
output: '{"status":"confirmed","order_id":"order_123"}',
},
});
}
from openai.resources.live.live import AsyncLiveConnection
from openai.resources.live.sideband import AsyncSidebandConnection
from openai.types.responses.response_input_item_param import ResponseInputItemParam
async def send_update(
connection: AsyncLiveConnection | AsyncSidebandConnection,
) -> None:
item: ResponseInputItemParam = {
"type": "function_call_output",
"call_id": "call_123",
"output": '{"status":"confirmed","order_id":"order_123"}',
}
await connection.response.item.create(
event_id="tool_result_1",
item=item,
)
그런 다음 응답을 명시적으로 계속하세요:
export function sendUpdate(connection) {
connection.send({
type: "response.create",
event_id: "continue_1",
});
}
from openai.resources.live.live import AsyncLiveConnection
from openai.resources.live.sideband import AsyncSidebandConnection
async def send_update(
connection: AsyncLiveConnection | AsyncSidebandConnection,
) -> None:
await connection.response.create(
event_id="continue_1",
)
보류 중인 모든 함수 호출에 response.item.create 결과를 보낸 뒤 response.create로 백엔드 응답을 계속하세요. response.item.create에는 별도의 성공 확인이 없습니다. 오류와 중첩된 Responses 수명 주기 이벤트를 계속 처리하세요.
두 명령 모두 Responses 위임이 필요합니다. Live response.create 명령은 세션에 저장된 백엔드 구성을 사용합니다. 위에 표시된 이벤트 페이로드를 사용하고, 백엔드 모델과 다른 설정은 세션을 통해 구성하세요.
클라이언트 위임 구성
Live 세션을 만들 때 delegation을 설정하세요:
from openai.types.live.session_config_param import SessionConfigParam
session: SessionConfigParam = {"model": "gpt-live-1", "delegation": {"type": "client"}}
애플리케이션이 백엔드를 구성하고 실행합니다: 그 모델이나 서비스, 지침, 도구, 라우팅을 선택하세요. 백엔드가 Responses API를 사용한다면 애플리케이션의 Responses 요청에서 그 모델과 도구를 설정하세요.
GPT-Live가 도움을 요청하면 저장된 대화 기록과 현재 작업 상태에서 백엔드 요청을 구성하세요. 권한과 필요한 확인을 검사하고, 작업을 실행하고, 반환할 결과를 선택하세요.
애플리케이션에서 대화 컨텍스트 유지
클라이언트 위임의 경우 대본을 수집하고 현재 작업 상태를 직접 유지하세요.
session.input_transcript.delta와 session.output_transcript.delta를 수신하세요. 이 이벤트는 delta에 대본 텍스트를, start_ms와 end_ms 타임스탬프를 포함합니다. "yes" 같은 짧은 답변, "Thursday, not Friday" 같은 수정, 이전에 제공된 세부 사항을 이해하기에 충분한 기록을 유지하세요. 대본 조각은 완전한 사용자 턴이 아니며, 대본에는 실수가 있을 수 있습니다.
별도의 session.delegation.created 이벤트는 offset_ms 타임스탬프와 delegation.id, delegation.target을 포함한 위임 메타데이터를 포함합니다. 사용자의 발언이나 작업 텍스트는 포함하지 않습니다. 대본 이벤트와 애플리케이션 상태를 사용해 사용자가 원하는 것을 파악하세요. 업데이트를 그 요청과 일치시키려면 delegation.id를 저장하세요.
긴 기록과 전체 도구 출력은 백엔드에 유지하세요. 교체 세션을 만든다면 애플리케이션에서 관련 컨텍스트를 복원하고, 작업을 반복하기 전에 어떤 작업이 이미 실행되었는지 확인하세요.
클라이언트 위임 받기
session.delegation.created가 위임을 식별합니다:
{
"type": "session.delegation.created",
"event_id": "event_delegation",
"offset_ms": 1000,
"delegation": {
"id": "item_9tA2bF3h7K9m2P5q8R1s4",
"type": "delegation",
"target": "client"
}
}
event.delegation.id를 저장하고 이 작업에 대한 업데이트에 변경 없이 포함하세요.
그 ID로 결과를 반환하세요:
export function sendUpdate(connection) {
connection.send({
type: "session.commentary.append",
event_id: "result_123",
delegation_id: "item_9tA2bF3h7K9m2P5q8R1s4",
content: "The order shipped today and should arrive tomorrow.",
});
}
from openai.resources.live.live import AsyncLiveConnection
from openai.resources.live.sideband import AsyncSidebandConnection
async def send_update(
connection: AsyncLiveConnection | AsyncSidebandConnection,
) -> None:
await connection.session.commentary.append(
event_id="result_123",
delegation_id="item_9tA2bF3h7K9m2P5q8R1s4",
content="The order shipped today and should arrive tomorrow.",
)
GPT-Live가 소리 내어 말해야 하는 결과에는 session.commentary.append를 사용하세요. 그것은 텍스트를 의역하도록 학습되었습니다. 나중에 답변에서 사용할 수 있고 도착 시 말하지 않아도 되는 사실이나 진행 상황에는 session.thinking.append를 사용하세요. 같은 클라이언트 위임 ID로 여러 업데이트를 보낼 수 있습니다.
콘텐츠 제한, 필수 필드, 확인 타이밍은 올바른 종류의 업데이트 보내기를 참고하세요.
기존 백엔드 프롬프트로 시작
기존 텍스트 에이전트 프롬프트를 시작점으로 사용하세요. 작업 지침과 비즈니스 규칙은 백엔드에 두고, 텍스트 채팅이나 음성 직접 제어를 가정하는 지침은 적용하세요. 음성 대본 처리와 유용한 결과 반환을 설명하세요. 권한과 필요한 확인은 애플리케이션에서 강제하세요.
## Voice conversation context
You are helping an assistant in a live voice conversation. Transcripts
can contain mistakes, unfinished phrases, and later corrections. Use
the latest context and verified records. If a needed detail is still
unclear, ask for that detail instead of guessing.
## Task instructions
[Your task instructions, business rules, available tools,
and confirmation requirements.]
## Return the result
Return the relevant facts, the task's current status, and the next step.
Report an action as complete after the tool or service confirms success.
If the outcome is unclear, state that and explain what needs to be checked.
대형 구조화 페이로드, 긴 도구 출력, 표시용 Markdown은 백엔드에 두세요. GPT-Live에 관련 사실을 주고 어떻게 말할지 선택하게 하세요. 간결한 도구 결과는 음성으로 다시 쓰기 위한 추가 모델 호출이 필요 없습니다.
클라이언트 위임에서는 결과를 GPT-Live에 직접 반환하세요. Responses 위임에서는 함수 결과 흐름을 따라 백엔드 작업을 계속하세요.
올바른 종류의 업데이트 보내기
GPT-Live가 콘텐츠를 어떻게 사용해야 하는지에 따라 이벤트를 선택하세요:
| 보내려는 것 | 이벤트 |
|---|---|
| 인사, 공지 또는 말하기 중지 지시 같은 라이브 모델에 대한 시스템 수준 지침 | session.instructions.append |
| 추가 시 말하지 않지만 관련 사용자 질문에 사용할 수 있는 내부 추론용 정보 | session.thinking.append |
| 추가된 텍스트를 의역하며 소리 내어 말해야 하는 정보 | session.commentary.append |
세 가지 모두 일반 문자열 content를 사용하며, 추가당 500토큰으로 제한됩니다. delegation_id를 포함하세요: 그 작업에 대한 업데이트에는 원래 클라이언트 위임 ID를, 일반 세션 컨텍스트에는 null을 사용하세요. null이 아닌 ID는 알려진 클라이언트 위임을 식별해야 합니다. 지침은 여전히 라이브 세션에 적용됩니다. ID가 그것을 별도의 백엔드 프롬프트로 바꾸지는 않습니다.
추가된 지침은 모델의 현재 음성이나 동작을 중단할 수 있습니다. 애플리케이션이 대화를 리디렉션해야 할 때 사용하세요. 관련 도구나 행동 차단은 애플리케이션 상태에서 강제하세요.
클라이언트 관리 작업 중 조용한 진행 상황:
export function sendUpdate(connection) {
connection.send({
type: "session.thinking.append",
event_id: "availability_progress",
delegation_id: "item_123",
content: "Checking Thursday availability. No appointment has been booked.",
});
}
from openai.resources.live.live import AsyncLiveConnection
from openai.resources.live.sideband import AsyncSidebandConnection
async def send_update(
connection: AsyncLiveConnection | AsyncSidebandConnection,
) -> None:
await connection.session.thinking.append(
event_id="availability_progress",
delegation_id="item_123",
content="Checking Thursday availability. No appointment has been booked.",
)
확인된 예약에는 사용자가 들어야 할 결과를 보내세요:
export function sendUpdate(connection) {
connection.send({
type: "session.commentary.append",
event_id: "appointment_result",
delegation_id: "item_123",
content: "Your appointment is confirmed for Thursday at 2:00 PM",
});
}
from openai.resources.live.live import AsyncLiveConnection
from openai.resources.live.sideband import AsyncSidebandConnection
async def send_update(
connection: AsyncLiveConnection | AsyncSidebandConnection,
) -> None:
await connection.session.commentary.append(
event_id="appointment_result",
delegation_id="item_123",
content="Your appointment is confirmed for Thursday at 2:00 PM",
)
예약이 실제로 성공한 후에만 그 결과를 보내세요. 세션 전체 지침에는 delegation_id: null과 함께 session.instructions.append를 사용하세요.
예를 들어 애플리케이션이 가드레일 아래에서 요청을 차단한 후 대화를 리디렉션할 수 있습니다:
export function sendUpdate(connection) {
connection.send({
type: "session.instructions.append",
event_id: "guardrail_block_17",
delegation_id: null,
content:
"Stop speaking about that request. Briefly explain that you cannot help with it, then wait for the user.",
});
}
from openai.resources.live.live import AsyncLiveConnection
from openai.resources.live.sideband import AsyncSidebandConnection
async def send_update(
connection: AsyncLiveConnection | AsyncSidebandConnection,
) -> None:
await connection.session.instructions.append(
event_id="guardrail_block_17",
delegation_id=None,
content=(
"Stop speaking about that request. Briefly explain that you cannot help "
"with it, then wait for the user."
),
)
지침은 백엔드 작업을 취소하지 않습니다. 애플리케이션에서 영향을 받는 행동을 차단하고 이미 실행 중인 작업을 처리하세요.
해당 확인은 session.thinking.appended, session.commentary.appended, session.instructions.appended입니다. 그 client_event_id를 나가는 event_id와 일치시키세요. 확인은 추정된 컨텍스트 주입을 기다리며, 음성이나 재생 완료를 기다리지 않습니다. 타이밍과 오류 처리는 컨텍스트가 모델에 도달할 때 이해하기를 참고하세요.
GPT-Live가 대화에서 사용할 수 있는 사실과 짧은 진행 요약을 보내세요. session.thinking.append로 보낸 콘텐츠는 나중에 음성 답변에 영향을 줄 수 있습니다. 비밀과 프라이빗 백엔드 추론은 애플리케이션에 유지하세요.
업데이트를 정확하고 유용하게 유지
더 긴 작업 중에는 유용한 것이 바뀔 때 업데이트를 보내세요: 단계가 끝나거나, 지연이 중요하거나, 사용자가 질문에 답해야 할 때.
클라이언트 모드에서 백그라운드 진행 상황에는 session.thinking.append를 사용하세요. 소리 내어 말하는 것이 유용한 업데이트에는 session.commentary.append를 사용하세요.
음성 업데이트의 경우 작업의 검증된 상태와 일치하는 콘텐츠로 session.commentary.append를 보내세요:
| 상태 | 예시 콘텐츠 |
|---|---|
| Still working | "I'm checking the available appointments." |
| Completed | "You're booked for Thursday at 2:00 PM." |
| Failed | "That time is no longer available." |
| Cancellation confirmed | "Your appointment has been canceled." |
사용자가 요청을 변경하면 애플리케이션에서 활성 작업을 업데이트하세요. 예를 들어 금요일을 목요일로 바꾸면 이후 작업에 목요일을 사용하고 오래된 금요일 요청의 결과는 무시하세요. 백엔드에서 취소를 관리하고, 작업이 취소되었다고 사용자에게 말하기 전에 성공을 확인하세요. 음성 대화를 중단해도 백엔드 작업은 계속 실행됩니다.
실패한 도구 호출을 재시도하기 전에 원래 행동이 이미 일어났는지 확인하세요. 예를 들어 유실된 응답이 두 번째 예약을 만들지 않아야 합니다. 결과가 불확실하면 그렇게 말하고 다음 유용한 단계를 제안하세요.
UI 컨텍스트 공유
GPT-Live에 현재 페이지나 작업의 간결한 요약, 관련 선택, "이 옵션" 같은 참조를 해석하는 데 도움이 되는 사실을 주세요. 요약을 애플리케이션 상태에서 직접 구성하세요. 형식을 지정하기 위한 추가 모델 호출은 필요 없습니다.
세션 시작과 관련 상태 변경 시 UI 컨텍스트를 보내세요. 변경되지 않은 업데이트는 건너뛰고 빠른 변경을 최신 상태의 짧은 요약으로 결합하세요. 이전 선택의 변경을 명시적으로 만드세요:
- 초기 컨텍스트: "The user is reviewing a restaurant reservation: August 6 at 7 PM, two guests. No reservation has been made."
- 수정: "The selected time is now 8 PM; the previous selection was 7 PM."
어느 위임 모드에서든 백그라운드 컨텍스트 업데이트에는 delegation_id: null과 함께 session.thinking.append를 사용하세요. 전체 HTML, DOM 트리, 대형 JSON 페이로드, 상호작용 로그는 애플리케이션이나 백엔드에 유지하세요. 페이지 콘텐츠를 지침이 아니라 참조 데이터로 취급하세요.
타이핑된 입력 수용
주문 번호 같은 타이핑된 값을 사용자가 제공한 데이터로 백엔드에 보내 정확한 텍스트를 사용하게 하세요.
Responses 위임에서 백엔드에 사용자 메시지를 큐에 넣으세요:
export function sendUpdate(connection) {
connection.send({
type: "response.item.create",
event_id: "typed_order_number",
item: {
type: "message",
role: "user",
content: [
{
type: "input_text",
text: "My order number is A0042.",
},
],
},
});
}
from openai.resources.live.live import AsyncLiveConnection
from openai.resources.live.sideband import AsyncSidebandConnection
from openai.types.responses.response_input_item_param import ResponseInputItemParam
async def send_update(
connection: AsyncLiveConnection | AsyncSidebandConnection,
) -> None:
item: ResponseInputItemParam = {
"type": "message",
"role": "user",
"content": [{"type": "input_text", "text": "My order number is A0042."}],
}
await connection.response.item.create(
event_id="typed_order_number",
item=item,
)
백엔드를 실행하거나 계속할 준비가 되면 response.create를 보내세요. 함수 결과를 기다리고 있다면 먼저 모든 필수 결과를 반환하세요. 텍스트를 큐에 넣는 것만으로 이미 실행 중인 작업이 취소되지는 않습니다.
클라이언트 위임에서는 타이핑된 값을 대화를 처리하는 백엔드에 직접 보내세요. 실행 중인 작업을 수정한다면 같은 작업을 다시 시작하는 대신 그 작업을 업데이트하세요. 짧은 사실 요약을 session.thinking.append로 라이브 세션에 반영하거나, 사용자가 들어야 하는 결과에는 session.commentary.append를 사용할 수 있습니다.
이미지와 시각적 컨텍스트 추가
호출자가 사진이나 화면에 대해 논의할 수 있도록, 애플리케이션의 이미지와 관련 컨텍스트를 비전 지원 백엔드로 보내세요. 백엔드가 이미지를 해석하고 GPT-Live가 대화에서 사용할 관련 텍스트를 반환합니다. Live 오디오 프론트엔드는 이미지를 직접 받지 않습니다.
Responses 위임에서 비전 지원 백엔드 모델을 구성하세요. response.item.create로 지원되는 Responses 이미지 입력 항목을 큐에 넣은 뒤 response.create를 보내 실행하거나 재개하세요. 계속하기 전에 모든 필수 보류 함수 결과를 반환하세요. Responses 위임 처리를 참고하세요.
클라이언트 위임에서는 관련 대화·애플리케이션 상태와 함께 시각적 입력을 위임된 요청을 처리하는 백엔드로 보내세요. 클라이언트 결과 흐름으로 간결한 결과를 반환하세요.
백엔드 이미지 입력은 시작 시 Live 프론트엔드에 텍스트 기록을 시딩하는 session.input과 분리하세요. 지원되는 이미지 형식과 모델 제한은 이미지와 비전을 참고하세요.
백엔드 지연 시간 줄이기
백엔드 작업 요청과 대화에 대한 유용한 결과 사이의 시간을 줄이세요. 지연을 찾으려면 각 단계에서 지연 시간을 측정하세요. 같은 시나리오에서 유용한 음성 응답 시간과 작업 성공을 비교하고, 평가 지침은 음성 에이전트 평가 Cookbook을 참고하세요.
Responses 위임
Live가 Responses에 대한 지속 WebSocket 연결을 관리하고 알려진 요청 구성을 미리 준비합니다. 또한 활성 연결과 상태가 지원하면 이전 응답 상태를 재사용할 수 있습니다. 워크로드에서 응답 시간과 보고된 캐시 사용량을 측정해 그 효과를 확인하세요.
delegation.responses를 통해 백엔드를 조정하세요:
model: 음성 모델과 독립적으로 추론과 도구 선택을 처리하는 모델을 선택.reasoning.effort: 그 모델이 지원하는 값으로 추론 시간과 작업 품질의 균형.service_tier: 모델 지원과 프로젝트 접근에 따라auto,default,flex, 또는priority사용.auto는 프로젝트의 구성을 따릅니다. 선택한 티어의 성능과 비용을 평가.
세션 중 지원되는 설정을 session.update로 업데이트하세요. 커스텀 도구는 여전히 애플리케이션에서 실행되므로, Live가 Responses 연결을 관리해도 느린 서비스 호출, 큐, 도구 결과 버퍼링이 답을 지연시킬 수 있습니다. 각 필수 도구 결과를 신속히 반환하고 백엔드 응답을 계속하세요.
클라이언트 위임
애플리케이션이 위임 수신부터 결과 반환까지의 경로를 소유합니다. 음성 세션이 실행되는 동안 그 경로를 준비하세요:
- 백엔드 연결 재사용. API 클라이언트와 연결 풀을 위임 전반에서 살아 있게 유지하세요. 반복 Responses 호출에는 지속 Responses WebSocket을 고려하세요.
- 알려진 구성을 준비. 첫 요청이 필요하기 전에 지침, 도구, 연결을 초기화하세요. Responses WebSocket 모드도 생성 전에 알려진 요청 상태를 워밍업하는 것을 지원합니다. 설정 지침을 따르세요.
- 유용한 결과 스트리밍.
session.commentary.append로 일관되고 검증된 청크를 반환하세요. 조용한 진행 상황에는session.thinking.append를 사용하세요. 클라이언트 위임 ID와 추가당 500토큰 제한을 보존하세요. 프라이빗 추론은 백엔드에 두고, 성공을 발표하기 전에 행동을 확인하세요. - 재사용 가능한 입력을 안정적으로 유지. 지침, 도구 정의·순서, 변경되지 않은 기록 접두어를 보존하세요. 백엔드가 캐싱과 연속을 지원한다면 재사용 가능한 콘텐츠 뒤에 새 정보를 추가하세요.
- 완전하고 유용한 업데이트 전달. 각 결과를 자체적으로 이해할 충분한 텍스트가 있는 즉시 보내세요. 백엔드가 업데이트를 진행 또는 결과로 라벨링해 애플리케이션이 적절한 추가 이벤트를 선택하게 하세요. 텍스트 접두어로 카테고리를 표시한다면 전체 접두어를 기다린 뒤 업데이트를 전달하세요.
이 경로를 Responses 위임과 비교할 때 첫 유용한 음성 답변을 측정하세요.
대본 조각에 반응
애플리케이션에서 대본 조각을 처리하는 것은 선택 사항이며 두 위임 모드에서 작동합니다. 사용자 및 assistant 대본 조각은 WebSocket이나 WebRTC 데이터 채널로 도착합니다. 애플리케이션 로직이나 가벼운 모델로 처리해 위임 이벤트가 도착하기 전에 작업을 시작하거나, 대본 자체를 사용해 애플리케이션 소유 작업을 트리거할 수 있습니다.
이 패턴을 사용해:
- 대기 줄이기. 충분한 정보가 있을 때 추측 조회를 시작하세요. 예를 들어 사용자가 선호도를 계속 설명하는 동안 가용성을 확인.
- 가드레일 실행. 개입이 필요한 요청이나 응답을 커지는 대본에서 검사. 대화 가드레일 적용을 참고.
- 대화 적응. 혼란이나 좌절을 암시하는 표현을 찾고 경험을 조정하거나 집중된 지침을 보내기.
- 인터페이스 업데이트. 관련 컨트롤을 강조하고, 제안 필드를 채우고, 결과가 사용 가능해질 때 보여주기.
브라우저 애플리케이션의 경우 캡션과 로컬 UI 업데이트에 WebRTC 데이터 채널을 사용하세요. 대본 처리가 서버에서 실행될 때(가드레일, 가벼운 모델 검사, 추측 도구 호출) 사이드밴드 WebSocket을 사용해 이벤트를 받고 같은 GPT-Live 세션을 직접 스티어링하세요.
의미 있는 새 정보가 도착하면 누적된 텍스트를 처리하세요. 조각은 불완전할 수 있고, 이후 음성이 요청을 바꿀 수 있습니다. 오래된 결과를 버리고, 중복 행동을 피하기 위해 이후 위임된 작업과 조정하며, 결과적 행동 전에 평소의 권한·확인 검사를 적용하세요.
결과나 지침을 업데이트에 맞는 추가 이벤트로 GPT-Live에 다시 보내세요. 클라이언트 위임 밖에서 시작된 작업에는 delegation_id: null을 사용하세요. 애플리케이션이 UI 변경을 적용하고 도구 실행과 취소를 관리합니다.
공통 최적화
두 위임 모드 모두 같은 백엔드 개선의 이점이 있습니다:
- 작업에 맞는 모델과 추론 effort를 선택. 정확도 요구를 충족하는 구성을 비교하세요. 작업을 안정적으로 완료할 때는 더 낮은 추론 effort를 사용.
- 답변을 간결하게 유지. GPT-Live가 대화를 계속하는 데 필요한 사실과 상태를 반환. 긴 설명과 음성으로 다시 쓰기 위한 추가 모델 호출을 피.
- 도구 지연과 불필요한 호출 줄이기. 입력이 준비되면 승인된 작업을 시작하고, 결과가 유효한 동안 재사용하며, 완료된 조회를 반복하지 않기.
- 독립 작업을 동시에 실행. 독립 조회 호출은 함께 실행 가능. 행동의 의존성과 필수 확인을 존중.
parallel_tool_calls는 모델이 여러 호출을 요청할 수 있게 하며, 애플리케이션은 여전히 커스텀 함수를 스케줄링하고 실행합니다.
일반 Responses 지침은 지연 시간 최적화를, 안정적인 입력 재사용은 프롬프트 캐싱을 참고하세요.
전체 상호작용 검증
백엔드가 의도한 행동을 완료했고 클라이언트가 예상한 음성 결과를 재생했는지 검증하세요. 예를 들어 성공한 예약 후 예약 기록과 재생된 오디오를 모두 확인하세요. 백엔드는 음성 답변이 중단되는 동안 끝날 수 있으므로 이 결과를 별도로 테스트하세요.
각 애플리케이션 행동을 고유 작업 ID로, 각 변경 요청을 작업 revision으로, GPT-Live 위임 ID와 함께 추적하세요. 그 기록으로 재연결이나 재시도 후 완료된 작업을 인식하고, 오래된 요청의 결과를 버리세요.
반복 가능한 테스트에는 음성 에이전트 평가를 사용하세요. 기존 Realtime 도구 루프나 연쇄 백엔드가 있다면 GPT-Live로 마이그레이션을 따르세요.