Vapi/Retell에 비용을 지불하지 마세요: Python으로 직접 AI 음성 에이전트 실행하기
Source: Dev.to
상업적 라이선스 없이 AI 콜링 에이전트 구축하기
Python 개발자라면, 자체 머신에서 500 ms 미만 지연 시간의 음성 에이전트를 실행할 수 있습니다. 이 가이드는 SIP 트렁크를 LLM에 연결하는 오픈소스(Apache 2.0) Python 프레임워크 Siphon을 소개합니다.
사전 요구 사항
- Python 3.10+
- Twilio 또는 Telnyx SIP 트렁크
- LiveKit 인증 정보
- OpenAI API 키
1단계: 설치 및 설정
Siphon 저장소를 클론하고 패키지를 설치합니다:
pip install siphon-ai
프로젝트 루트에 .env 파일을 만들고 제공업체 키를 입력합니다. Siphon은 자체 호스팅이므로 OpenAI와 LiveKit 같은 제공업체에 직접 비용을 지불하며, 중개 수수료가 없습니다.
LIVEKIT_URL=wss://your-project.livekit.cloud
LIVEKIT_API_KEY=your_livekit_key
LIVEKIT_API_SECRET=your_livekit_secret
OPENAI_API_KEY=sk-yourkey
DEEPGRAM_API_KEY=yourkey
FROM_NUMBER=+15551234567
SIP_USERNAME=your_sip_user
SIP_PASSWORD=your_sip_pass
2단계: 에이전트 정의
Siphon은 복잡한 WebRTC 파이프라인과 음성 활동 감지(VAD)를 추상화합니다. Siphon의 플러그인 아키텍처를 사용해 에이전트를 정의합니다:
from siphon.agent import Agent
from siphon.plugins import openai, cartesia, deepgram
# Define the Agent
agent = Agent(
agent_name="Receptionist",
llm=openai.LLM(),
tts=cartesia.TTS(),
stt=deepgram.STT(),
system_instructions="You are a helpful dental receptionist. Help the user book an appointment."
)
3단계: 아웃바운드 콜 트리거
아웃바운드 SIP 시그널링은 간단합니다. 트렁크 ID가 설정되지 않은 경우 SIP 인증 정보를 사용해 콜을 트리거할 수 있으며, Siphon은 필요에 따라 기존 아웃바운드 트렁크를 재사용하거나 새로 생성합니다.
import os
from dotenv import load_dotenv
from siphon.telephony.outbound import Call
load_dotenv()
call = Call(
agent_name="Receptionist",
sip_trunk_setup={
"name": "telnyx-primary",
"sip_address": "sip.telnyx.com",
"sip_number": os.getenv("FROM_NUMBER"),
"sip_username": os.getenv("SIP_USERNAME"),
"sip_password": os.getenv("SIP_PASSWORD"),
},
number_to_call="+15550200",
)
# Execute the asynchronous dial and bridge to the LiveKit WebRTC room
call.start()
4단계: 상태 및 중단 처리
중단(바지인) 처리는 Voice AI에서 가장 어려운 부분 중 하나입니다. Siphon은 LiveKit의 WebRTC 엔진을 활용해 인간의 말이 감지되면 TTS 출력을 즉시 중단시켜, 완전히 자체 인프라에서 호스팅되는 자연스럽고 저지연 대화를 가능하게 합니다.
추가 자료
- GitHub 저장소:
- 문서:
Siphon이 비용 절감에 도움이 된다면 저장소에 ⭐️를 눌러 주세요!