문제점
밤에 차가 고장 났습니다. 이동식 기계공을 찾아다니며 한 명씩 전화를 겁니다: 누가 영업 중인지, 누가 문을 닫았는지, 누가 과도하게 청구하지 않을지? 바로 그때 시간이 가장 중요합니다.
우리가 구축한 것
Trojan Horse (“Engine cooked? Help booked.”)는 Kane CLI Hack Day SF에서 하루 만에 구축한 다중 에이전트 앱입니다:
- Discovery Agent는 OpenAI 웹 검색을 사용하여 근처의 이동식 기계공 명단을 추립니다.
- Caller Agent는 Vonage/Twilio를 사용한 OpenAI Realtime을 이용해 최대 3통의 전화를 동시에 걸고, 가용성, 도착 시간 및 가격에 대해 문의하며, 녹취록을 화면으로 스트리밍합니다.
- 견적은 가격별로 순위가 매겨지며, 사용자(당신)가 하나를 선택합니다.
- Callback Agent가 작업을 확정합니다. 기계공이 명시적으로 '예'라고 말할 때만 예약됩니다.
스택: React 대시보드, SQLite를 사용한 Node 오케스트레이터, 별도의 Discovery 및 Voice 서비스, 그리고 공유되는 zod 계약(contracts)으로 구성되어 있습니다.
우리가 자체 AI를 신뢰하지 않은 이유
음성 에이전트는 가격을 쉽게 지어내거나(
케인이 포착한 내용(What Kane caught)
우리는 하나의 규칙을 추가했습니다. 기계공이 시간이 되는지 여부를 말하지 않을 경우 “알 수 없음(Unknown)”으로 표시하는 것입니다. 케인(Kane)이 테스트를 설계했고, 이 테스트는 실패했습니다. 기계공이 “지금 누가 가능한지는 잘 모르겠어요”라고 말하자, 저희 앱은 “현재 이용 가능: 아니요(No)”를 보여주었습니다. 우리의 공유 계약(shared contract)은 가용성(availability)을 참 또는 거짓으로 저장했기 때문에, 시뮬레이션된 음성 경로와 실제 음성 경로 모두 “불확실함(unsure)”을 “이용 불가(unavailable)”로 처리했습니다. 실제로 운전하는 사람은 오해를 받았을 것입니다. 우리는 해당 필드를 Nullable(널 허용)하게 변경하고 UI를 수정했고, 같은 테스트가 통과되었습니다. 두 가지 증거 팩은 레포지토리(repo)에 있습니다.
코드: https://github.com/RamyaRamachandran-driod/emergency-caller
#KaneCLIHackDay