정의
도구 호출은 LLM이 말로 답하는 대신 주문 조회 같은 이름 붙은 함수를 실행해 달라는 구조화된 요청을 돌려주는 것입니다. 애플리케이션이 이를 실행해 결과를 돌려주면 모델은 답변을 이어 갈 수 있습니다.
도구 호출의 작동 방식
LLM은 스스로 아무것도 실행하지 않습니다. 개발자가 각 도구를 이름, 쉬운 말로 쓴 설명, 매개변수 스키마와 함께 모델에 설명합니다. 대화 중에 모델은 도구 이름을 밝히고 매개변수를 채운 도구 요청으로 응답할 수 있습니다. 예를 들어 주문 번호를 넣은 get_order_status입니다. 애플리케이션은 요청을 확인하고 함수를 실행해 결과를 새 메시지로 돌려줍니다. 모델은 그 결과를 읽고 음성으로 전할 답변을 씁니다.
Cartesia 문서에서는 각 도구의 설명이 모델에게 언제 쓸지를 안내합니다. 매개변수 값은 모델 자체, 고정된 상수, 또는 발신자의 전화번호 같은 동적 변수라는 세 곳에서 올 수 있습니다. Managed Agents에는 end_call, send_dtmf, transfer_to_number, voicemail_detection 같은 내장 시스템 도구와, 자체 웹훅 엔드포인트를 호출하는 사용자 지정 도구가 있습니다.
이 설계에서 세 가지 결과가 따라옵니다. 모델은 설명을 보고 도구를 고르므로 모호한 설명은 잘못된 호출이나 누락된 호출을 낳습니다. 모델이 매개변수를 제공하므로 모델이 지어낸 값은 받는 코드가 검증해야 합니다. 그리고 호출은 왕복이므로 결과가 돌아올 때까지 모델의 답변은 멈춰 있습니다.
음성 에이전트에게 중요한 이유
도구 호출은 에이전트가 말하기만 하는 대신 예약을 잡거나 통화를 전환하는 일을 하게 해 줍니다. 대기가 길어지는 곳이기도 합니다. 도구의 응답 시간은 음성 지연에 들어가며, 3초가 걸리는 조회는 전화 회선에서 3초의 정적입니다.
그래서 음성 에이전트는 도구 호출을 채팅과 다르게 처리합니다. 느린 작업 전에 “확인해 보겠습니다” 같은 짧은 말을 합니다. Cartesia의 시스템 도구에는 이를 위한 pre_tool_speech 설정이 있으며 값은 auto, force, off입니다. 실패에 대한 계획도 필요합니다. 도구가 제한 시간을 넘기거나 오류를 반환하면 에이전트는 그렇게 말하고 다음 단계를 제안해야 하며, 답을 지어내서는 절대 안 됩니다. 환각을 참고하세요.
도구에는 위험도 따릅니다. 예약을 취소하거나 돈을 옮기는 도구는 복창과 발신자의 확인, 받는 시스템의 권한처럼 모델의 판단에 의존하지 않는 점검 뒤에 두어야 합니다. 발신자의 말이 모델이 어떤 도구를 호출하는지에 영향을 줄 수 있으므로, 무엇이 허용되는지는 프롬프트가 아니라 도구가 강제해야 합니다.
예시
설명용 통화입니다.
- 발신자: “제 주문이 어디 있나요? 5521입니다.”
- 에이전트: “확인해 보겠습니다.” (모델이 주문 번호 5521로
get_order_status를 요청) - 도구 결과: 화요일 발송, 금요일 도착 예정
- 에이전트: “화요일에 발송되었고 금요일에 도착할 예정입니다.”