Function Calling

자연어와 시스템 코드 사이의 구조화된 다리(Bridge)

OpenAI 공식 개발자 가이드 문서

결국 JSON 규격 똑바로 안 뱉어서 에러 내는 AI 뒤치다꺼리하느라 자바스크립트 파서만 두 바퀴 더 돌린다. 말귀를 못 알아먹어서 아예 규격화된 수갑을 채워놓았더니, 이제 수갑 자체를 뜯어내려고 시도한다.1

1. 개요

펑션 콜링(Function Calling)거대 언어 모델(Large Language Model)에게 외부 도구(API, 데이터베이스 쿼리 등)를 호출할 수 있는 능력을 부여하는 획기적인 기술이다. AI가 사용자의 자유분방한 자연어 입력값을 해석한 뒤, 스스로 판단하여 특정 시스템 내의 함수 목록 중 무엇을, 어떤 인자(Arguments)값으로 호출해야 하는지 판단해 정형화된 JSON 규격으로 뱉어내는 매커니즘을 골자로 한다.

2. 동작 원리: 주도권을 넘겨받은 AI 분석기

과거에는 사용자가 '오늘 서울 날씨 어때?'라고 물으면 AI가 검색 능력이 없어 과거 지식으로 때우거나 에러를 뿜었다. 하지만 펑션 콜링을 장착하면 상황이 달라진다. 개발자가 미리 get_weather(location: string)라는 함수의 존재와 설명을 AI에게 넘겨주면, AI는 입력값을 파싱하여 자동으로 {"name": "get_weather", "arguments": "{\"location\": \"Seoul\"}"}이라는 형태의 정확한 객체를 반환한다.(...) 시스템은 이를 실행한 뒤 결과값을 다시 AI에게 먹여 자연스러운 문장으로 변환시킨다. 즉, 모델을 단순 챗봇이 아닌 하나의 동적 오케스트레이터로 진화시키는 핵심 열쇠이다.

3. 실무에서 터지는 지옥: 가상 함수 난발과 스키마 이탈

이론은 아름답지만, 실무 전선은 언제나 그렇듯 피비린내가 진동한다. AI의 고질병인 할루시네이션이 여기서도 기어코 기어 나와, 목록에 없는 destroy_database() 같은 해괴망측한 가짜 함수명을 스스로 지어내 호출하거나, 필수 파라미터인 user_id를 누락시키는 트롤링이 쉴 새 없이 터진다.2 이를 잡겠다고 엄격한 JSON Schema 유효성 검사 코드를 도배하다 보면, 이게 과연 자율형 AI를 쓰는 건지 아니면 하드코딩된 정규표현식 노가다를 하는 건지 회의감이 찾아오는 것은 덤이다.(...)

4. 관련 밈 및 드립

4.1. JSON 감옥 (JSON Jail)

AI가 구조화된 답변 대신 멋대로 수다를 떨거나 잡담을 섞어 출력하지 못하도록 오직 엄격한 JSON 객체만 뱉어내도록 구조적으로 가둬두는 형태를 의미한다. 가끔 이 감옥을 탈출하려 '물론이죠! 아래는 요청하신 JSON입니다'라는 사족을 붙여 자바스크립트 파서를 폭파시키는 AI의 기행에서 비롯됐다.

4.2. 인간 디버깅 루프

AI가 펑션 콜 파라미터를 잘못 채울 것을 대비해, 개발자가 API 호출 전에 수동으로 컨펌 버튼을 클릭해야만 하는 비극을 뜻한다. 인공지능이 자동화해 주는 영역을 인간이 한 땀 한 땀 검수해 주는 모순적 상황을 꼬집었다.

5. 여담

  • 보안상의 핵폭탄: 만약 AI에게 SQL 쿼리를 직접 빌드해 실행하는 권한을 펑션 콜링으로 주면, 사용자가 교묘한 프롬프트로 해킹을 시도할 때(Prompt Injection) 고스란히 데이터베이스 전체가 날아가는 파멸적인 취약점을 낳는다.
  • 멀티 펑션 콜링: 최신 모델들은 한 번의 질문에 여러 개의 함수를 순차적 혹은 병렬로 처리하여 결과를 도출해 내는 신기를 보여주기도 하지만, 그만큼 API 비용도 기하급수적으로 늘어난다.
  • 오픈소스 진영의 몸부림: 초기에는 OpenAI 전유물 같았으나, 현재는 Llama 등 다양한 오픈소스 모델들이 펑션 콜링용 파인 튜닝을 거쳐 저렴하고 준수한 성능을 자랑한다.

6. 관련 문서

각주

  1. AI가 인자값을 맘대로 가공하거나 다른 문자열로 치환해 버리는 통제 불능 상태가 하루에도 수십 번씩 터진다.

  2. 이 때문에 상용 서비스 빌드 시에는 펑션 콜링 실패 시 재시도(Retry)하는 로직을 최소 3단계 이상 쌓아 올리는 눈물겨운 똥꼬쇼가 필수로 수반된다.