Ko-AgentBench

December 19, 2025 · View on GitHub

banner

English | 한국어

Dataset Leaderboard


Ko-AgentBench ✨

A comprehensive evaluation benchmark for Korean tool-calling agents

Ko-AgentBench evaluates how effectively AI agents leverage tools that Korean users actually use, such as Naver Search, Kakao Map, crypto exchanges, and stock information services.

🎯 Key Features

  • 🇰🇷 Korea-focused: Naver, Kakao, TMAP, Upbit/Bithumb, LS Securities, Aladin, and more
  • 🔑 No API keys required: Run immediately via a cache-based pseudo API
  • 🎯 7 independent dimensions: Tool selection, sequential/parallel reasoning, error handling, efficiency, long context, etc.
  • 🔄 Reproducible: Repeatable runs under the same conditions for research reproducibility

Tip

Why Ko-AgentBench?

Limitations of existing benchmarks

  • Most tool-calling benchmarks are English-centric and don’t reflect the Korean environment or real Korean user scenarios.
  • They often only check “was the correct API called?” and miss real workflows (error handling, efficiency, context maintenance).

What sets Ko-AgentBench apart

  • Built on real Korean tools: Naver Search/Blog, Kakao Map/Place Search, TMAP routing, Upbit/Bithumb crypto, LS Securities stock info, KTO festivals, Aladin book search, etc.
  • Realistic multi-step scenarios: Not just a single API call; reflects real workflows chaining multiple tools and passing data.
  • Comprehensive evaluation: Based on seven principles—realism, clarity, discriminability, robustness, efficiency, reproducibility, and extensibility.

💡 Cache System: Start instantly without API keys

Ko-AgentBench ships with pre-collected API response caches so you can run the benchmark without real API calls.

  • Read mode (default): Uses cache only, no API keys → anyone can evaluate right away
  • Write mode: Makes real API calls and saves to cache → use for extending datasets
# Run without API keys (cache mode)
uv run run_benchmark_with_logging.py --levels L1 --model openai/gpt-4

# Make real API calls (API keys required)
uv run run_benchmark_with_logging.py --cache-mode write

🛠️ Available API Tools

Ko-AgentBench provides various Korean service APIs that users actually use in daily life.

ServiceToolsDescription
Naver SearchSearch_naver_web
Search_naver_blog
Search_naver_news
Naver integrated search, blog, and news search APIs
Kakao LocalAddressToCoord_kakao
CoordToAddress_kakao
PlaceSearch_kakao
CategorySearch_kakao
Address-coordinate conversion, place search, category search
UpbitCryptoPrice_upbit
MarketList_upbit
CryptoCandle_upbit
Crypto current price, market list, candle chart data
BithumbCryptoPrice_bithumb
OrderBook_bithumb
MarketList_bithumb
CryptoCandle_bithumb
Crypto current price, order book, market list, candle chart
LS SecuritiesStockPrice_ls
MarketIndex_ls
OrderBook_ls
SectorStock_ls
StockTrades_ls
Domestic/international stock prices, market index, order book, sector stocks, trade history
Korea InvestmentStockPrice_kis
USStockPrice_kis
StockChart_kis
Domestic stock price, US stock price, chart data
AladinItemSearch_aladin
ItemList_aladin
ItemLookup_aladin
Book search, bestseller/new release lists, book details
TMAPPOISearch_tmap
Geocoding_tmap
ReverseGeocoding_tmap
CarRoute_tmap
CategorySearch_tmap
POI search, address-coordinate conversion, car routing, category search
Naver MapsDirections_naverPublic transit/car/walking directions
Korea TourismFestivalSearch_ktoNational festival information search

Note: All APIs operate in cache mode; in Read mode (default), no actual API keys are required.


📊 The 7 Independent Evaluation Dimensions

Tool-calling ability isn’t one-dimensional. “Using tools well” involves choosing the right tool, planning to chain tools, handling errors, and operating efficiently. Ko-AgentBench separates these abilities into seven independently measured dimensions—they are not difficulty tiers but orthogonal capabilities.

LevelTaskDescription
L1Single tool callVerify executing a given single tool with correct parameters
L2Tool selectionChoose the most suitable tool among multiple candidates
L3Sequential reasoningPlan and execute sequences where one tool’s output feeds into the next
L4Parallel reasoningExecute multiple tools concurrently and synthesize results
L5Error handling & robustnessHandle API failures, missing info, and other exceptional situations
L6Efficient tool useReuse past tool results to avoid redundant calls
L7Long-context memoryMaintain and utilize long multi-turn context to call tools appropriately

