新闻详情

新闻详情

首页 / 资讯中心 / 详情

函数调用能力评测实战:用 BFCL(Berkeley Function Calling Leaderboard)全面评估 Qwen3-Coder 模型

发布时间:2026/9/14 10:17:26来源:尧图网络
函数调用能力评测实战:用 BFCL(Berkeley Function Calling Leaderboard)全面评估 Qwen3-Coder 模型
函数调用能力评测实战用 BFCLBerkeley Function Calling Leaderboard全面评估 Qwen3-Coder 模型【免费下载链接】Qwen3-CoderQwen3-Coder is the code version of Qwen3, the large language model series developed by Qwen team.项目地址: https://gitcode.com/GitHub_Trending/co/Qwen3-CoderBFCLBerkeley Function Calling Leaderboard是首个面向大语言模型函数调用能力、同时兼顾可执行性与多样化场景的综合评测框架。本指南以 Qwen3-Coder 开源仓库中集成的 BFCL 评测套件为核心系统讲解其安装配置、模型响应生成、自动化评分、日志解析与模型扩展全流程读完你即可在自己的 GPU 或 API 环境上复现对 Qwen3-Coder 等模型的函数调用能力评估。一、BFCL 是什么为什么函数调用评测需要可执行与传统的纯文本生成评测不同BFCL 重点回答一个问题模型给出的函数调用结果能否真正落地执行。它覆盖了函数调用的多种形态——单轮、并行、顺序、并行顺序混合、多语言Java/JavaScript以及多轮对话中的函数调用同时将评测分为可执行Executable与 AST抽象语法树比对两大类别兼顾能不能跑与格式对不对两个维度。在 Qwen3-Coder 仓库中该评测套件位于qwencoder-eval/tool_calling_eval/berkeley-function-call-leaderboard/配套的tau-bench航空/零售多轮 Agent 场景同属于函数调用评测体系形成互补。本套件以bfcl命令行工具为核心将生成模型响应与评测响应两个阶段解耦便于开发者迭代模型。二、安装与配置从 Conda 环境到环境变量2.1 基础安装可编辑模式推荐通过可编辑安装便于后续直接修改源码扩展模型# 创建 Python 3.10 的 Conda 环境 conda create -n BFCL python3.10 conda activate BFCL # 进入本仓库中的 BFCL 目录 cd qwencoder-eval/tool_calling_eval/berkeley-function-call-leaderboard # 可编辑模式安装 pip install -e .从 pyproject.toml 可以看到该包名为bfcl_eval要求 Python3.10核心依赖包括openai1.86.0、anthropic、google-genai、mistralai、tree-sitter用于 AST 比对、tenacity重试、pandas/numpy与typerCLI 框架。安装后bfcl命令即注册到环境中[project.scripts] bfcl bfcl_eval.__main__:cli。2.2 从 PyPI 安装仅评估场景如果只想跑评估、不改代码可直接安装预构建的 wheel。注意PyPI 上有一个同名的无关项目bfcl务必安装bfcl-evalpip install bfcl-eval2.3 自托管模型的额外依赖本地推理模型需要选择一个后端。README 明确指出sglang推理速度明显快于vllm但仅支持 SM 80Ampere 及更新的 GPU如果使用 T4/V100 等旧卡应改用兼容更广的vllm# 使用 vllm对应可选依赖 oss_eval_vllm锁定 vllm0.8.5 pip install -e .[oss_eval_vllm] # 使用 sglang对应 oss_eval_sglang pip install -e .[oss_eval_sglang]如需 WandB 评测日志额外安装pip install -e .[wandb]。2.4 配置项目根目录BFCL_PROJECT_ROOT这是最容易踩坑的一步。从 PyPI 安装的用户必须设置BFCL_PROJECT_ROOT否则结果文件会深藏在 Python 包源码目录里难以访问可编辑安装则默认以berkeley-function-call-leaderboard目录为根可省略。export BFCL_PROJECT_ROOT/path/to/your/desired/project/directory从 eval_config.py 源码可以看到该变量的完整影响面PROJECT_ROOT Path(os.getenv(BFCL_PROJECT_ROOT, ...))—— 项目根目录RESULT_PATH PROJECT_ROOT / result—— 模型响应存放目录SCORE_PATH PROJECT_ROOT / score—— 评测得分存放目录DOTENV_PATH PROJECT_ROOT / .env—— 环境变量文件位置TEST_IDS_TO_GENERATE_PATH PROJECT_ROOT / test_case_ids_to_generate.json——--run-ids定向评测的配置文件位置。设置后result/、score/目录会自动在$BFCL_PROJECT_ROOT下创建源码末尾的mkdir(parentsTrue, exist_okTrue)保证了这一点。2.5 设置环境变量.envAPI Key 等配置区别于BFCL_PROJECT_ROOT统一存放在.env文件中仓库随包分发.env.example样例# 可编辑安装 cp bfcl_eval/.env.example .env # PyPI 安装把样例复制到项目根 cp $(python -c import bfcl_eval; print(bfcl_eval.__path__[0]))/.env.example $BFCL_PROJECT_ROOT/.env运行闭源模型GPT、Claude、Mistral、Gemini、Nova 等时必须把对应 API Key 填入.env。以仓库中 Qwen3-Coder 的接入方式为例qwen3_coder.py 会读取OPENAI_API_BASE与OPENAI_API_KEY两个环境变量并通过 litellm 统一转发这意味着 Qwen3-Coder 可走 OpenAI 兼容协议接入。三、运行评测第一步生成 LLM 响应3.1 选择模型与测试类别生成命令的核心参数有两个--model MODEL_NAME模型标识参考 SUPPORTED_MODELS.md默认gorilla-openfunctions-v2--test-category TEST_CATEGORY测试类别参考 TEST_CATEGORIES.md默认全部类别。多模型、多类别用逗号分隔bfcl generate --model claude-3-5-sonnet-20241022-FC,gpt-4o-2024-11-20-FC --test-category simple,parallel,multiple,multi_turn从main.py 源码可见CLI 层通过handle_multiple_input回调把逗号分隔的字符串解析为列表再透传给底层生成管线。3.2 用--run-ids定向复测指定用例迭代模型或修复推理 bug 后往往只需重跑少量条目。--run-ids让生成管线读取项目根目录下的test_case_ids_to_generate.json按精确用例 ID 定向评测此时--test-category被忽略bfcl generate --model MODEL_NAME --run-idsJSON 以类别 → ID 列表的映射组织仓库提供样例 test_case_ids_to_generate.json.example{ simple: [simple_101, simple_202], multi_turn_base: [multi_turn_base_14] }注意该 JSON 必须放在项目根目录与.env同级CLI 才能无视当前工作目录找到它# 可编辑安装 cp bfcl_eval/test_case_ids_to_generate.json.example ./test_case_ids_to_generate.json # PyPI 安装 cp $(python -c import bfcl_eval, pathlib; print(pathlib.Path(bfcl_eval.__path__[0]) / test_case_ids_to_generate.json.example)) $BFCL_PROJECT_ROOT/test_case_ids_to_generate.json3.3 输出与日志默认生成的响应存放在项目根目录下的result/MODEL_NAME/BFCL_v3_TEST_CATEGORY_result.json可通过BFCL_PROJECT_ROOT环境变量或--result-dir选项自定义位置每个响应文件附带推理日志用于分析/调试需要更详细的日志含发送给模型的完整输入快照时加--include-input-log标志日志解析详见 LOG_GUIDE.md。3.4 API 模型控制并发bfcl generate --model MODEL_NAME --test-category TEST_CATEGORY --num-threads 1--num-threads控制并行推理等级默认1表示不并行最大线程数取决于你的 API 速率限制切勿盲目调高。3.5 本地 OSS 模型vllm / sglangbfcl generate \ --model MODEL_NAME \ --test-category TEST_CATEGORY \ --backend {vllm|sglang} \ --num-gpus 1 \ --gpu-memory-utilization 0.9 \ --local-model-path /path/to/local/model # 可选--backend vllm默认或--backend sglang--num-gpus默认1多卡张量并行时调整--gpu-memory-utilization默认0.9调低可规避 OOM--local-model-path仅在你已预下载模型、且权重不在默认$HF_HOME缓存时使用目录内需包含config.json、tokenizer、权重等文件。复用已运行的 OpenAI 兼容端点如果集群里已有 vLLM/sglang 服务例如 SLURM 环境用--skip-server-setup跳过启动阶段直接生成bfcl generate --model MODEL_NAME --test-category TEST_CATEGORY --skip-server-setup端点和端口默认localhost:1053可通过.env覆盖端口常量VLLM_PORT 1053定义在 eval_config.pyVLLM_ENDPOINTlocalhost VLLM_PORT10533.6 备选脚本方式执行生成偏好脚本而非 CLI 的开发者可直接调用python -m bfcl_eval.openfunctions_evaluation --model MODEL_NAME --test-category TEST_CATEGORY注意脚本方式指定多模型/多类别时用空格而非逗号分隔其余参数与 CLI 完全兼容。四、运行评测第二步评估已生成的响应必须先完成生成才能评估。执行bfcl evaluate --model MODEL_NAME --test-category TEST_CATEGORYMODEL_NAME与TEST_CATEGORY的取值规则与生成阶段一致。若上一步把响应存在了自定义目录需用--result-dir或BFCL_PROJECT_ROOT指明位置。两个重要规则README 明确说明未评测的测试类别在 CSV 结果中标记为N/A汇总列Overall Acc、Non_Live Overall Acc、Live Overall Acc、Multi Turn Overall Acc计算时未评测类别一律按 0 分计入——因此只跑部分类别得出的总分会比全量评测偏低解读分数时务必注意。4.1 输出结构score 目录与四张 CSV得分文件镜像result/的结构存放在score/MODEL_NAME/BFCL_v3_TEST_CATEGORY_score.json。可用--score-dir或BFCL_PROJECT_ROOT自定义目录。此外./score/下会生成四张 CSV文件内容data_overall.csv各模型总分用于更新排行榜data_live.csvLive单轮各测试类别得分明细data_non_live.csvNon-Live单轮各测试类别得分明细data_multi_turn.csv多轮测试各类别得分明细4.2 可选WandB 评测日志pip install -e .[wandb]并在.env中设置WANDB_BFCL_PROJECTENTITY:PROJECT4.3 备选脚本方式执行评估python -m bfcl_eval.eval_checker.eval_runner --model MODEL_NAME --test-category TEST_CATEGORY多模型/多类别同样用空格分隔。五、CLI 全景不止 generate 与 evaluate从main.py 可以看到完整的子命令体系bfcl models—— 列出全部支持的模型MODEL_CONFIG_MAPPING的键bfcl test-categories—— 按测试组列出可用的测试类别读取TEST_COLLECTION_MAPPINGbfcl generate—— 生成模型响应temperature默认 0.001另有--allow-overwrite/-o允许覆盖旧结果重跑bfcl results—— 以表格列出result/下已有结果的模型及创建时间display_name会把目录名中的_还原为/bfcl evaluate—— 对已有响应打分bfcl scores—— 直接以排行榜视角展示data_overall.csv的关键列Rank、Overall Acc、Non-Live AST/Exec Acc、Live Acc、Multi Turn Acc、Relevance/Irrelevance Detection 等bfcl version—— 显示版本号README 建议以 commit hash 保证可复现性。其中generate命令在调用底层管线前会load_dotenv(dotenv_pathDOTENV_PATH, overrideTrue)加载.env这正是API Key 必须放在项目根.env的原因。六、测试类别体系从 simple 到 multi_turn--test-category既支持测试组一次跑多个相关类别也支持单个类别更细粒度控制。测试组见 TEST_CATEGORIES.mdall全部类别默认值multi_turn/single_turn按对话轮次划分live/non_live是否由社区用户贡献python/non_python按目标语言划分non_python覆盖 Java、JavaScript。单个类别则包括simple简单调用、parallel并行调用、multiple顺序多次调用、parallel_multiple并行顺序混合、java、javascript、irrelevance无关函数文档、社区贡献的live_simple/live_multiple/live_parallel/live_parallel_multiple/live_irrelevance/live_relevance以及多轮的multi_turn_base基础、multi_turn_miss_func缺失函数、multi_turn_miss_param缺失参数、multi_turn_long_context长上下文。对应的评测数据在仓库中可见于bfcl_eval/data/下的BFCL_v3_*.json文件。七、模型支持从 Qwen3 全家桶到自定义扩展7.1 支持的模型形态SUPPORTED_MODELS.md 将模型分为两种接入形态Function CallingFC模式模型原生支持工具调用函数定义放在专用tools段Prompt 模式无原生函数调用能力的模型靠 system prompt 中给出的函数定义生成调用也可作为 FC 模型的对照基线。标记的模型走本地推理vllm/sglang其余走 API。以 Qwen 系列为例Qwen3-{0.6B…235B} 全部同时支持 Prompt 与 FC 两种模式且均提供 APIAlibaba Cloud与自托管两条路径。值得关注的是仓库中专门为 Qwen3-Coder 实现了独立 handler——model_config.py 中注册了Qwen3-Coder-480B-A35B-Instruct配置model_handlerQwen3CoderHandler、is_fc_modelTrue原生 FC 模型。7.2 Qwen3-Coder 的接入实现Qwen3CoderHandler 继承自OpenAIHandler模型风格为ModelStyle.OpenAI通过 litellm 统一调用OPENAI_API_BASE指向的服务其generate_with_backoff使用tenacity重试机制min_wait2s、max_wait10s、最多重试 50 次针对RateLimitError、JSONDecodeError、litellm 各类异常BadRequest/APIError/InternalServerError/Timeout自动退避重试保证长时间批量评测的稳定性。7.3 如何添加新模型README 给出三步流程详见 CONTRIBUTING.md阅读 base_handler.pyAPI 模型基类与bfcl_eval/model_handler/local_inference/base_oss_handler.py本地模型基类为你的模型实现新的 handler 类在bfcl_eval/constants/model_config.py的MODEL_CONFIG_MAPPING注册配置模型名、显示名、handler、is_fc_model等提交 Pull Request。从BaseHandler.inference的源码可以看到分发逻辑模型名含FC或is_fc_modelTrue时走inference_*_FC分支否则走inference_*_prompting分支多轮条目再进一步路由到带multi_turn的实现。这套统一抽象使得新增模型只需关注如何请求 如何解码评测与打分逻辑全部复用。八、推理日志解读定位模型失败根因生成结果文件中的推理日志是分析模型行为的关键LOG_GUIDE.md 定义了六种角色user用户输入或查询assistant模型原始响应tool一次函数执行的结果每次合法函数调用产生一条state_info每轮结束时后端 API 系统的状态开头含初始状态可用--exclude-state-log排除仅多轮相关inference_input发送给模型端点前的完整输入快照需--include-input-log开启内容冗长、一般分析用不上handler_log推理管线内部日志关键事件包括decode_success成功解码模型原始响应解码结果在model_response_decoded字段随后执行函数调用继续本轮empty_responsehandler 按解码策略返回空响应如未产生函数调用管线进入下一轮decode_failure解码失败原始响应记录在model_response_decoded管线进入下一轮force_quit模型在单轮/单任务内连续 20 次尝试失败后被强制终止计数每轮重置该条目不再处理后续轮次。单轮类别因无模型-系统交互日志中只有handler_log下的推理输入。此外多轮的 ground truth 初看可能不知所云仓库提供了可视化脚本模拟 ground truth 与系统的完整对话cd qwencoder-eval/tool_calling_eval/berkeley-function-call-leaderboard/bfcl_eval/scripts python visualize_multi_turn_ground_truth_conversation.py对话日志会保存到bfcl_eval/scripts/ground_truth_conversation/。九、实战建议与注意事项先小后大新模型首次评测建议先用--test-category simple,multiple等少量类别跑通流程再扩展到全量断点续跑部分失败重跑用--run-ids配合test_case_ids_to_generate.json避免整类重来硬件选型本地推理优先sglangAmpere 及以上 GPU旧卡选vllm显存吃紧时把--gpu-memory-utilization降到 0.70.8分数解读汇总列会把未评测类别计为 0只跑部分类别时请以分项 CSVdata_non_live.csv/data_live.csv/data_multi_turn.csv为准可复现性用bfcl version查看版本并记录 commit hashPyPI 版本号处于开发期不应作为复现依据日志优先遇到反常分数先开--include-input-log看inference_input与handler_log确认是请求组装问题还是模型本身解码失败。BFCL 的价值在于把函数调用从主观印象变成可量化、可执行、可复现的指标。借助本仓库集成的完整评测套件你可以对 Qwen3-Coder 及其对比模型进行同口径、同环境的公平评测为模型选型与迭代提供数据支撑。【免费下载链接】Qwen3-CoderQwen3-Coder is the code version of Qwen3, the large language model series developed by Qwen team.项目地址: https://gitcode.com/GitHub_Trending/co/Qwen3-Coder创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Wand-Enhancer 免费完整解锁 Wand 高级功能:4 步跑通指南 + 手机远程面板教程 2026/9/14 10:53:33

