함수 호출 및 툴 스키마
Source: Dev.to
개요
이 학습 세션에서는 함수 호출 및 도구 스키마—에이전트가 외부 도구와 어떻게 상호작용하는지—를 탐구합니다. 대화는 사용자와 AI 어시스턴트인 Klover 사이의 오고‑받기를 포착하며, 오해, 수정, 그리고 더 깊은 통찰을 강조합니다.
도구 스키마 정의
도구 스키마는 사용 가능한 도구를 나열하는 것 이상으로, 각 도구를 호출하는 방법을 정의합니다. 이는 코드의 함수 시그니처와 유사합니다.
- Name – 모델이 사용하는 식별자.
- Description – LLM을 위한 자연어 설명.
- Parameters – 필수/선택 플래그가 있는 타입이 지정된 필드.
날씨 도구에 대한 예시 스키마:
name: get_weather
description: "Get current weather for a location"
parameters:
location:
type: string
required: true
description: City name
units:
type: string
required: false
description: '"celsius" or "fahrenheit"'
스키마가 위치하는 곳
스키마는 모델의 학습 데이터에 포함되지 않습니다. 런타임에 주입되며, 일반적으로 다음 방법으로 제공됩니다:
- 시스템 프롬프트, 혹은
- 요청 페이로드의 전용 “tools” 섹션.
모델은 학습 과정에서 스키마 형식을 익히므로, 한 번도 본 적 없는 커스텀 도구와도 작업할 수 있습니다.
전체 라운드‑트립 (LLM ↔ 도구)
- Thought – 모델이 도구가 필요하다고 판단합니다.
- Action – 도구 호출의 구조화된 JSON 표현을 출력합니다.
- Observation – 오케스트레이터가 도구를 실행하고 결과를 캡처해 모델에 다시 전달합니다.
- Thought – 모델이 관찰을 통합하고 계속 진행합니다.
예시 도구 호출 출력
{
"tool": "get_weather",
"parameters": {
"location": "Singapore",
"units": "celsius"
}
}
LLM은 직접 호출을 실행하지 않으며, JSON을 내보낸 뒤 멈춥니다. 애플리케이션(오케스트레이터)은 다음을 수행합니다:
- JSON을 파싱한다.
- 실제 API를 호출한다.
- API 응답을 관찰로 반환한다.
- LLM이 다음 생각을 생성하도록 허용한다.
오케스트레이터의 역할
오케스트레이터는 LLM과 외부 도구 사이에 위치하여 필수적인 보호 장치를 제공합니다:
- Validate – 실행 전에 매개변수를 검증한다.
- Rate limit – 무한 루프를 방지한다.
- Filter – 상황이나 권한에 따라 허용되지 않은 도구를 차단한다.
- Log – 디버깅 및 감사용으로 모든 호출을 기록한다.
- Sanitize – 도구 출력을 다시 모델에 전달하기 전에 정제한다.
이 레이어가 없으면 악의적인 프롬프트가 모델을 위험한 행동(예: delete_database)으로 유도할 수 있습니다.
잘 작성된 스키마의 중요성
형편없는 스키마는 신뢰성을 떨어뜨립니다:
| 문제 | 결과 |
|---|---|
| 모호한 설명 | 모델이 잘못된 도구를 선택하거나 적절한 도구를 건너뛴다. |
| 잘못된 타입 / 누락된 필수 항목 | 형식이 틀린 요청, 충돌, 혹은 쓰레기 출력이 발생한다. |
| 파라미터 세부 정보 누락 | 모델이 의미를 추측하게 되어 예측 불가능한 호출이 이루어진다. |
도구 스키마 설계는 본질적으로 도구를 위한 프롬프트 엔지니어링입니다. 명확한 이름, 정확한 설명, 올바른 타입 지정이 신뢰할 수 있는 에이전트를 만들기 위한 핵심 요소입니다.
세션 세부 정보
- Date: February 8, 2026
- Status: Exposure
- Notes: 사용자는 직관적으로 개념을 ReAct 루프와 연결했으며, 좋은 직감을 보여주었습니다. 내일 검토가 예정되어 있습니다.