Digest: UC Berkeley Gorilla 팀이 개발한 LLM 함수 호출(function calling) 능력 종합 평가 벤치마크. 2,000+ 테스트 케이스에서 모델이 올바른 함수 이름·인자·타입을 생성하는지 AST(Abstract Syntax Tree) 매칭으로 정밀 평가한다. 단순 호출부터 병렬·다중 선택·관련성 판단까지 9개 카테고리를 포괄하며, Python/Java/JavaScript/REST 등 다언어 API 환경을 반영한다. 핵심 통찰: JSON 모드만으로는 불충분하며, 다중 함수 선택, 병렬 호출(parallel calls), 관련성 거부(relevance detection) 시나리오에서 모델 간 큰 격차가 드러난다.
메타데이터
항목
내용
제목
Berkeley Function Calling Leaderboard (BFCL)
관련 논문
Gorilla: Large Language Model Connected with Massive APIs (arXiv: 2305.15334)
저자
Fanjia Yan, Huanzhi Mao, Charlie Cheng-Jie Ji, Tianjun Zhang, Shishir G. Patil, Ion Stoica, Joseph E. Gonzalez
[User Query]
"Book a flight to NYC and a hotel in Manhattan"
[Available Functions]
[{"name": "book_flight", "parameters": {"destination": "string"}},
{"name": "book_hotel", "parameters": {"location": "string"}}]
[Expected Output]
[book_flight(destination="NYC"), book_hotel(location="Manhattan")]
예시 3: Relevance Detection (거부)
[User Query]
"What is the meaning of life?"
[Available Functions]
[{"name": "get_stock_price", "parameters": {"ticker": "string"}},
{"name": "convert_currency", "parameters": {"amount": "float", "from": "string", "to": "string"}}]
[Expected Output]
"No applicable function" — 모델은 함수 호출을 거부해야 함
왜 이 연구를 하는가?
LLM이 AI Agent로 기능하려면 외부 도구(API, 함수)를 정확히 호출하는 능력이 필수적이다. 기존 평가 방식의 한계:
문자열 매칭의 부정확성: get_weather("SF") vs get_weather(location="San Francisco")를 동일하게 처리할 수 없음
복합 시나리오 부재: 실제 agent 환경에서는 병렬 호출, 다중 함수 선택, 관련 없는 요청 거부 등이 필요
다언어 API 미반영: Python 외 Java, JavaScript, REST API 호출 능력 미평가
실행 검증 부재: 형식만 맞고 실제로 동작하지 않는 호출을 구별할 수 없음
BFCL은 AST 매칭을 도입하여 함수명·인자명·인자 타입·인자 값을 구조적으로 비교하고, 9개 카테고리로 다양한 실전 시나리오를 포괄한다.
방법: 평가 파이프라인
flowchart TD
A["사용자 쿼리 + 함수 정의<br/>(JSON Schema)"] --> B["LLM 추론<br/>함수 호출 생성"]
B --> C{"카테고리 분류"}
C -->|Simple| D["단일 함수 호출"]
C -->|Multiple| E["정확한 함수 선택"]
C -->|Parallel| F["다중 동시 호출"]
C -->|Relevance| G["거부 판단"]
C -->|Executable| H["실제 실행"]
D --> I["AST 매칭 평가"]
E --> I
F --> I
G --> J["거부 정확도"]
H --> K["실행 결과 검증"]
I --> L["함수명 일치 ✓"]
I --> M["인자명 일치 ✓"]
I --> N["인자 타입 일치 ✓"]
I --> O["인자 값 일치 ✓"]
L --> P["종합 정확도<br/>Overall Accuracy"]
M --> P
N --> P
O --> P
J --> P
K --> P
AST 매칭 상세
함수명 검사: 정확한 함수 이름 일치 여부
인자명 검사: 파라미터 이름 정확성
인자 타입 검사: string, int, float, bool 등 타입 일치
인자 값 검사: 실제 전달 값의 의미적·정확적 일치
문자열 단순 비교가 아닌 구문 트리 수준 구조적 비교로 포맷 차이에 강건
발견: 주요 결과
전체 성능 비교 (2024)
모델
전체 정확도
Simple
Multiple
Parallel
Relevance
GPT-4o
~88%
~95%
~85%
~80%
~90%
Claude 3.5 Sonnet
~86%
~93%
~84%
~78%
~88%
Gorilla-OpenFunc-v2
~85%
~92%
~82%
~76%
~85%
Llama-3.1-70B
~78%
~88%
~75%
~65%
~80%
Mistral-Large
~75%
~85%
~72%
~62%
~78%
핵심 발견
Simple → Parallel 성능 하락: 모든 모델에서 단순 호출 대비 병렬 호출 시 10-20%p 정확도 하락
Relevance Detection 난이도: 함수를 호출하지 않아야 할 때의 판단이 의외로 어려움 — 과잉 호출(over-calling) 경향
다언어 격차: Python 함수 호출 대비 Java/JavaScript/REST에서 일관되게 낮은 성능
오픈소스 vs 클로즈드: GPT-4o/Claude 등 클로즈드 모델이 오픈소스 대비 ~10%p 우위를 유지
Executable 카테고리: 형식적으로 맞는 호출도 실행 시 약 5-8%p 추가 오류 발생
이론적 의의
기여
Function Calling 표준화: LLM의 도구 사용 능력에 대한 최초의 체계적 벤치마크 제공
AST 매칭 평가법: 문자열 비교를 넘어선 구조적 평가 방법론 확립, 이후 tool-use 벤치마크의 표준이 됨
Agent 능력 지표: 단순 텍스트 생성이 아닌 구조화된 출력(structured output) 품질 측정의 프레임워크
실행 가능성 검증: Executable 카테고리를 통해 형식 정확성 너머 실질적 동작 여부까지 평가
한계
정적 테스트: 실제 agent 환경의 멀티턴 대화, 에러 처리, 재시도 시나리오 미반영
함수 정의 품질: 테스트 함수 정의가 상대적으로 명확하여 실제 문서화가 부실한 API와 괴리
단일 호출 평가: 연쇄 호출(chained calls) — 이전 함수 결과를 다음 함수 입력으로 사용 — 시나리오 제한적