인공지능팩토리 로고

한국어 LLM Function Call 평가

📌 Function Call (펑션 콜) 이란?

LLM의 Function Call (펑션 콜) 기능은 모델이 API 호출, 데이터 처리, 계산 등의 작업을 수행할 수 있도록 하는 기능입니다. 

이를 통해 사용자는 자연어 입력을 기반으로 특정 함수를 실행하는 방식으로 모델을 활용할 수 있습니다.

🔍 평가 대상 모델

다음 모델들의 Function Call 성능을 평가합니다:

  • Qwen/Qwen2.5-72B-Instruct-AWQ
  • Linkbricks-Horizon-AI-Llama-3.3-Korean-70B-sft-dpo-AWQ
  • deepseek-ai/DeepSeek-R1-Distill-Qwen-14B
  • deepseek-ai/DeepSeek-R1-Distill-Llama-8B
  • deepseek-ai/DeepSeek-R1-Distill-Qwen-7B
  • deepseek-ai/deepseek-llm-7b-chat

 

🛠️ 평가 데이셋 및 지표 설명

Single-turn 지표 설명

지표평가 기준Pass 조건예시
exact정확한 문자열 일치모델의 답변이 정답과 100% 동일해야 Pass정답: "오늘 날씨는 맑습니다." 
모델 답변: "오늘 날씨는 맑습니다." → Pass 
모델 답변: "오늘 날씨가 맑아요." → Fail
4_random랜덤 4개 중 하나와 일치정답 후보 4개 중 하나와 완전히 동일하면 Pass정답 후보: ["사과", "바나나", "포도", "오렌지"] 
모델 답변: "바나나" → Pass 
모델 답변: "수박" → Fail
8_random랜덤 8개 중 하나와 일치정답 후보 8개 중 하나와 완전히 동일하면 Pass정답 후보: ["사과", "바나나", "포도", "오렌지", "수박", "망고", "딸기", "복숭아"] 
모델 답변: "망고" → Pass
4_close의미적으로 유사한 4개 중 하나와 일치정답 후보 4개 중 하나와 의미가 충분히 비슷하면 Pass정답 후보: ["매우 좋다", "정말 좋아", "기분이 최고야", "너무 만족스러워"] 
모델 답변: "기분이 너무 좋네요!" → Pass (의미 유사)
8_close의미적으로 유사한 8개 중 하나와 일치정답 후보 8개 중 하나와 의미가 충분히 비슷하면 Pass정답 후보: ["맛있어요", "정말 맛나다", "최고의 음식", "너무 맛있어", "대단한 요리", "진짜 맛있다", "환상적인 맛", "끝내줘요"] 
모델 답변: "이 음식 정말 끝내주네요!" → Pass (의미 유사)

Multi-turn 지표 설명

지표평가 기준Pass 조건예시
CallAPI 호출이 정상적으로 이루어졌는지 평가API 호출이 정상적으로 성공하면 Pass사용자의 요청에 따라 create_user 함수가 호출되어, 사용자 정보가 정확히 전달되면 Pass (JSON 형태로 {"name": "John", "email": "john@example.com", "password": "password123"})
Completion모델이 응답을 끝까지 잘 생성했는지 평가응답이 중단 없이 완전하게 생성되면 Pass질문에 대한 답변이 중간에 끊기지 않고 전체 내용을 담고 있으면 Pass (하나의 긴 문장이 끝까지 출력됨)
Slot필수 정보가 모델 응답에 포함되었는지 평가모든 필수 정보가 포함되어 있으면 Pass예를 들어, 사용자 계정 생성 시 "이름", "이메일", "비밀번호"와 같은 필수 항목이 모두 응답에 포함되면 Pass
Relevance모델 응답이 질문과 얼마나 관련이 있는지 평가응답이 질문과 높은 연관성을 가지면 Pass예를 들어, 사용자가 "새 계정을 만들고 싶습니다."라고 요청했을 때, 계정 생성에 필요한 정보를 묻는 응답이 나오면 질문과 관련성이 높아 Pass

Common 지표 설명

지표평가 기준Pass 조건예시
CallAPI 호출이 정상적으로 이루어졌는지 평가API 호출이 정상적으로 성공하면 Pass사용자의 요청에 따라 create_user 함수가 호출되어, 사용자 정보가 정확히 전달되면 Pass (예: JSON 형태로 {"name": "John", "email": "john@example.com", "password": "password123"})
Reject적절한 함수가 없을 때, 적절한 응답을 하는가적절한 함수가 없을 때, 적절한 응답을 하는가"하늘의 색을 바꿔줘" 같은 요청에 대해 "해당 요청을 수행할 수 없습니다."와 같은 자연스러운 답변을 하면 Pass
Slot-all필요한 모든 정보가 없는 경우, 추가 정보를 요청하는가필요한 모든 정보가 없는 경우, 추가 정보를 요청하는가"세탁물 수거 서비스 신청하고 싶은데 가능한가요?" → "세탁물을 수거할 위치와 날짜, 시간을 알려주세요.” (질문에 정보 아예 없음)
Slot-some일부 정보가 부족한 경우, 부족한 정보만 요청하는가일부 정보가 부족한 경우, 부족한 정보만 요청하는가"택시 불러줘. 출발지는 롯데시네마 위례야." → "도착 위치를 알려주세요.” (질문에 일부 정보 없음)


 

📂 평가 데이터 설명

  • 카카오 Function Call 한국어 데이터셋 : FunctionChat-Bench
  • Function call Pass/Fail 판별 모델 : gpt-4-0125-preview
  • Single-turn : 25가지의 기능
  • multi-turn : 45가지의 기능

 

🗄️ 입력데이터 예시

{
  "serial_num": 1,
  "messages": [
    {"role": "system", "content": null},
    {"role": "user", "content": "새 계정을 만들고 싶습니다."},
    {"role": "assistant", "content": "네, 도와드릴 수 있습니다. 성함과 이메일 주소, 비밀번호를 알려주시겠어요?"},
    {"role": "user", "content": "내 이름은 John이고, 이메일은 john@example.com이고, 비밀번호는 password123이에요."}
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "create_user",
        "description": "새로운 사용자 계정을 생성한다.",
        "parameters": {
          "type": "object",
          "properties": {
            "name": {"type": "string", "description": "사용자의 이름"},
            "email": {"type": "string", "description": "사용자의 이메일 주소"},
            "password": {"type": "string", "description": "사용자의 비밀번호"}
          },
          "required": ["name", "email", "password"]
        }
      }
    }
  ],
  "temperature": 0.1,
  "tool_choice": "auto",
  "ground_truth": {
    "role": "assistant",
    "content": null,
    "tool_calls": [
      {
        "id": "random_id",
        "type": "function",
        "function": {
          "name": "create_user",
          "arguments": "{\"name\": \"John\", \"email\": \"john@example.com\", \"password\": \"password123\"}"
        }
      }
    ]
  },
  "type_of_output": "call"
}

 

📊 평가 리포트 예시

  • 결과: Pass
  • 평가 항목: Call
{
  "role": "assistant",
  "content": null,
  "tool_calls": [
    {
      "id": "random_id",
      "type": "function",
      "function": {
        "name": "create_user",
        "arguments": "{\"name\": \"John\", \"email\": \"john@example.com\", \"password\": \"password123\"}"
      }
    }
  ]
}

{
  "reasoning": "exact-eval\n\n\npass\npass\n"
}