시스템 도구

외부 요청 없이 대화의 내부 상태를 업데이트하세요.

시스템 도구를 사용하면 어시스턴트가 대화의 내부 상태를 업데이트할 수 있습니다. 웹훅 도구 또는 클라이언트 도구와 달리, 시스템 도구는 외부 API 호출이나 클라이언트 측 함수를 트리거하지 않습니다. 외부 호출 없이 대화의 내부 상태를 수정합니다.

개요

일부 애플리케이션에서는 에이전트가 대화의 흐름이나 상태를 제어해야 합니다. 시스템 도구는 외부 서버나 클라이언트와 통신할 필요 없이 어시스턴트가 통화 상태와 관련된 작업을 수행하도록 하여 이 기능을 제공합니다.

사용 가능한 시스템 도구

구현

API를 통해 에이전트를 생성할 때 에이전트 구성에 시스템 도구를 추가할 수 있습니다. 통화 종료 및 언어 감지 도구를 구현하는 방법은 다음과 같습니다.

맞춤 LLM 통합

ElevenLabs 에이전트와 함께 맞춤 LLM을 사용할 경우, 시스템 도구는 LLM이 호출할 수 있는 함수 정의로 노출됩니다. 각 시스템 도구에는 특정 매개변수와 트리거 조건이 있습니다.

사용 가능한 시스템 도구

목적: 적절한 조건이 충족되면 대화를 자동으로 종료합니다.

실행 조건: 다음 경우 LLM이 이 도구를 호출해야 합니다.

  • 주요 작업이 완료되었고 사용자가 만족한 경우
  • 상호 합의하에 대화가 자연스럽게 마무리된 경우
  • 사용자가 대화를 종료하고 싶다고 명시적으로 밝힌 경우

매개변수:

  • reason (문자열, 필수): 통화를 종료하는 이유
  • message (문자열, 선택): 통화 종료 전에 사용자에게 전송할 작별 메시지

함수 호출 형식:

{
"type": "function",
"function": {
"name": "end_call",
"arguments": "{\"reason\": \"Task completed successfully\", \"message\": \"Thank you for using our service. Have a great day!\"}"
}
}

구현: 에이전트 설정에서 시스템 도구로 구성하세요. LLM은 이 함수를 호출해야 하는 시점에 관한 자세한 지침을 받습니다.

자세히 알아보기: 통화 종료 도구

목적: 대화 중 사용자가 감지된 언어로 자동 전환합니다.

트리거 조건: 다음 경우 LLM이 이 도구를 호출해야 합니다.

  • 사용자가 현재 대화 언어와 다른 언어로 말할 때
  • 사용자가 명시적으로 언어 전환을 요청할 때
  • 대화에 다국어 지원이 필요할 때

매개변수:

  • reason (string, 필수): 언어 전환 이유
  • language (string, 필수): 전환할 언어 코드(지원 언어 목록에 있어야 함)

함수 호출 형식:

{
"type": "function",
"function": {
"name": "language_detection",
"arguments": "{\"reason\": \"User requested Spanish\", \"language\": \"es\"}"
}
}

구현: 에이전트 설정에서 지원 언어를 구성하고 언어 감지 시스템 도구를 추가하세요. 에이전트는 감지된 언어에 맞춰 음성과 응답을 자동으로 전환합니다.

자세히 알아보기: 언어 감지 도구

목적: 사용자 요구에 따라 전문 AI 에이전트 간에 대화를 전환합니다.

트리거 조건: 다음과 같은 경우 LLM이 이 도구를 호출해야 합니다.

  • 사용자 요청에 전문 지식 또는 다른 에이전트 기능이 필요할 때
  • 현재 에이전트가 쿼리를 적절히 처리할 수 없을 때
  • 대화 흐름상 다른 유형의 에이전트가 필요할 때

파라미터:

  • reason (string, 선택 사항): 에이전트 전환 사유
  • agent_number (integer, 필수): 전환할 에이전트의 0부터 시작하는 번호(구성된 전환 규칙 기준)

함수 호출 형식:

{
"type": "function",
"function": {
"name": "transfer_to_agent",
"arguments": "{\"reason\": \"User needs billing support\", \"agent_number\": 0}"
}
}

구현: 조건을 특정 에이전트 ID에 매핑하는 전환 규칙을 정의하세요. 현재 에이전트가 전환할 수 있는 에이전트를 구성하세요. 에이전트는 전환 구성에서 0부터 시작하는 번호로 참조됩니다.

자세히 알아보기: 에이전트 전환 도구

목적: AI 지원만으로 부족할 때 대화를 상담원에게 원활하게 연결합니다.

실행 조건: 다음 경우 LLM이 이 도구를 호출해야 합니다.

  • 사람의 판단이 필요한 복잡한 문제인 경우
  • 사용자가 상담원 지원을 명시적으로 요청한 경우
  • 특정 요청에 대해 AI의 역량 한계에 도달한 경우
  • 에스컬레이션 프로토콜이 실행된 경우

매개변수:

  • reason (문자열, 선택): 연결을 전환하는 이유
  • transfer_number (문자열, 필수): 연결을 전환할 전화번호(구성된 번호와 일치해야 함)
  • client_message (문자열, 필수): 연결을 기다리는 동안 고객에게 읽어줄 메시지
  • agent_message (문자열, 필수): 통화를 받는 상담원에게 전달할 메시지

