资讯动态

FastChat LLM Judge:MT-Bench 与 LLM-as-a-Judge 评测框架完全实战指南

发布时间:2026/9/6 17:45:30 来源:尧图企业网站定制
FastChat LLM JudgeMT-Bench 与 LLM-as-a-Judge 评测框架完全实战指南【免费下载链接】FastChatAn open platform for training, serving, and evaluating large language models. Release repo for Vicuna and Chatbot Arena.项目地址: https://gitcode.com/GitHub_Trending/fa/FastChat本文基于 FastChat 仓库中的 LLM Judge 文档 展开系统讲解如何使用 MT-bench 题库和 GPT-4 等强模型作为裁判LLM-as-a-judge来自动化评测对话模型包括环境安装、生成被评测模型的 80 道多轮开放式问题回答、以单答案打分或成对比较两种方式生成裁判判断、汇总展示分数以及使用 vLLM 等后端加速答案生成的完整流程。读完本文你可以直接复现 MT-bench 评测流水线并理解其底层的数据结构与判断解析实现。一、LLM-as-a-judge 与 MT-bench 的基本概念LLM Judge 是 FastChat 中的自动化评测包fastchat/llm_judge。其核心思想是用 GPT-4 这类强模型充当裁判对被评测模型的回答进行打分或两两比较从而免去大量人工标注。它对应的公开工作为Judging LLM-as-a-judge with MT-Bench and Chatbot ArenaarXiv:2306.05685MT-bench 即其中定义的评测基准。MT-bench 的题库定义在 question.jsonl共80 道双轮two-turn开放式问题。每行 JSON 包含question_id、category和turns字段例如{question_id: 81, category: writing, turns: [Compose an engaging travel blog post about a recent trip to Hawaii, ..., Rewrite your previous response. Start every sentence with the letter A.]}第二问通常要求模型改写、总结或约束重写第一问的回答因此可以考察模型的上下文跟随与指令控制能力。从源码 common.py 可以看到几个决定评测行为的关键设计按类别设置采样温度temperature_configcommon.py#L40-L50writing/roleplay用 0.7math/coding/extraction/reasoning用 0.0stem/humanities用 0.1未列出的类别默认 0.7。答案生成脚本 gen_model_answer.py 会依据题目类别自动套用该温度gen_model_answer.py#L99-L102。参考答案机制NEED_REF_CATS [math, reasoning, coding, arena-hard-200]common.py#L31。这些类别的题目在裁判时会额外注入 GPT-4 给出的参考答案存放在 reference_answer/gpt-4.jsonl让裁判对照参考答案判断正确性而不是仅凭表面流畅度打分。平局阈值TIE_DELTA 0.1common.py#L28用于在成对比较中判定两个分数是否算平局。二、安装git clone https://gitcode.com/GitHub_Trending/fa/FastChat.git cd FastChat pip install -e .[model_worker,llm_judge]从 pyproject.toml 可以确认llm_judge这个 extra 实际引入的依赖openai1、anthropic0.3、ray——分别用于调用 OpenAI/Claude API 以及答案生成的多 GPU 并行调度。三、查看预生成的模型答案与裁判结果仓库为一批主流模型提供了预生成的 MT-bench 答案和 GPT-4 判断结果。执行下载脚本python3 download_mt_bench_pregenerated.pydownload_mt_bench_pregenerated.py 中的filenames列表定义了要拉取的 31 份模型答案vicuna、llama-13b、alpaca-13b、claude-v1、gpt-3.5-turbo、gpt-4 等以及两份裁判结果gpt-4_single.jsonl与gpt-4_pair.jsonl落盘目录与后续评测输出目录完全一致data/mt_bench/model_answer/model.jsonldata/mt_bench/model_judgment/gpt-4_single.jsonl/gpt-4_pair.jsonl下载完成后用 QA Browser 在本地浏览python3 qa_browser.py --shareqa_browser.py 是一个 Gradio 应用可按题查看各模型的两轮回答及裁判解释。文档特别提示这套浏览工具之后也可以直接用来查看你自己跑出来的答案——因为自跑流程的输出路径与预生成数据完全相同。四、MT-bench 完整评测流程Step 1生成被评测模型的答案python gen_model_answer.py --model-path [MODEL-PATH] --model-id [MODEL-ID]例如python gen_model_answer.py --model-path lmsys/vicuna-7b-v1.5 --model-id vicuna-7b-v1.5[MODEL-PATH]权重路径可以是本地目录或 Hugging Face 仓库 ID[MODEL-ID]你给模型起的名字将作为输出文件名的唯一标识。答案保存到data/mt_bench/model_answer/[MODEL-ID].jsonl。注意 prompt 模板脚本内部通过get_conversation_template(model_id)为每个模型组装对话模板因此--model-id必须是模板注册表里已支持的名称否则模板不对会导致答案质量失真。支持的模型清单及如何为新模型注册模板见 model_support.md 中 How to support a new model 一节。文档额外提到的两个并行参数其含义可由 gen_model_answer.py 的参数解析确认--num-gpus-per-model单个模型占用的 GPU 数大模型如 65B 需要 1--num-gpus-total总 GPU 数。当num_gpus_total // num_gpus_per_model 1时脚本会用 Ray 把 80 道题切片到多个进程并行生成gen_model_answer.py#L275-L279。结合源码完整参数一览如下参数默认值说明--model-path必填权重路径本地目录或 HF 仓库 ID--model-id必填模型的自定义名称决定输出文件名与模板选择--bench-namemt_bench题库名对应data/bench/question.jsonl--question-begin/--question-end无调试用只跑题目区间的切片--answer-filedata/bench/model_answer/model-id.jsonl答案输出文件--max-new-token1024每题每轮最大生成 token 数--num-choices1每题生成的候选答案数--num-gpus-per-model1每模型 GPU 数模型并行--num-gpus-total1总 GPU 数数据并行启用 Ray--max-gpu-memory无每 GPU 上模型权重的最大显存--dtype无覆盖精度float32/float16/bfloat16--revisionmain加载的模型 revision实现细节上每题按torch.manual_seed(i)生成num_choices个候选逐轮追加对话、按模板的stop_token_ids/stop_str截断输出并以 JSONL 追加写入脚本结束前调用reorg_answer_file()按question_id排序并去重保证幂等可重跑。文档提示若答案生成太慢可跳到下文「使用 vLLM 等后端加速」一节通过推理引擎把吞吐提升约 20 倍。Step 2生成 GPT-4 裁判判断MT-bench 支持三种裁判模式MT-bench 官方推荐默认使用single单答案打分模式让 GPT-4 直接对模型每轮回答打 1–10 分最后对所有轮次取平均。export OPENAI_API_KEYXXXXXX # 设置 OpenAI API key python gen_judgment.py --model-list [LIST-OF-MODEL-ID] --parallel [num-concurrent-api-call]例如python gen_judgment.py --model-list vicuna-13b-v1.3 alpaca-13b llama-13b claude-v1 gpt-3.5-turbo gpt-4 --parallel 2判断结果保存到data/mt_bench/model_judgment/gpt-4_single.jsonl。结合 gen_judgment.py 的源码这一步的完整参数与内部机制如下参数默认值说明--modesingle取值single/pairwise-baseline/pairwise-all--judge-modelgpt-4裁判模型名--judge-filedata/judge_prompts.jsonl裁判 prompt 模板文件--baseline-modelgpt-3.5-turbopairwise-baseline 模式的对照模型--model-list无取答案目录下全部模型待评模型 ID 列表--parallel1并发 API 调用数ThreadPoolExecutor--first-n无调试用只评前 n 条--bench-namemt_bench题库名裁判 prompt 模板集。judge_prompts.jsonl 定义了 8 个模板按「单答/成对 × 通用/数学 × 单轮/双轮」组合单答类single-v1通用输出格式[[rating]]1–10 分、single-math-v1含参考答案、single-v1-multi-turn、single-math-v1-multi-turn成对类pair-v2、pair-math-v1、pair-v2-multi-turn、pair-math-v1-multi-turn输出格式[[A]]/[[B]]/[[C]]C 表示平局。gen_judgment.py中make_judge_single/make_judge_pairwise会一次性注册这四组 Judge运行时按题目类别与轮数路由math/reasoning/coding等NEED_REF_CATS类别走带参考答案的模板双轮题目走-multi-turn模板并只评估第二轮回答见 gen_judgment.py#L234-L289。成对比较的反位置偏差机制。在pairwise模式下common.py 的play_a_match_paircommon.py#L313-L360会对同一题调换 A/B 位置调用裁判两次g1 与 g2只有两次结论一致才记为胜负否则记为inconsistent。这从实现层面消除了先出现的答案占优的位置偏差。裁判调用的容错参数为API_MAX_RETRY 16、API_RETRY_SLEEP 10秒失败重试耗尽时输出标记$ERROR$common.py#L24-L26。分数解析使用正则[[(\d\.?\d*)]]含单括号备份模式提取[[rating]]。运行前的一致性检查。脚本在真正发起 API 调用前会check_data()确认每个模型对每道题都有答案、需要参考答案的裁判都具备对应参考数据并在打印 match 统计题目数、match 总数、输出路径后等待回车确认避免浪费 API 配额。其他两种裁判模式基于胜率的比较除了单答案打分还支持两种基于 win rate 的模式Option 2pairwise-baseline对照基线模型默认 gpt-3.5-turbopython gen_judgment.py --mode pairwise-baseline --model-list vicuna-13b-v1.3 alpaca-13b llama-13b --parallel 2判断保存到data/mt_bench/model_judgment/gpt-4_pair.jsonl然后python show_result.py --mode pairwise-baselineOption 3pairwise-all全部模型两两比较python gen_judgment.py --mode pairwise-all --model-list [LIST-OF-MODEL-ID] --parallel [num-concurrent-api-call] python show_result.py --mode pairwise-all当模型数量增多时该模式 API 开销更大但给出的比较信息也更全面每对模型都有直接对局数据。Step 3展示 MT-bench 分数# 展示指定模型的分数 python show_result.py --model-list vicuna-13b-v1.3 alpaca-13b llama-13b claude-v1 gpt-3.5-turbo gpt-4 # 展示所有模型的分数 python show_result.pyshow_result.py 的默认--mode single读取data/mt_bench/model_judgment/gpt-4_single.jsonl过滤掉score -1的解析失败记录后分三张表输出First turn第一轮平均分、Second turn第二轮平均分和Average两轮总分均值均按分数降序。pairwise 模式display_result_pairwise则统计每个模型的胜/负/平场次并计算win_rate_adjusted——每次平局按 0.5 胜 0.5 负计入show_result.py#L84-L89最终按该调整后的胜率排序。--input-file可覆盖默认判断文件路径--bench-name可指向其他题库如 vicuna_bench。如何获取 GPT-3.5 / GPT-4 / Claude 的答案要把 API 模型也纳入评测用 gen_api_answer.py 生成它们的答案python gen_api_answer.py --model [MODEL-NAME]该脚本对OPENAI_MODEL_LIST/ANTHROPIC_MODEL_LIST中的模型分别走 OpenAI 或 Anthropic 通道见 common.py 中的chat_completion_openai/chat_completion_anthropic温度选择优先级为--force-temperature 题目自带required_temperature 类别温度表 默认 0.7同样支持--parallel并发与--num-choices。答案落盘到data/mt_bench/model_answer/[MODEL-NAME].jsonl之后即可像本地模型一样参与 Step 2/3。使用 vLLM 等后端加速答案生成对 vLLM 支持的模型用推理引擎替代原生transformers生成可显著提速启动 vLLM workervllm serve [MODEL-PATH] --dtype auto[MODEL-PATH]同样是本地目录或 HF 仓库 ID。把 vLLM 的 OpenAI 兼容接口作为答案来源python gen_api_answer.py --model [MODEL-NAME] --openai-api-base http://localhost:8000/v1 --parallel 50其中[MODEL-NAME]是第 1 步中启动的模型名--parallel 50表示对 vLLM worker 的并发 API 调用数。对应实现即 gen_api_answer.py#L119-L120 中--openai-api-base对openai.api_base的重定向——同一套答案格式只是后端从本地推理换成了高吞吐推理服务。五、人-机裁判一致性验证仓库开源了3.3K 条人工标注6 个模型对 80 道 MT-bench 题目回答的人工判断对应数据集为lmsys/mt_bench_human_judgments。配套脚本 compute_agreement.py 可本地复算 GPT-4 成对裁判与人类标注的一致性python compute_agreement.py --judges gpt4-pair human --votefiles human_judgments.json gpt4_pair_judgments.json python compute_agreement.py --judges human human --votefiles human_judgments.json该脚本按(question_id, model_a, model_b)归一化游戏键模型名排序 平票翻转再统计裁判对之间的同意率。原论文报告的结论是GPT-4 裁判与人类的一致性超过 80%达到了人类与人类之间的一致性水平。六、相关数据集与引用与本包相关的两个公开数据集Hugging Facelmsys组织下Chatbot Arena Conversation Dataset真人对战的 Arena 对话数据MT-bench Human Annotation Dataset上文提到的 3.3K 条人工判断。若使用了本代码或数据集请按文档要求引用论文misc{zheng2023judging, title{Judging LLM-as-a-judge with MT-Bench and Chatbot Arena}, author{Lianmin Zheng and Wei-Lin Chiang and Ying Sheng and Siyuan Zhuang and Zhanghao Wu and Yonghao Zhuang and Zi Lin and Zhuohan Li and Dacheng Li and Eric. P Xing and Hao Zhang and Joseph E. Gonzalez and Ion Stoica}, year{2023}, eprint{2306.05685}, archivePrefix{arXiv}, primaryClass{cs.CL} }七、小结评测流水线的关键文件索引环节命令关键文件下载预生成数据python3 download_mt_bench_pregenerated.pydownload_mt_bench_pregenerated.py本地浏览答案python3 qa_browser.py --shareqa_browser.py生成模型答案python gen_model_answer.py ...gen_model_answer.py生成裁判判断python gen_judgment.py --mode ...gen_judgment.py展示分数python show_result.py ...show_result.py生成 API 模型答案python gen_api_answer.py ...gen_api_answer.py一致性计算python compute_agreement.py ...compute_agreement.py公共数据结构—common.py、judge_prompts.jsonl、question.jsonl整套流程的目录约定非常统一data/mt_bench/question.jsonl题库、data/mt_bench/model_answer/model.jsonl答案、data/mt_bench/model_judgment/gpt-4_{single,pair}.jsonl判断。只要按此约定产出文件各脚本即可互相衔接也方便把自定义题库换--bench-name接入同一套裁判与展示逻辑。【免费下载链接】FastChatAn open platform for training, serving, and evaluating large language models. Release repo for Vicuna and Chatbot Arena.项目地址: https://gitcode.com/GitHub_Trending/fa/FastChat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价