現況
BFCL 官方有 irrelevance / live_irrelevance 類別:提供工具但正確行為是不要呼叫,
用來量測模型會不會過度熱心地亂呼叫工具——這也是各模型在 BFCL 上分差最大的類別之一。
目前 twinkle-eval(v2.8.0,main 亦同)有兩層限制,使這個類別無法評測:
1. Scorer 對空 ground truth 一律判 False
|
if not predicted_calls or not ground_truth: |
if not predicted_calls or not ground_truth:
return False
irrelevance 題的 ground truth 是空的(正確答案=不呼叫),走到這裡永遠 False。
2. Extractor 把「沒有呼叫」變成 None,而不是空列表
bfcl_prompt extractor 在解析不到任何 function call 時回傳 None;
bfcl_fc 模式下模型不回 tool_calls 時亦同。對 irrelevance 題而言,
「沒有可解析的呼叫」正是正確行為,但它在進 scorer 之前就被當成無法解析。
重現
from twinkle_eval.metrics.scorers.bfcl import BFCLScorer # 名稱依實際 class
import json
scorer = BFCLScorer()
gold = json.dumps({"category": "irrelevance", "ground_truth": []})
# 模型正確地拒絕呼叫(無 tool call)→ 應為 True,實際 False
print(scorer.score("[]", gold)) # False
# 模型錯誤地硬呼叫 → 應為 False,實際也是 False
print(scorer.score(json.dumps([{"name": "get_weather", "arguments": {}}]), gold)) # False
兩種行為分不開,此類別的分數恆為 0。
建議語義(對齊 BFCL 官方 checker)
- category 含
irrelevance 時(或 ground_truth 為空):
正確 ⟺ 預測中沒有任何有效的 function call。
模型輸出拒絕說明、閒聊、或無法解析為呼叫的內容,都算正確。
- extractor 端:解析不到呼叫時回傳
"[]"(空列表的 JSON),讓「沒有呼叫」
成為可評分的預測,而非 unparsed;或由 scorer 在 irrelevance 類別下把
None/unparsed 視為正確。
背景
我們正在為 OpenTWBench 建台灣在地的 tool-calling 評測集(tw-bfcl-bench),
irrelevance 是規劃中的類別(80/400 題)。目前打算先在執行端以 wrapper
monkey-patch 處理,但這個語義放進 twinkle-eval 本體對所有使用者都有價值。
願意發 PR,若維護者對介面走向(extractor 回空列表 vs scorer 特判)有偏好,
請告訴我。
現況
BFCL 官方有
irrelevance/live_irrelevance類別:提供工具但正確行為是不要呼叫,用來量測模型會不會過度熱心地亂呼叫工具——這也是各模型在 BFCL 上分差最大的類別之一。
目前 twinkle-eval(v2.8.0,main 亦同)有兩層限制,使這個類別無法評測:
1. Scorer 對空 ground truth 一律判 False
Eval/twinkle_eval/metrics/scorers/bfcl.py
Line 163 in 470bbec
irrelevance題的 ground truth 是空的(正確答案=不呼叫),走到這裡永遠 False。2. Extractor 把「沒有呼叫」變成 None,而不是空列表
bfcl_promptextractor 在解析不到任何 function call 時回傳None;bfcl_fc模式下模型不回tool_calls時亦同。對 irrelevance 題而言,「沒有可解析的呼叫」正是正確行為,但它在進 scorer 之前就被當成無法解析。
重現
兩種行為分不開,此類別的分數恆為 0。
建議語義(對齊 BFCL 官方 checker)
irrelevance時(或ground_truth為空):正確 ⟺ 預測中沒有任何有效的 function call。
模型輸出拒絕說明、閒聊、或無法解析為呼叫的內容,都算正確。
"[]"(空列表的 JSON),讓「沒有呼叫」成為可評分的預測,而非 unparsed;或由 scorer 在 irrelevance 類別下把
None/unparsed 視為正確。背景
我們正在為 OpenTWBench 建台灣在地的 tool-calling 評測集(tw-bfcl-bench),
irrelevance 是規劃中的類別(80/400 題)。目前打算先在執行端以 wrapper
monkey-patch 處理,但這個語義放進 twinkle-eval 本體對所有使用者都有價值。
願意發 PR,若維護者對介面走向(extractor 回空列表 vs scorer 特判)有偏好,
請告訴我。