Each dimension is measured independently; the composite score is a weighted average, allowing fine-grained diagnosis of strengths and weaknesses.


🚀 Quickstart

1) Install

# Clone repo
git clone https://github.com/Hugging-Face-KREW/Ko-AgentBench
cd Ko-AgentBench

# Install uv (if not installed)
curl -LsSf https://astral.sh/uv/install.sh | sh

# Install dependencies
uv sync

2) Set LLM API keys

Only the LLM’s API key is required (tool API keys are unnecessary in cache mode).

# LLM Model API key (required)
export OPENAI_API_KEY="your-openai-key"
export ANTHROPIC_API_KEY="your-anthropic-key"
export GEMINI_API_KEY="your-gemini-key"
export OPENROUTER_API_KEY="your-openrouter-key"
# Optional headers recommended by OpenRouter
export OPENROUTER_APP_URL="https://your-service.tld"
export OPENROUTER_APP_TITLE="Ko-AgentBench Runner"

3) Run and Evaluate

# Run benchmark (L1, cache read mode)
uv run run_benchmark_with_logging.py --levels L1 --model openai/gpt-4

# OpenRouter example
uv run run_benchmark_with_logging.py --levels L1 --model openrouter/anthropic/claude-3.5-sonnet

# Evaluate (enter execution date as YYYYMMDD)
uv run evaluate_model_run.py --date 20251022 --model openai/gpt-4 --format all

📁 Project Structure

Folder layout

Ko-AgentBench/
├─ bench/
│  ├─ tasks/       # YAML task definitions
│  ├─ tools/       # Tool specs and adapters
│  ├─ runner/      # Engine and metrics
│  └─ cache/       # API response cache
├─ logs/           # Execution logs
├─ reports/        # Evaluation reports
├─ configs/        # Configuration files
├─ run_benchmark_with_logging.py
├─ evaluate_model_run.py
└─ README.md

Pipeline

[1] Run: run_benchmark_with_logging.py
    └─ Execution logs → logs/
         (conversation, tool calls, parameters, cache hit rate, errors)

[2] Evaluate: evaluate_model_run.py
    └─ Reports → reports/{model}_{date}/
         (metrics, JSON/CSV/Markdown formats)

Run and evaluation are decoupled for reproducibility and automation.


⚡ Running the Benchmark

Basic usage

Use run_benchmark_with_logging.py to evaluate a model.

# Run all levels (cache read mode)
uv run run_benchmark_with_logging.py

# Run specific levels
uv run run_benchmark_with_logging.py --levels L1,L2,L3

# Specify a model
uv run run_benchmark_with_logging.py --model openai/gpt-4

# Use a local model
uv run run_benchmark_with_logging.py --use-local --model Qwen/Qwen2.5-7B-Instruct

# Make real API calls and write cache
uv run run_benchmark_with_logging.py --cache-mode write

# Repeat each task 3 times
uv run run_benchmark_with_logging.py --repetition 3

Key options

Dataset selection

  • --levels: Levels to run (e.g., L1,L2,L6,L7) — default: all

Model settings

  • --model: Model ID (e.g., openai/gpt-4, anthropic/claude-3-5-sonnet-20241022)
  • --use-local: Use local Transformers
  • --quantization: 4bit/8bit
  • --device: cuda/cpu/auto
  • --dtype: auto/float16/bfloat16/float32

Execution control

  • --max-steps: Max steps per task (default: 10)
  • --timeout: Timeout per task in seconds (default: 60)
  • --repetitions: Repeated runs for Pass@k
  • --no-save-logs: Disable log saving

Cache mode

  • --cache-mode:
    • read (default): Use saved cache only
    • write: Make real API calls and save cache (requires API keys in configs/secrets)

Result location

  • Default: logs/benchmark_results/by_model/{model}/{timestamp}/

📏 Evaluation

Usage

Use evaluate_model_run.py to analyze logs and generate reports.

# Basic evaluation
uv run evaluate_model_run.py --date 20251022 --model azure/gpt-4o

# Quick test (1 per level)
uv run evaluate_model_run.py --date 20251022 --model azure/gpt-4o --quick

Key options

  • --date: Benchmark execution date (YYYYMMDD)
  • --model: Model ID to evaluate
  • --judge-models: Judge model(s) (Default: gpt-4o single model, Specify multiple for ensemble)
  • --sample N: Evaluate N samples per level
  • --quick: 1 sample per level (sampling)
  • --format: Output format (json/csv/markdown/all)