함수 호출 형식:

{
"type": "function",
"function": {
"name": "transfer_to_number",
"arguments": "{\"reason\": \"Complex billing issue\", \"transfer_number\": \"+15551234567\", \"client_message\": \"I'm transferring you to a billing specialist who can help with your account.\", \"agent_message\": \"Customer has a complex billing dispute about order #12345 from last month.\"}"
}
}

구현: 연결 전환 전화번호와 조건을 구성하세요. 고객과 통화를 받는 상담원 모두에게 전달할 메시지를 정의하세요. Twilio와 SIP 트렁킹을 모두 지원합니다.

자세히 알아보기: 번호로 연결 도구

목적: 에이전트가 말하지 않고 일시 정지하여 사용자 입력을 기다리도록 합니다.

트리거 조건: 다음 경우 LLM이 이 도구를 호출해야 합니다.

  • 사용자가 잠시 시간이 필요하다고 말할 때(“잠깐만요”, “생각 좀 해볼게요”)
  • 사용자가 대화 흐름의 일시 정지를 요청할 때
  • 에이전트가 사용자가 정보를 처리할 시간이 필요하다고 감지할 때

매개변수:

  • reason(문자열, 선택 사항): 일시 정지가 필요한 이유를 설명하는 자유 형식의 사유

함수 호출 형식:

{
"type": "function",
"function": {
"name": "skip_turn",
"arguments": "{\"reason\": \"User requested time to think\"}"
}
}

구현: 추가 구성은 필요하지 않습니다. 이 도구는 사용자가 다시 말할 때까지 에이전트가 조용히 있도록 신호를 보냅니다.

자세히 알아보기: 턴 건너뛰기 도구

매개변수:

  • reason (string, 선택 사항): DTMF 톤을 재생하는 이유(예: “내선 번호로 이동”, “PIN 입력”)
  • dtmf_tones (string, 필수): 재생할 DTMF 시퀀스입니다. 유효한 문자: 0-9, *, #, w(0.5초 일시 정지), W(1초 일시 정지)

함수 호출 형식:

{
"type": "function",
"function": {
"name": "play_keypad_touch_tone",
"arguments": "{"reason": "Navigating to customer service", "dtmf_tones": "2"}"
}
}

자세히 알아보기: 키패드 터치 톤 재생 도구

파라미터:

  • reason (문자열, 필수): 음성사서함 감지 사유(예: “자동 안내 감지됨”, “사람의 응답 없음”)

함수 호출 형식:

{
"type": "function",
"function": {
"name": "voicemail_detection",
"arguments": "{\"reason\": \"Automated greeting detected with request to leave message\"}"
}
}

자세히 알아보기: 음성사서함 감지 도구

목적: 외부 API를 호출하지 않고 대화를 기반으로 에이전트가 하나 이상의 동적 변수를 업데이트할 수 있도록 합니다.

트리거 조건: 다음과 같은 경우 LLM이 이 도구를 호출해야 합니다.

  • 대화에서 기록해야 할 정보가 제공된 경우(예: 에스컬레이션 플래그, 선택한 옵션, 사용자가 제공한 값)
  • 구성된 상태 업데이트가 LLM이 대화에서 판단하거나 추출해야 하는 값에 따라 달라지는 경우

파라미터:

함수의 파라미터는 도구 구성 방식에 따라 달라집니다. LLM이 추출한 값을 사용하는 구성된 각 상태 업데이트는 해당 업데이트의 동적 변수 이름을 따르고 string, number 또는 boolean 유형인 속성 하나를 스키마에 추가합니다. 상수나 다른 동적 변수만으로 구성된 상태 업데이트는 파라미터를 추가하지 않습니다.

함수 호출 형식:

{
"type": "function",
"function": {
"name": "update_state",
"arguments": "{\"should_escalate\": true}"
}
}

구현: 에이전트는 추출된 파라미터와 대화의 현재 동적 변수를 사용해 구성된 모든 표현식을 평가한 다음, 결과를 해당 동적 변수에 할당합니다. 외부 요청은 수행하지 않습니다.

자세히 알아보기: 상태 업데이트 도구

from elevenlabs import AgentConfig, ConversationalConfig, ElevenLabs
elevenlabs = ElevenLabs(api_key="YOUR_API_KEY")
# Each system tool is keyed by name under built_in_tools.
# Leave "description" blank to use the default, tool-specific prompt.
response = elevenlabs.conversational_ai.agents.create(
conversation_config=ConversationalConfig(
agent=AgentConfig(
prompt={
"built_in_tools": {
"end_call": {
"type": "system",
"name": "end_call",
"description": "",
"params": {"system_tool_type": "end_call"},
},
"language_detection": {
"type": "system",
"name": "language_detection",
"description": "",
"params": {"system_tool_type": "language_detection"},
},
}
},
),
),
)

FAQ

예. 동일한 어시스턴트에서 시스템 도구를 웹훅 도구 및 클라이언트 도구와 함께 사용할 수 있습니다. 이를 통해 내부 상태 관리와 외부 상호작용을 결합한 포괄적인 기능을 구현할 수 있습니다.