OpenAI Cookbook에서 애플리케이션 관리 방식과 웹훅 관리 방식의 예제를 확인하세요.
실행기 설정 방법과 연결 요구 사항은 자체 호스팅 샌드박스를 참고하세요.
프로비저닝 방식을 선택하세요.
- 애플리케이션 관리 방식: 이 가이드에 따라 애플리케이션에서 샌드박스를 시작하고 중지하세요.
- 웹훅 관리 방식: OpenAI 웹훅을 받으면 샌드박스를 시작하거나 다시 연결하는 핸들러를 배포하세요.
두 방식의 차이는 샌드박스 수명 주기에서 확인하세요.
웹훅 관리 방식
컨트롤러에서 수신한 OpenAI 웹훅을 검증하고 프로비저닝 작업을 큐에 넣으세요. 컨트롤러는 각 세션의 실행기를 구동하는 워커 샌드박스와 분리하세요. 핸들러 배포 및 연결에 따라 엔드포인트와 서명 시크릿을 등록하세요.
environment_connection 요청을 받으면 워커를 시작하거나 다시 연결하고, 세션이 실패하면 워커를 해제하세요. 워커와 컨트롤러의 타임아웃을 명시적으로 설정하세요. 유휴 상태에서 컴퓨팅 리소스를 중지하려면 새로 들어오는 작업과 중지 시점을 조율하는 정책이 필요합니다. 수명 주기 동작을 참고하세요.
애플리케이션 관리 방식
시작하기 전에
OpenAI 프로젝트 API 키, Daytona API 키, Codex CLI 패키지가 필요합니다.
DAYTONA_API_KEY를 설정하고 애플리케이션 요청에는 OPENAI_API_KEY를 사용하세요. OPENAI_EXECUTOR_API_KEY에는 환경 키를 설정하고, 샌드박스에는 이 키만 CODEX_API_KEY로 전달하세요.
1. Daytona 환경 설정하기
자체 호스팅 세션을 만들고 해당 세션의 환경 ID를 저장하세요. Daytona SDK 또는 API를 사용해 지정한 작업 디렉터리를 갖춘 격리된 샌드박스를 만드세요. 샌드박스에 Codex CLI를 설치한 다음, 해당 환경 ID와 환경 키를 사용해 실행기를 시작하세요.
실행기는 OpenAI로 아웃바운드 연결을 열고 장시간 유지합니다. Daytona의 비활성 상태 추적 기능은 이 연결을 감지하지 못합니다. 에이전트가 작업하는 동안 샌드박스가 중지되지 않도록 auto_stop_interval=0으로 설정하세요. 실행이 중단된 뒤에도 컴퓨팅 리소스가 무기한 가동되는 일을 막으려면 샌드박스의 최대 수명도 설정하세요.
샌드박스를 자주 사용한다면 Daytona 스냅샷에 Codex와 ripgrep을 포함해 샌드박스가 더 빨리 연결되도록 하세요.
2. 세션 실행하기
Daytona 실행기가 연결되면 세션 실행 및 이어가기의 HTTP 예제에 따라 입력을 보내고 결과를 스트리밍으로 받으세요. 작업을 마치면 세션을 삭제하고 제공업체의 샌드박스도 별도로 중지하세요.
입력을 보내기 전에 샌드박스를 시작하세요. 턴은 환경이 연결될 때까지 대기합니다. 환경이 연결되면 세션이 이벤트 스트림에 agent.session.environment.connected 이벤트를 보냅니다.
턴이 성공했는지는 agent.session.turn.completed 이벤트로 확인하세요. 턴이 실패하거나 취소된 뒤에도 agent.session.idle 이벤트가 발생할 수 있으므로, 세션이 유휴 상태라는 이유만으로 턴이 성공했다고 판단하지 마세요. 이벤트 발생 직후에 세션을 조회하면 잠시 이전 상태가 반환될 수 있습니다.