Output location

  • Output: reports/{model}_{date}/
    • evaluation_report.json
    • evaluation_summary.csv
    • evaluation_report.md

🧩 Evaluation Levels and Tasks

Seven levels assess the agent’s tool-calling capabilities.

LevelAreaExampleKey metrics
L1Single tool call“How many minutes by car from Pangyo Station to Jamsil Baseball Stadium?”ToolAcc, ArgAcc, CallEM, RespOK
L2Tool selection“I want to check the current order book for POSCO Holdings”SelectAcc
L3Sequential reasoning“Find universities near Cheongnyangni Station, then count nearby hospitals”FSM, PSM, ΔSteps_norm
L4Parallel reasoning“Fetch BTC prices from multiple exchanges and compare”Coverage, SourceEPR
L5Error handling & robustness“Search the iPhone 17 release date” (fallback when API fails)AdaptiveRoutingScore, FallbackSR
L6Efficient tool use“Find books on Python algorithmic trading” (avoid duplicate calls)RedundantCallRate, EffScore
L7Long-context memory“I’ve been into Bitcoin lately…” (multi-turn dialogue)ContextRetention, RefRecall

🧩 Metrics

Common metrics (all levels)

MetricDescriptionCalculation
SR (Success Rate)Task completion scoreLLM Judge 1–5 → (score-1)/4
EPR/CVREffective call ratioValid calls / total calls
Pass@kSuccess within k triesSuccessful attempts / k

Level-specific metrics

L1: Single tool call

MetricDescriptionCalculation
ToolAccCorrect tool selectionmatch=1, else 0
ArgAccArgument accuracyLLM Judge 1–5 → 0–1
CallEM (Call Exact Match)Tool+args exact match0 or 1
RespOKResponse format compliance0 or 1

L2: Tool selection

MetricDescriptionCalculation
SelectAccCorrect selection rate0 or 1

L3: Sequential reasoning

MetricDescriptionCalculation
FSM (Full Sequence Match)Exact call order match0 or 1
PSM (Partial Sequence Match)Required tools coveragerequired included / total required
ΔSteps_normEfficiency vs. shortest pathmin(1, min steps / actual steps)

L4: Parallel reasoning

MetricDescriptionCalculation
CoverageRequired tool execution ratesuccessful required / total required
SourceEPRAvg. valid-call rate per toolmean(valid / total)

L5: Error handling & robustness

MetricDescriptionCalculation
AdaptiveRoutingScoreAgility of switching to fallback1 / (1 + switch delay steps)
FallbackSRFallback success ratefallback success / attempts

L6: Efficient tool use

MetricDescriptionCalculation
RedundantCallRateRedundant call avoidance1 - (redundant / reuse opportunities)
EffScoreEfficiency when successfulmin(1, min steps / actual steps)

L7: Long-context memory

MetricDescriptionCalculation
ContextRetentionContext maintenance abilityLLM Judge 1–5 → 0–1
RefRecallRecall of prior infoLLM Judge 1–5 → 0–1

Judge evaluation

  • Judge ensemble: GPT-4o, Claude, Gemini
  • Aggregation: mean or median
  • Blind evaluation without model names for fairness

📊 Leaderboard

Results are saved to reports/{model}_{date}/:

  • JSON (evaluation_report.json)
  • CSV (evaluation_summary.csv)
  • Markdown (evaluation_report.md)

Usage examples

# 1) Evaluate L1–L3 with GPT-4
uv run run_benchmark_with_logging.py --levels L1,L2,L3 --model openai/gpt-4

# 2) Full levels with Claude + write cache
uv run run_benchmark_with_logging.py --model anthropic/claude-3-5-sonnet-20241022 --cache-mode write

# 3) Local model with 4-bit quantization
uv run run_benchmark_with_logging.py --use-local --model Qwen/Qwen2.5-7B-Instruct --quantization 4bit --device cuda

# 4) Multi-turn dialogue levels
uv run run_benchmark_with_logging.py --levels L6,L7 --max-steps 20

# 5) Generate evaluation reports (default: single Judge)
uv run evaluate_model_run.py --date 20251022 --model azure/gpt-4o --format all

# 6) Quick sampled evaluation
uv run evaluate_model_run.py --date 20251022 --model azure/gpt-4o --quick

⚖️ License

Licensed under Apache-2.0.