BFCL 函数调用评测
BFCL 围绕函数选择、参数构造和工具交互评价模型,阅读成绩时必须同时看测试版本与分项设置。
理解与应用
BFCL 是 Berkeley Function Calling Leaderboard 的简称,是评估模型函数调用能力的基准。它关心模型能否在给定工具说明和用户请求后,选对函数、填对参数,并在对应测试类别中处理后续交互。这类能力决定自然语言请求能否被转成可执行操作,但并不等于操作已经得到用户授权。
例如用户问“把杭州天气按摄氏度给我”,工具参数要求地点与温度单位。模型选择了天气函数,还必须把单位设为 Celsius;返回一个格式正确但单位为 Fahrenheit 的调用,仍然改变了用户意图。相反,JSON 对象里两个键的先后位置变化,通常不改变参数含义。评测因此不能只比较输出字符串,还要考虑结构、可执行结果或交互状态。
BFCL 的测试范围和方法会随版本发展,引用分数需要同时说明基准版本、模型版本、工具调用方式和各类别成绩。一个总分可能遮住“单次参数构造很好,多轮状态恢复较差”的区别。产品接入仍需要自己的测试:报销单不存在时是否询问编号、没有合适工具时是否停止、权限拒绝后是否改用越权路径。公开基准帮助建立共同比较方法,业务中的工具 schema、预算和失败方式则决定这份比较能迁移多少。
动手试一试:参数顺序相同与参数含义相同的区别
这个结构比较只说明 JSON 对象键顺序与参数值的区别,不是 BFCL 官方评分器。实际基准还可能使用更复杂的函数签名、执行条件和交互规则。
将代码保存为 example.py,使用 Python 3.10+ 运行 python3 example.py。仅使用标准库,无需密钥,不会调用外部模型。
Python 代码
import json
expected = json.loads('{"city":"杭州","unit":"celsius"}')
reordered = json.loads('{"unit":"celsius","city":"杭州"}')
wrong_unit = json.loads('{"city":"杭州","unit":"fahrenheit"}')
print("仅键顺序变化:", reordered == expected)
print("温度单位变化:", wrong_unit == expected)运行结果
仅键顺序变化: True 温度单位变化: False
常见误区
- 函数名和 JSON 语法正确,仍可能因为参数值错误而执行另一种意思。
- 榜单总分无法替代与本产品工具和风险相匹配的测试。
- 不同基准版本、模型端点或调用预算下的成绩,不宜直接按数字比较。
前置与延伸
建议先读
相关概念
参考与版本
Apollo 原创讲解与教学示例。参考资料用于核对技术定义;核验日不代表资料的发布日期。
- Berkeley Function Calling Leaderboard ↗
访问时官方页面为 BFCL V4,核对函数调用、分项与代码版本说明;未抄录易变排名。 · 核验:2026-10-10