
영상 링크: Building voice agents with OpenAI — Dominik Kundel, OpenAI
채널명: AI Engineer
OpenAI로 음성 에이전트 구축하기 — 도미닉 쿤델(OpenAI) 핵심 요약
- 이 영상은 OpenAI 개발자 경험 팀의 도미닉 쿤델이 OpenAI의 TypeScript 기반 Agents SDK 신기능을 중심으로 음성 에이전트(voice agents) 개발 전 과정을 심층적으로 시연 및 설명함
- Agents SDK란 OpenAI 내부 모범 사례에 기반한 추상화 프레임워크로, 에이전트의 라이프사이클 관리, 툴 호출, 가드레일(안전 보장), 스트리밍 입력/출력, 인간 개입(human-in-the-loop), 트레이싱(추적/디버깅) 등 다양한 핵심 기능을 품고 있음
- 새롭게 출시된 TypeScript SDK는 기존 Python SDK 기능 외에 음성 에이전트 전용 기능(실시간 스트리밍, 중단 처리, WebRTC/WebSocket 지원, 인간 개입 후 재개 가능, 브라우저 실행)까지 지원함
- 영상은 음성 에이전트에 적합한 아키텍처(음성→텍스트→음성 체인 vs 직접 음성 이해·처리), 각각의 장단점·실제 구현 문제(지연, 맥락 상실, 턴 감지 등), 그리고 도구·에이전트 위임(Delegation) 구조를 도식·데모로 상세히 풀어냄
- 실시간 대시보드, Traces API를 통한 에이전트 행위 추적 및 대화 오디오·텍스트 리플레이, 툴 콜 호출과 결과 확인 등 디버깅·품질관리 방법을 구체적으로 시연함
- 현장 코딩 세션을 통해 텍스트 기반 에이전트 구축→음성 실시간 에이전트 전환, 도구(툴) 통합, 인터럽트·가드레일 추가, 히스토리 표시, 사용자 승인 흐름, 핸드오버까지 전 과정을 코드 예제로 직접 안내함
- 중간중간 청중 Q&A로 맞춤형 API 상세 기능, 브라우저-서버 분리, 비용 구조, 다국어 및 저숙련 대응, 메모리·컨텍스트 관리, 사용자 피드백 적용 등 실전 밀착형 팁을 풍부하게 공유함
- 오디오 톤/감정/개성 프롬프트, 사용자 맞춤 대화 상태 설계, 실제 사용자 사례(레모네이드(Lemonade) 대시보드, 커스텀 GPT 스크립트 생성 등)도 다룸
- 마지막으로 guard rails(출력 정책 관리), 인터럽션, agent handoff(역할별 전환), 고급 디버깅, 멀티 에이전트 위임, 대화 로그·토큰 관리 등 실전 적용의 모든 핵심 요소를 포괄적으로 다룬다
세부 요약 - 주제별 정리
모든 참석자가 이해할 수 있도록 ‘에이전트’ 개념을 구체적으로 정의함
- 에이전트란 사용자를 대신해 자율적으로 특정 태스크를 수행하는 시스템
- 오픈AI 에이전트 개념은 (1) 명세된 지침(instructions)을 가진 모델, (2) 다양한 외부 도구(tool) 호출 능력, (3) 전체 라이프사이클을 관리하는 런타임이 결합됨
- 오늘 발표 중심 주제이자 데모는 TypeScript용 OpenAI Agents SDK (Python용 SDK와 기능상 유사, 신규 타겟 환경 지원)
- SDK는 handoffs(에이전트 간 전환), 가드레일(정책 준수), 스트리밍, MCP/트레이싱, 인간 개입, 네이티브 음성 에이전트 지원 등 다양한 기능 집합 제공
TypeScript용 Agents SDK 출시 의미와 기존 Python SDK 대비 핵심 추가 기능 소개
- 기존 Python용 SDK와 동일한 추상화와 Pattern이 TypeScript에서도 적용됨
- Typescript SDK에서 새로 지원되는 기능:
- 실시간 음성 에이전트(voice agent) 빌드 및 native support
- 사람 심사(approval)·보류·재시작(human-in-the-loop with resumability)
- 네이티브 인터럽트 지원 (중간중단 처리)
- WebRTC 및 websocket 통한 브라우저·서버 연계(예: Twilio 통화용 보이스봇, 웹 기반 음성 UI)
- 실제 코드, 실습 시작 전 미리 의존성 설치 및 코드 저장소 안내
음성 에이전트 도입 이유와 기존 텍스트 에이전트 방식과의 본질적 차이 설명
- 음성은 텍스트 대비 정보 밀도, 감정 표현 등 훨씬 풍부하며, 접근성과 사용자 경험 측면에서 강한 장점
- ‘텍스트 베이스→음성 래핑(음성→텍스트 거쳐 LLM, 결과는 텍스트→음성)’ 구조는 구현이 쉽고 기존 오픈AI 생태계 활용에 최적
- 직접 음성→음성 모델(직접 오디오 입력→처리) 사용시 대화 자연스러움, 지연시간(저하), 맥락(음성적 감정 등) 이해 수준이 높아짐
- 기존 텍스트 기반 도구와 자산의 재사용·복잡한 결정 논리 처리는 직접 오디오 모델에선 어렵다는 난점도 명확히 지적
음성 에이전트 아키텍처: 체인 방식(chained)과 직접 음성 모델 방식별 장단점 구체 분석
- 체인(chained): 사용성 유연, 디버깅 용이, 모델 선택의 자유, 텍스트 기반 asset 활용 및 세밀한 입출력 분석 용이
- 단점: 턴 감지 어려움, 레이턴시 누적, 오디오 기반 맥락 손실 등
- 직접 음성→음성(speech-to-speech): 턴 감지·지연 최소화, 감정·톤 등 자연스러운 상호작용
- 단점: 기존 도구/에셋 재사용 어려움, 복잡한 결정(추론) 대화엔 한계
- 위임(Delegation): 음성 프론트라인(Front Agent)이 도구 호출로 주요 판단·추론 기능(예: 04 mini, 03) 백엔드로 위임해 현실적 조합 가능
실제 데모: 실시간 음성 에이전트 구현, 도구(tool)·백엔드 위임 및 디버깅 과정 시연
- OpenAI SDK로 날씨 확인·반품 처리·인터럽션 등 실제 실시간 음성 상호작용 코드와 데이터 흐름 시연
- 에이전트는 “Front agent”와 “Backend agent” 분리, tool call로 실제 추론 및 결과 가져옴
- Traces UI/대시보드 통해 오디오 이력, tool 호출 내역, 전체 context 추적 및 재생산 가능함
- 도중 인터럽트 감지 및 이전 대화 컨텍스트 실시간 관리 가능
- 대규모 서비스(예: Lemonade)는 자체 커스텀 트레이스 대시보드로 전체 흐름 및 품질 체크
- 완성 코드 모두 단계별 슬랙/깃헙에 공유
실시간 에이전트 개발 Best Practice: 명확한 범위 설정, 그라운드 트루스 확보, 사람 승인 등 강조
- ① 첫 번째 문제는 단순하고 명확하게 정의, 최소 툴·목표로 시작해 성과 측정 및 확장성 확보
- ② 평가 데이터셋(Eval)과 가드레일(정책 위반 방지)은 개발 초기에 구축, 트레이스/대시보드 적극 활용
- ③ 감정/톤/말투 등 LLM 스타일 프롬프트·시나리오(descriptive system prompt, role JSON 구조 등)로 자연스러움, 목적성 강화
- openai.fm에서 다양한 목소리·개성을 가진 프롬프트 예제 확인 가능
- 커스텀 GPT나 슬랙 자료 등 개발 지원 자료 풍부
Step by Step 코드 튜토리얼: 텍스트→음성 실시간 에이전트로의 전환 과정 상세 안내
- index.ts에서 기본 에이전트 정의: 이름·설명·실행(run), 기본 프롬프트
- 도구(tool)정의: zod로 스키마 지정 후, TypeScript 타입 안정성·파라미터 검증
- 실시간 브라우저 에이전트로 이식: Nex.js 프론트+백엔드 구조, 클라이언트엔 임시 API 키 회수 방식 적용(보안)
- 실시간 음성→대화→음성 UI 연동: 마이크/스피커 기본 처리 내장, history 관리, 인터럽트·톨콜 동작까지 코드 예시 및 실행
중요 고급 기능 및 실전 노하우: 대화 히스토리·메모리 관리, 비용 계산, 인터럽트 및 외부 시스템 연계
- 실시간 에이전트 컨텍스트·히스토리는 메모리(in-memory)에 저장, 트레이스/에이전트API 통해 외부 저장·관리 가능
- 음성 대화의 이전 맥락(메모리)은 실시간 API가 소스 오브 트루스 보유, 사용 시 토큰 이용량 실시간 노출
- 음성 데이터 포맷(PMC16 등) 변경, 여러 오디오 코덱 변환, 다중툴 병렬 호출 등 세부 연동 가능
- 중간중단(interrupt), 히스토리 업데이트, 도구 승인 요청(human-in-the-loop approval) 등도 예제 코드로 구체적 설명
- 브라우저/서버 위치에 따라 파일 읽기, 툴 호출 가능 범위 달라짐(서버 쪽에선 시스템 파일 접근 등 다양한 기능 가능)
핸드오버, 에이전트 전환, 음성·말투·속도 조절 등 고급 시나리오 시연
- 핸드오버(handoff): 특정 잘 정의된 태스크에대해 다른 에이전트로 전환, 예> 날씨 전용 agent
- 핸드오버시 각 agent의 도구/지침/목소리(voice model)/역할은 독립적으로 재설정
- 목소리 모델은 세션 중 변경 불가, 액센트·말투·톤은 프롬프트로 제어 가능
- 속도(speed) 등 일부 세부 파라미터는 session config 갱신으로 실험 가능(런칭일에 공개된 기능)
- 노이즈 환경 등 음성 품질 자동 적응 가능성 안내 및 API 제한 확인 방법 설명
멀티에이전트 위임 및 복잡한 추론 기능 현실적 구현법 안내
- 복수 에이전트에의 동시 위임은 툴콜 방식 병렬화 또는 하나의 툴이 여러 agent를 호출하는 설계로 구현 권장
- 서버/프론트엔드 양쪽 SDK 활용법, 각 역할별 agent 분리·결합 등 바람직한 설계 패턴 제안
- 도구 호출 시 async 처리, tool call의 상태 체크 등 비동기 작업 효율적 관리법 소개
Guard rails(가드레일) 및 정책위반 처리, 트랜스크립트·음성 모델 내역 상세 설명
- Guard rail: 입력/출력 조건을 병렬로 체크하는 정책 모듈, 텍스트 기반·실시간 모두 지원
- 정책 위반시 자동 인터럽트, 가이드 메시지 지원, 예시(특정 단어 등장시 차단) 코드 시연
- Whisper(March’24 기준 두 가지 모델: GPT-4 mini transcribe, GPT-4 transcribe) 등 트랜스크립트 모델 선택 가능
- 오픈AI 음성·텍스트 AoI 모델 현황, 향후 로드맵, 커스텀 목소리 제공 계획은 신중 검토 중(안전 이슈)
Q&A 통한 실전 개발자 질문(사용자 평가, 테스트, wake word, 가격 정책 등) 답변
- 평가, EVAL 데이터셋 구축법·기존 텍스트 변환 vs 음성 직접 기록방식 활용법 안내
- 커스텀 프롬프트·테스트 툴(예: promptful, 인간 리뷰 등) 통한 초기 품질 확보
- Wake word(웨이크워드) 내장 미지원, 개발자 자체 VAD 모델 연동·저비용 음성 감지 방법 안내
- 구조외 API 이벤트 관리, 다국어/저숙련 사용자 대응 팁, 세부 요금제 구조 및 콘피그/용도별 세션 관리 방법 소개
감정·톤·자연스러운 대화·속도 등 실제 ‘사람 같은 음성’ 붙이기 기법 심화 시연
- openai.fm에서 실제 “지루한 10대 보이스” 등 감정·개성 프롬프트 효과 청취
- 프롬프트/역할 지시어로 pause(쉼), 음성 피드백, 적절한 리액션, 자연스러운 턴 감지 등 구현 사례
- 다화자·다국어 인식, 화자분리 등(현 단계 지원 안함), 커스텀 목소리 추가(향후 안전성 기반 도입 예정)
- 음성 출력과 관련된 이벤트, API 옵션 및 정책 상세 설명(파일 읽기, 시스템 내장 함수, 브라우저 환경 한계 등)
자료/리소스 안내 및 실전 최적화 요령 마무리
- 발표 슬라이드, 코드 저장소, openai.fm 등 실습 및 학습자료 슬랙/SNS에 공유
- 실제 대규모 사용시 시스템 디자인·역할 분리·한계·정책 준수 등 ‘프론트엔드-백엔드’ 전략적 개발 권고
- 각종 개발 문의·버그·고급질문은 슬랙 실시간 지원, API 레퍼런스와 신제품 개선 상황도 지속 공유 예정