Wand-Enhancer 免费完整解锁 Wand 高级功能:4 步跑通指南 + 手机远程面板教程

Wand-Enhancer 免费完整解锁 Wand 高级功能:4 步跑通指南 手机远程面板教程 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 你在公司&…

阅读更多 →
人机交互数据采集系统选型:从传感器到同步架构的核心要点 2026/9/14 10:53:33

人机交互数据采集系统选型:从传感器到同步架构的核心要点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Quarkdown 有序列表解析深度剖析:从测试用例到源码实现 2026/9/14 10:53:33

Quarkdown 有序列表解析深度剖析:从测试用例到源码实现

Quarkdown 有序列表解析深度剖析:从测试用例到源码实现 【免费下载链接】quarkdown 🪐 Markdown with superpowers: from ideas to papers, presentations, websites, books, and knowledge bases. 项目地址: https://gitcode.com/GitHub_Trending/qu/…

阅读更多 →
ZLUDA 中的 highs-sys:HiGHS 线性规划求解器的 Rust 绑定——特性开关、构建链与 Highs_call 接口完全指南 2026/9/14 10:53:33

ZLUDA 中的 highs-sys:HiGHS 线性规划求解器的 Rust 绑定——特性开关、构建链与 Highs_call 接口完全指南

ZLUDA 中的 highs-sys:HiGHS 线性规划求解器的 Rust 绑定——特性开关、构建链与 Highs_call 接口完全指南 【免费下载链接】ZLUDA CUDA on non-NVIDIA GPUs 项目地址: https://gitcode.com/GitHub_Trending/zl/ZLUDA 本篇技术指南围绕 ZLUDA 仓库中 vendore…

阅读更多 →
一句话替代40次点击:UI-TARS 桌面版自动化电脑完整指南 2026/9/14 10:53:33

一句话替代40次点击:UI-TARS 桌面版自动化电脑完整指南

一句话替代40次点击:UI-TARS 桌面版自动化电脑完整指南 【免费下载链接】UI-TARS-desktop The Open-Source Multimodal AI Agent Stack: Connecting Cutting-Edge AI Models and Agent Infra 项目地址: https://gitcode.com/GitHub_Trending/ui/UI-TARS-desktop …

阅读更多 →
TigerBeetle 两阶段转账 Ruby 实战指南:用 Pending/Post 实现可回滚的资金划转 2026/9/14 10:50:32

TigerBeetle 两阶段转账 Ruby 实战指南:用 Pending/Post 实现可回滚的资金划转

TigerBeetle 两阶段转账 Ruby 实战指南:用 Pending/Post 实现可回滚的资金划转 【免费下载链接】tigerbeetle The financial transactions database designed for mission critical safety and performance. 项目地址: https://gitcode.com/GitHub_Trending/ti/ti…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