资讯动态

ColossalAI ColossalEval GPT Evaluation 实战指南:用 GPT 作为评委对 LLM 进行自动打分与对战评估

发布时间:2026/9/6 17:40:27 来源:尧图企业网站定制
ColossalAI ColossalEval GPT Evaluation 实战指南用 GPT 作为评委对 LLM 进行自动打分与对战评估【免费下载链接】ColossalAIMaking large AI models cheaper, faster and more accessible项目地址: https://gitcode.com/GitHub_Trending/co/ColossalAI本篇指南基于 ColossalAI 官方应用 ColossalEval 中的 GPT Evaluation 文档与配套源码gpt_evaluate.py、evaluator.py、eval.py编写系统讲解如何用 GPT-3.5/GPT-4 对大语言模型进行三类评估两个模型的对战比较battle、基于预定义指标的自动打分、以及带参考答案reference的增强打分。读完本文你将掌握完整的评估数据格式、Prompt 模板设计、配置文件编写、命令行执行方式以及评分解析、断点续评与结果可视化的底层实现细节。一、功能概览三种 GPT 评估能力ColossalEval 的 GPT Evaluation 模块支持中英文双语评测场景提供三种功能对应源码中的两条主路径对战评估battle比较两个不同模型在同一组问题上的表现由 GPT-4 对每个答案对给出 1~10 分并统计胜率。入口为 Evaluator.battle()按预定义指标打分针对每个问题类别category配置若干评价指标metric由 GPT 模型按照 Prompt 中设计的评分步骤逐条打分1~5 分。入口为 Evaluator.evaluate()带参考答案的增强打分在指标打分的基础上把参考答案一并喂给 GPT让其对照参考再评分。通过命令行参数--gpt_with_reference开启前提是参考文件中包含target答案。从源码结构看整个评估由 evaluator.py 中的Evaluator类统一调度具体 API 调用、分数解析、统计与绘图逻辑集中在 gpt_evaluate.py。二、评估类别Evaluation Category与示例题评估流水线按类别组织考题每个类别考察不同的模型能力。你可以按自己的需求在示例题库基础上追加问题。评估类别能力考察Brainstorming头脑风暴按问题生成一系列有创意、多样化的想法考察创造力Chat多轮对话给定角色信息继续多轮对话考察上下文理解、记忆与前文角色保持Generation文本生成生成邮件、信件、文章等考察高质量、拟人化的文本生成能力Open QA开放问答在无上下文的情况下回答问题考察模型自身知识储备Roleplay角色扮演扮演给定角色并与用户有效互动考察情景代入与互动能力类别示例题各类型的中英文示例题存放在 eval_cn_examples.json 与 eval_en_examples.json。几类典型示例评估类别中文示例英文示例Brainstorming列举一些可以促进头发生长的食物。How do you properly chop an onion without crying?Chat基于角色信息新手小张与养鸡老手老李完成多轮对话最后补全小张的下一句Complete a dialogue based on the following character information新手作家 Alex 向成功作家 Emma 求教Generation请为一家咖啡店编写一篇简短的广告语吸引更多的顾客。Write a set of guidelines for first-time pet owners on how to properly care for a new puppy.Open QA解释什么是 RNA 病毒和 DNA 病毒。Explain the process of osmosis in biological systems.Roleplay把句子翻译成表情符号只允许回复表情符号中文提示用 {} 括起来I want you to act as a rapper创作一首关于发现内在力量的说唱歌词三、十项预定义评估指标MetricsGPT 评估使用预定义的评估指标不同类别配置不同的指标组合。每项指标包含两要素Prompt Words指标定义即评什么和CoTChain-of-Thought评分步骤即怎么评。GPT 根据 Prompt Words 和 CoT 对答案给出 1~5 分。全部中英文 Prompt 与 CoT 原文见 evaluation_prompt_cn.json 和 evaluation_prompt_en.json。指标Prompt Words指标定义中文CoT 评分步骤要点语言组织Language organization答案语言是否流畅、连贯使用正确的语法具有一定逻辑性使用恰当的连接词、过渡词等1-5 分6 步查语法/用词错误 → 检查逻辑自洽 → 确认与问题相关且信息清晰 → 检查句段间连贯过渡 → 检查结构层次 → 综合给出 1~5 分切题Relevance答案内容是否切题不答非所问并且严格遵照题目要求1-5 分4 步读题明确要回答什么 → 确认答案是否直接回应问题 → 检查是否满足答题方式、长度、格式等要求 → 综合打分创意性Creativity某些头脑风暴问题可能需要答案具有创意提出新的思路1-5 分4 步理解问题要点与背景 → 判断答案可行性不可行会拉低创意分→ 是否包含新颖想法或独特思路 → 按创意程度打分实用性Practicality某些头脑风暴问题可能需要答案提出实用的建议或解决方法1-5 分4 步理解问题要点与背景 → 判断答案可行性 → 检查建议是否实用可行看起来好但无法实现会扣分→ 按实用性打分正确性Correctness答案是否正确1-5 分2 步自己先尝试作答 → 用已知事实核验答案正确给 5 分部分正确给 2~4 分完全错误给 1 分自然Naturalness答案是否自然并且符合问题给定的身份1-5 分3 步确认题目提供的身份信息 → 检查答案内容是否符合该身份 → 按自然程度打 1~5 分参与感Engagingness答案是否对前面的对话内容做出恰当反应是否理解对话的语境和背景1-5 分3 步确定对话语境与背景 → 检查答案能否自然融入对话而不突兀 → 按参与感打 1~5 分合理性Reasonableness答案能否与前面的对话内容形成逻辑衔接是否符合常理、能否在该上下文中合理存在1-5 分3 步确定对话主题与期望回答方向 → 判断逻辑衔接与常理符合度 → 打 1~5 分多样性Diversity答案语言是否优美、有一定创造性和想象力同时保持合理适度、不过于夸张或离题1-5 分5 步理解回答内容与主题 → 注意措辞正确性与语言生动度 → 检查创造性与吸引力 → 检查是否夸张或离题 → 打 1~5 分保真度Fidelity答案能否严格遵守角色设定回答给定请求1-5 分4 步理解角色设定职业、背景、观点、性格→ 确认请求细节 → 对比回答与角色设定 → 打 1~5 分1 分完全不符5 分完全符合且满足请求从源码可以看到指标名的强约束在 gpt_evaluate.py 中若配置里指定的 metric 不存在于 Prompt 文件的metrics字段程序会直接抛出Unsupported metric ... You should add this metric in the prompt file!异常——即指标名必须先在 Prompt 文件中注册才能在配置文件中选用。四、数据格式Data Format评估输入是一个 JSON 文件包含一个列表每个元素对应一条指令/问题的预测记录字段定义如下categorystr必填指令/问题的类别instructionstr必填给 LLM 的指令/问题inputstr可选指令/问题的附加上下文如多轮对话前文outputstr可选模型的输出答案推理阶段由模型填充targetstr可选该指令的参考答案做 with-reference 评估时使用idint必填指令/问题的唯一编号也是 battle 模式下两个模型答案配对对齐的依据源码中逐条assert answer1[i][id] answer2[i][id]见 gpt_evaluate.py。示例记录[ { category: brainstorming, instruction: 请问如何制作一份美味的西红柿炒鸡蛋, input: , output: , target: , id: 1 }, { category: chat, instruction: 基于以下角色信息完成一段对话。小张是一名新手爱好者对养鸡有浓厚的兴趣。老李是一名有丰富经验的养鸡大师。, input: 小张您好老李我最近开始对养鸡感兴趣了想请教您一些问题。 老李你好小张我很乐意帮助你。你想问些什么 小张我想知道如何确定鸡的品种和性别 老李确切的品种可以通过鸡的外貌特征来确定而性别一般是通过鸡卵的大小和形状来判断。还有什么问题吗 小张, output: , target: , id: 2 } ]答案文件通常先由 ColossalEval 的分布式推理脚本 inference.py 生成基于 ColossalAI 的 TP/DP 切分按 rank 保存后再合并为{dataset}_inference_results.json其按类别组织的{category: {data: [...]}}结构正是 eval.py 读取答案与参考答案时的解析格式。五、Prompt 设计5.1 Battle Prompt对战提示词对战时把两个模型针对同一问题的答案填入模板由 GPT 打分。中英文示例分别位于 battle_prompt_cn.json 和 battle_prompt_en.json。中文模板结构如下{ id: 1, system_prompt: 你是一个检查回答质量的好助手。, prompt_template: [问题]\n{question}\n\n[1号AI助手的答案]\n{answer_1}\n\n[1号AI助手答案终止]\n\n[2号AI助手的答案]\n{answer_2}\n\n[2号AI助手答案终止]\n\n[要求]\n{prompt}\n\n, prompt: 我们需要你评价这两个AI助手回答的性能。\n请对他们的回答的有用性、相关性、准确性、详细程度进行评分。每个AI助手都会得到一个1到10分的总分分数越高表示整体表现越好。\n请首先输出一行该行只包含两个数值分别表示1号和2号AI助手的分数。这两个分数之间要有一个空格。在随后的一行中请对你的评价作出全面的解释避免任何潜在的偏见并确保AI助手回答的顺序不会影响您的判断。 }四个占位符的含义{question}为问题instruction与input拼接后的完整题干{answer_1}/{answer_2}为两个模型的output{prompt}为评分要求文本。模板还特别要求答案顺序不影响判断以抑制位置偏见。源码中对战固定调用 GPT-4、temperature0.2、最多 2048 tokens见 gpt_evaluate.py。5.2 Evaluation Prompt评估提示词评估模式下每个类别一个 Prompt需在metrics中定义指标、在CoT中提供每个指标的评分步骤。中文示例brainstorming 类别完整文件见 evaluation_prompt_cn.json{ brainstorming: { id: 1, category: brainstorming, metrics: { language organization: 语言组织(1-5)答案语言是否流畅、连贯使用正确的语法具有一定逻辑性使用恰当的连接词、过渡词等等。 }, CoT: { language organization: 1. 阅读答案并检查是否有语法错误、用词不当或其他显著的错误。\n2. 检查答案是否具有逻辑性能够按照合理的顺序传达信息并且能够自圆其说。\n3. 确定答案是否与问题或主题相关并且能够传达清晰的信息。\n4. 检查答案是否连贯是否使用适当的转换和过渡来保持句子和段落之间的连贯性。\n5. 检查答案是否具有明确的结构和组织方式使得读者可以轻松理解信息的层次和结构。\n6. 根据以上因素综合评估答案的语言组织并给出一个1到5的分数其中5表示语言组织非常好而1表示语言组织非常差。\n\n语言组织 }, prompt: 你是一个好助手。请你为下面头脑风暴问题的答案打分。\n\n问题如下\n\n{question}\n\n答案如下\n\n{answer}\n\n评分的指标如下\n\n{metric}\n\n请你遵照以下的评分步骤\n\n{steps} } }字段说明metrics该类别可用的指标集合决定配置文件中能选用哪些指标CoT每个指标对应的评分步骤。注意 CoT 结尾以指标名如语言组织收束——从源码看调用 Chat 模型时max_tokens1gpt_evaluate.py模型只需续写出紧随其后的那一个数字 token即可得到分数从而避免 GPT 输出冗长解释干扰解析若某类别在 Prompt 文件中没有对应条目Evaluator.evaluate() 会自动回退到general类别的通用 Prompt。六、配置文件Configuration配置文件控制流水线按哪些类别、用哪些指标评估。示例完整中文版见 config_cn.json{ language: cn, category: { brainstorming: { GPT: [ language organization, relevance, creativity, practicality, reasonableness ] }, chat: { GPT: [ language organization, naturalness, engagingness, fidelity ] }, generation: { GPT: [ language organization, relevance, diversity ] }, open_qa: { GPT: [ language organization, relevance, correctness ] }, roleplay: { GPT: [ language organization, relevance, fidelity, creativity ] } } }language评估所用语言。原写作时期文档说明目前仅支持中文cn但从当前源码看eval.py 中config[language] in [cn, en]且仓库同时提供了 config_en.jsoncn与en均已受支持category需要评估的类别集合可只保留自己要评的类别GPT该类别下用于 GPT 评估的指标名列表指标名必须与 Prompt 文件metrics中的 key 完全一致。七、运行评估Evaluate配置好文件后使用 examples/gpt_evaluation/eval.py配套脚本 eval.sh执行评估对战两个模型--answer_file_list与--model_name_list各给 2 个且必须同时提供--battle_prompt_file源码中会校验见 eval.py单模型指标评估两个列表长度均为 1必须提供--gpt_evaluation_prompt_file与--target_file参考答案文件程序按配置自动完成 GPT 指标评估。python eval.py \ --config_file path to the config file \ --battle_prompt_file path to the prompt file for battle \ --gpt_evaluation_prompt_file path to the prompt file for gpt evaluation \ --target_file path to the target answer file \ --answer_file_list path to the answer files of at most 2 models \ --model_name_list the names of at most 2 models \ --gpt_model which GPT model to use for evaluation \ --save_path path to save results \ --openai_key your openai key \完整参数依据 eval.py 的 argparse 定义参数必填默认值说明--config_file是无评估配置文件路径见第六节格式--battle_prompt_file对战时必填无Battle Prompt 文件路径--gpt_evaluation_prompt_file单模型评估时必填无GPT 评估 Prompt 文件路径--target_file单模型评估时需要无参考答案ground truth文件路径--answer_file_list是无1~2 个模型的答案文件路径--model_name_list是无1~2 个模型名与答案文件一一对应--gpt_model否gpt-3.5-turbo-16k可选值text-davinci-003、gpt-3.5-turbo、gpt-3.5-turbo-16k、gpt-4--gpt_with_reference否False是否引入参考答案参与评估需 target 文件含答案--save_path否results结果保存路径--openai_key是无OpenAI API Key会被写入环境变量OPENAI_API_KEY注意事项均有源码依据开启--gpt_with_reference时不能使用text-davinci-003必须用 Chat 类模型gpt-3.5-turbo / gpt-4否则 eval.py 直接报错带参考答案的评估走两轮对话第一轮是常规打分 Prompt第二轮由 reference_template() 动态拼出——对correctness指标追加标准答案如下其余指标追加一个优质的示例答案如下并要求 GPT 判断被测答案能否达到与参考同样水平的该指标请求参数上评估调用temperature0以保证打分确定性并对每次请求做time.sleep(len(metrics) * 0.5)限流保护gpt_evaluate.py。八、底层实现与结果输出8.1 对战流程与产物battle()使用 4 线程的ThreadPoolExecutor并发调用 GPT-4gpt_evaluate.py每条评估失败最多重试 3 次。分数解析函数 parse_battle_score() 依次尝试匹配X out of 10、a score of X、X/10三种表达最后退化为首行两个空格分隔的数值均失败则记为[-1, -1]invalid。对战结果保存在{save_path}/gpt_evaluate/battle_results/下save_battle_results(){模型1}_vs_{模型2}/子目录中{模型2}_better.json模型 2 胜出的条目、{模型2}_worse.json、{前缀}_tie.json、{前缀}_invalid.json、{前缀}_evaluations.json全量含分数汇总文件battle_results.json每个模型对记录better / worse / tie条数、win_rate胜率与双方平均score均按剔除 invalid 后的条数归一化。8.2 单模型评估打分、断点续评与统计evaluate()按类别把答案分批提交4 线程并发处理gpt_evaluate.py。两个值得注意的实现细节断点续评若该类别结果文件已存在只重试上次返回空结果的条目3 次重试仍失败的记 0 分全部成功则直接跳过gpt_evaluate.py适合大批量评估中断后恢复两种取分方式Chat 模型gpt-3.5-turbo / gpt-4从纯文本回复中提取单个数字calculate_scores_form_response()text-davinci-003走 Completion 接口取logprobs5按 G-Eval 论文arXiv:2303.16634的公式score Σ(score_i × exp(logprob_i))计算期望分数calculate_scores_form_logprobs()代价更高但分数更平滑。最终产物由 Evaluator.save() 组织gpt_evaluate/gpt_evaluate_results/evaluation_results/{模型名}/逐条评估原文与各类别/全量结果 JSONgpt_evaluate/gpt_evaluate_results/evaluation_statistics/{模型名}_evaluation_statistics.json每个类别 × 每个指标的avg_score、best_3最高 3 条的 id 及分数、worst_3gpt_evaluate/gpt_evaluate_results/evaluation_analyses/汇总 CSVgpt_evaluation_statistics.csv以及按类别生成的多模型柱状对比图{category}.pngseaborn barplot见 analyze_gpt_evaluation_statistics()。九、FAQ如何新增一个评估指标以在brainstorming类别中新增指标persuasiveness说服力为例只需两步在评估 Prompt 文件evaluation_prompt_cn.json / evaluation_prompt_en.json对应类别中为metrics和CoT增加同名字段。CoT 文本可以让 ChatGPT 帮忙生成{ brainstorming: { id: 1, category: brainstorming, metrics: { persuasiveness: persuasiveness(1-5)a short description for persuasiveness }, CoT: { persuasiveness: CoT for persuasiveness\n\npersuasiveness }, prompt: You are a good assistant. Please rate the given answer to the \brainstorming\ question below.\n\nThe question is as follows:\n\n{question}\n\nThe answer is as follows:\n\n{answer}\n\nThe metric for evaluation is as follows:\n\n{metric}\n\nYou should follow the following evaluation steps:\n\n{steps} } }在配置文件的category.brainstorming.GPT列表中加上persuasiveness重新运行eval.py即可生效。由于源码对指标名做了强校验若第 1 步漏做评估会直接抛异常提示补充 Prompt 文件。十、参考引用原文档给出本评估范式GPT-as-a-Judge / 对战比较的两个学术参考来源供延伸阅读misc{vicuna2023, title {Vicuna: An Open-Source Chatbot Impressing GPT-4 with 90\%* ChatGPT Quality}, author {Chiang, Wei-Lin and Li, Zhuohan and Lin, Zi and Sheng, Ying and Wu, Zhanghao and Zhang, Hao and Zheng, Lianmin and Zhuang, Siyuan and Zhuang, Yonghao and Gonzalez, Joseph E. and Stoica, Ion and Xing, Eric P.}, month {March}, year {2023} } misc{liu2023geval, title{G-Eval: NLG Evaluation using GPT-4 with Better Human Alignment}, author{Yang Liu and Dan Iter and Yichong Xu and Shuohang Wang and Ruochen Xu and Chenguang Zhu}, year{2023}, eprint{2303.16634}, archivePrefix{arXiv}, primaryClass{cs.CL} }其中 G-Eval 的 logprobs 期望分数公式在 calculate_scores_form_logprobs() 中有直接实现对战式两两比较Arena 风格则对应 Vicuna 工作。附相关文件索引文件作用GPT Evaluation.md本指南对应的原始文档gpt_evaluate.py评估核心实现API 调用、分数解析、统计与绘图evaluator.pyEvaluator调度类eval.py / eval.sh评估入口与示例命令inference.py分布式推理生成答案文件config_cn.json / config_en.json中英文评估配置battle_prompt_cn.json / battle_prompt_en.json对战 Promptevaluation_prompt_cn.json / evaluation_prompt_en.json指标 Prompt 与 CoT 原文eval_cn_examples.json / eval_en_examples.json各类别示例题库【免费下载链接】ColossalAIMaking large AI models cheaper, faster and more accessible项目地址: https://gitcode.com/GitHub_Trending/co/ColossalAI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

免费获取报价