BFCL: Berkeley Function Calling Leaderboard

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
소속UC Berkeley (Gorilla Team)
URLgorilla.cs.berkeley.edu/leaderboard.html
총 규모2,000+ 테스트 케이스 (v1: ~1,700 / v2: 확장)
평가 방식AST 매칭 — 함수명, 인자명, 인자 타입, 인자 값 정확도 검증
도메인Function Calling, Tool Use, API Interaction

데이터셋 구성

규모 및 카테고리 분포

카테고리테스트 수설명
Simple Function~400단일 함수, 올바른 인자 생성
Multiple Function~200여러 함수 중 정확한 함수 선택
Parallel Function~200동시에 여러 함수 호출
Parallel Multiple~200병렬 + 다중 선택 결합
Java API~100Java 메서드 시그니처 기반 호출
JavaScript API~100JS 함수 시그니처 기반 호출
REST API~100HTTP 엔드포인트 호출 (GET/POST 등)
Relevance Detection~200적용 가능한 함수가 없을 때 거부 판단
Executable Functions~200실제 실행 가능한 함수로 결과까지 검증

Feature 구조

Feature타입설명
promptstring사용자 자연어 쿼리
function_definitionsJSON array사용 가능한 함수들의 JSON Schema 정의
expected_outputJSON정답 함수 호출 (함수명 + 인자)
categorystring테스트 카테고리 (simple, multiple, parallel 등)
languagestring프로그래밍 언어 (Python, Java, JavaScript, REST)

실제 데이터 예시

예시 1: Simple Function Call

[User Query]
"What's the weather in San Francisco?"

[Available Functions]
[{
  "name": "get_weather",
  "parameters": {
    "location": {"type": "string", "description": "City name"},
    "unit": {"type": "string", "enum": ["fahrenheit", "celsius"]}
  }
}]

[Expected Output]
get_weather(location="San Francisco", unit="fahrenheit")

예시 2: Parallel Function Call

[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, 함수)를 정확히 호출하는 능력이 필수적이다. 기존 평가 방식의 한계:

  1. 문자열 매칭의 부정확성: get_weather("SF") vs get_weather(location="San Francisco")를 동일하게 처리할 수 없음
  2. 복합 시나리오 부재: 실제 agent 환경에서는 병렬 호출, 다중 함수 선택, 관련 없는 요청 거부 등이 필요
  3. 다언어 API 미반영: Python 외 Java, JavaScript, REST API 호출 능력 미평가
  4. 실행 검증 부재: 형식만 맞고 실제로 동작하지 않는 호출을 구별할 수 없음

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)

모델전체 정확도SimpleMultipleParallelRelevance
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%

핵심 발견

  1. Simple → Parallel 성능 하락: 모든 모델에서 단순 호출 대비 병렬 호출 시 10-20%p 정확도 하락
  2. Relevance Detection 난이도: 함수를 호출하지 않아야 할 때의 판단이 의외로 어려움 — 과잉 호출(over-calling) 경향
  3. 다언어 격차: Python 함수 호출 대비 Java/JavaScript/REST에서 일관되게 낮은 성능
  4. 오픈소스 vs 클로즈드: GPT-4o/Claude 등 클로즈드 모델이 오픈소스 대비 ~10%p 우위를 유지
  5. Executable 카테고리: 형식적으로 맞는 호출도 실행 시 약 5-8%p 추가 오류 발생

이론적 의의

기여

  • Function Calling 표준화: LLM의 도구 사용 능력에 대한 최초의 체계적 벤치마크 제공
  • AST 매칭 평가법: 문자열 비교를 넘어선 구조적 평가 방법론 확립, 이후 tool-use 벤치마크의 표준이 됨
  • Agent 능력 지표: 단순 텍스트 생성이 아닌 구조화된 출력(structured output) 품질 측정의 프레임워크
  • 실행 가능성 검증: Executable 카테고리를 통해 형식 정확성 너머 실질적 동작 여부까지 평가

한계

  • 정적 테스트: 실제 agent 환경의 멀티턴 대화, 에러 처리, 재시도 시나리오 미반영
  • 함수 정의 품질: 테스트 함수 정의가 상대적으로 명확하여 실제 문서화가 부실한 API와 괴리
  • 단일 호출 평가: 연쇄 호출(chained calls) — 이전 함수 결과를 다음 함수 입력으로 사용 — 시나리오 제한적
  • v1→v2 연속성: 버전 업데이트 시 이전 결과와의 직접 비교 어려움

관련 연구


핵심 용어

용어설명
Function CallingLLM이 자연어 입력으로부터 정확한 함수 호출(이름+인자)을 생성하는 능력
AST MatchingAbstract Syntax Tree 기반 구조적 비교 — 포맷 차이에 강건한 평가 방식
Parallel Function Call하나의 쿼리에 대해 여러 함수를 동시에 호출해야 하는 시나리오
Relevance Detection주어진 함수들이 쿼리와 무관할 때 호출을 거부하는 판단 능력
Tool UseLLM이 외부 도구(API, 데이터베이스 등)를 활용하는 능력의 총칭
Structured Output자유 텍스트가 아닌 JSON, 함수 호출 등 정해진 스키마의 출력
Over-calling함수 호출이 불필요한 상황에서도 함수를 호출하는 과잉 호출 경향

Benchmark FunctionCalling ToolUse LLM AST Agent API Evaluation UCBerkeley Gorilla