ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

使用 PlotCraft 基准评测大模型的数据可视化能力:单轮生成与多轮精修实战指南

使用 PlotCraft 基准评测大模型的数据可视化能力:单轮生成与多轮精修实战指南 使用 PlotCraft 基准评测大模型的数据可视化能力单轮生成与多轮精修实战指南【免费下载链接】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-CoderPlotCraft 是 Qwen3-Coder 评测体系中用于衡量大模型LLM高级数据可视化能力的严格基准它以近 1000 个真实任务、48 种图表类型、双评测模式单轮生成 多轮精修系统检验模型从自然语言到可运行绘图代码的综合能力。本文将围绕qwencoder-eval/instruct/PlotCraft目录下的 README.md 展开结合仓库中的评测脚本、评分提示词与数据集准备工具完整讲解环境搭建、数据准备、API 配置、单轮/多轮评测的运行方式以及评测管线内部的代码执行、图像回传与评分原理帮助你直接复跑这一基准。PlotCraft 基准概览评测什么为什么难PlotCraft 是一个专门面向大模型高级数据可视化能力的评测基准benchmark定位是复杂且交互式的数据可视化模型不仅要读懂自然语言指令还要产出可独立执行的绘图代码最终生成符合要求的高质量图表。根据 README 的定义它有四个核心特征覆盖范围广共包含982 个任务覆盖48 种图表类型、8 大领域如金融 Finance、健康 Health、科研 Research 等。双评测模式它是第一个系统化同时评测以下两种能力的基准——单轮生成Single-Turn Generation根据初始请求从零绘制与多轮精修Multi-Turn Refinement在已有代码基础上迭代调试与增强。强调组合复杂度任务设计带组合式复杂度要求多面板multi-panel布局、组合多种图表类型以考验模型的空间推理与逻辑推理能力。贴近真实工作流任务基于真实世界数据集、纯文本零参考指令text-only不提供示例图从零构建模拟真实数据分析师的日常工作流。这些设计在评测脚本中有直接体现。例如 evaluate_single_turn.py 中的find_task_files会扫描数据目录下所有含task_*.md的目录并按难度筛选任务文件每个任务目录通常包含task_simple.md、task_middle.md、task_hard.md以及对应的多轮变体task_*_mul.md——即同一任务同时存在单轮与多轮两种评测形态。任务文件结构Category / Instruction / Files 三段式每个任务的核心是 Markdown 格式的任务文件其解析逻辑位于 evaluate_single_turn.py 的parse_task_file## Category任务所属类别例如 Finance、Health。## Instruction自然语言绘图指令是生成阶段送给模型的核心描述。## Files任务依赖的数据文件清单仅识别.csv与.xlsx结尾的文件名。随后prepare_task_info会在任务文件所在目录内递归查找深度上限 5 层对应的数据文件并用read_data_file对每个数据集做预览摘要默认读取前 10 行run 脚本中设置为 5 行摘要内容包括数据集名称、Shape、列名、各列数据类型以及前若干行数据。这段摘要连同 Category 与 Instruction 一起被拼接进用户提示词构成本文后面会讲到的生成请求。若任务缺少指令、缺少数据文件清单或找不到对应数据文件该任务会被跳过并在日志中提示也可用--diagnose输出详细诊断报告。环境安装与依赖清单README 给出的安装方式如下conda create -n plotcraftbench python3.13 conda activate plotcraftbench pip install -r requirements.txtrequirements.txt 中的依赖可分为四类类别依赖包用途核心fluxllm0.1.0、pandas2.0.0、numpy1.24.0、tqdm4.65.0、Pillow10.0.0API 客户端FluxOpenAIChat、数据处理、进度条、图像压缩编码绘图matplotlib3.7.0、seaborn0.12.0、plotly5.14.0、bokeh3.1.0、altair5.0.0、squarify0.4.3生成代码被实际执行时所需的绘图库含矩形树图 squarify科学计算scipy1.11.0、scikit-learn1.3.0、statsmodels0.14.0数据分析与统计建模Excel 支持openpyxl3.1.0、xlrd2.0.1读取.xlsx数据文件需要说明的是评测脚本在执行模型生成的代码时会在独立子进程中导入pandas、numpy、matplotlib、os并尝试导入seaborn导入失败则跳过因此以上绘图与计算库必须安装齐全否则即使模型生成的代码逻辑正确也会因缺库而执行失败。同时建议将matplotlib设置为Agg后端评测脚本在文件头部已通过matplotlib.use(Agg)指定避免在无显示环境下报错。数据集准备两种下载方式仓库中随附的是分卷压缩包data.zip与data.z01~data.z04。由于 GitHub 等平台对单文件大小有限制压缩包被拆分成多卷需要先合并再解压zip -F data.zip --out complete_data.zip unzip complete_data.zip -d data解压得到的data/目录即评测数据目录其中每个子目录对应一个任务/数据集且包含任务文件与download_url.json。方式一通过 Kaggle API 自动下载获取 Kaggle API 凭证登录 Kaggle 账户在 SettingsAccount 标签页中选择 Create New Token下载包含 API 凭证的kaggle.json。配置凭证位置Linux/macOS~/.kaggle/kaggle.jsonWindowsC:\Users\Windows-username\.kaggle\kaggle.json安装 Kaggle CLIpip install kaggle运行下载脚本python download_datasets.py data/download_datasets.py 的实现逻辑是遍历data/下每个子目录读取其中的download_url.json取url字段若 URL 是kaggle.com/datasets/链接则调用kaggle datasets download -d dataset_id -p 子目录下载 zip随后自动解压并把解压产物中所有.csv/.xlsx文件移动到该子目录根部——这与find_data_files的递归查找约定一致保证后续评测能定位到数据。方式二手动下载不使用 Kaggle 时可以依据各子目录下download_url.json中记录的 URL 手动下载数据然后把所有 CSV 和 XLSX 文件放到对应子目录的根目录下即可。快速开始配置 API 与运行评测配置 API 凭证运行评测前需要编辑 run_single_turn.sh 或 run_multi_turn.sh设置两个 API KeyAPI_KEY # Evaluation API key评测模型的密钥 API_KEY_GEN # Generation API key生成模型的密钥README 中生成与评测分别使用两个 Key这是为了让绘图代码生成与图表质量评审可以使用不同的 API 服务或账号。脚本中对应的还有GENERATION_BASE_URL与EVALUATION_BASE_URL默认留空若你的服务不是 OpenAI 兼容默认端点需要一并填写。运行单轮评测bash run_single_turn.sh model_name api_base_url第一个参数model_name是被评测的生成模型名第二个参数api_base_url是生成模型的 API 端点脚本内部GEN_URL$URL传给生成请求评测模型默认使用gemini-2.5-pro。run_single_turn.sh实际执行的命令为python -u evaluate_single_turn.py \ --mode both \ --generation_model_name $GENERATION_MODEL \ --evaluation_model_name $EVALUATION_MODEL \ --generation_base_url $GEN_URL \ --evaluation_base_url $EVALUATION_BASE_URL \ --generation_api_key $API_KEY_GEN \ --evaluation_api_key $API_KEY \ --data_dir data \ --results_dir results_single_turn \ --generation_prompt_path prompts/benchmark_generate_prompt.txt \ --evaluation_prompt_path prompts/eval.txt \ --max_data_rows 5 \ --timeout 120 \ --max_retries 20 \ --max_qps 20 \ --diagnose运行多轮评测bash run_multi_turn.sh model_name api_base_url与单轮唯一的路径差异是--results_dir results_multi_turn并调用 evaluate_multi_turn.py。多轮模式并非简单地让模型再写一次代码而是模拟真实的评审-修改闭环脚本会从任务目录的first_round_data/中读取第一轮的生成代码code_difficulty.py与评审意见comment_difficulty.json中的improvement_suggestions字段然后构造一段带历史的多轮对话见create_generation_request与create_second_round_user_prompt先以 assistant 身份回放第一轮代码再以 user 身份要求模型根据评审反馈精修代码。若没有找到历史数据则会退回通用改进提示。两种模式的运行结果分别保存到results_single_turn/与results_multi_turn/每个任务的子目录下包含生成的代码、原始响应、绘制的 PNG 图与打分 JSON。评测管线源码深挖从代码生成到图表评分两套评测脚本共享同一套核心流水线可归纳为四个阶段。下面以 evaluate_single_turn.py 为线索逐一拆解。阶段一生成请求构造create_generation_requestL238-L252把系统提示词默认来自prompts/benchmark_generate_prompt.txt即你是精通 matplotlib 与 seaborn 的 Python 数据可视化专家与用户提示词Category Instruction 数据集预览摘要组合为 messages并以max_tokens8192、temperature0.0调用 API——温度置 0 保证评测可复现。随后extract_python_code从响应中提取首个 python 代码块若没有则尝试提取普通代码块作为可执行代码。阶段二代码路径预处理与沙箱执行模型生成的代码中数据文件路径往往是相对路径直接执行会因工作目录不一致而失败。preprocess_code_pathsL272-L315通过正则把代码中出现的*.csv、*.xlsx、*.txt、*.json字符串字面量改写为基于任务数据目录的绝对路径。执行环节最值得关注的是超时沙箱机制execute_code_with_timeoutL377-L402把代码放进独立Process中执行默认超时 120 秒超时后依次terminate、kill强制结束并抛出ExecutionTimeoutError——这有效防止模型生成的死循环或内存泄漏拖垮整个评测进程。执行前还会对代码做存图兜底见execute_and_save_plotL405-L459若代码既没有plt.savefig也没有plt.show则自动追加plt.tight_layout() plt.savefig(..., dpi300, bbox_inchestight) plt.close()若有plt.show则替换为 savefig若有plt.savefig则重写其参数统一落到dpi300, bbox_inchestight的 PNG。这一步保证了只要代码能跑通就一定能产出用于评审的图表文件。阶段三图表压缩与视觉评审请求生成图表后compress_image_if_neededL462-L519会把 PNG 转成 RGB、必要时缩放到 JPEG 尺寸上限JPEG_MAX_DIMENSION65000以内并以 5MB 为压缩目标依次尝试quality[85,75,65,55,45,35,25]的质量阶梯再不行就按[0.8,0.6,0.4,0.2]缩放最终兜底quality10——这是为了把图片塞进视觉模型的 API 请求体。随后encode_image_to_base64将压缩结果编码为data:image/jpeg;base64,...或 PNG 格式。create_evaluation_requestL533-L561构造视觉评审请求用户消息包含文本任务 Category Instruction 请评审以下图表与图片base64 的图表评测系统提示词来自 prompts/eval.txt。只有代码成功执行且产出图表的任务才会进入评审阶段执行失败的任务直接记为全 0 分并写入结果。阶段四评分解析与统计汇总parse_evaluation_response依次尝试三种方式解析评测模型的 JSON 输出直接json.loads、提取 json 代码块、提取任意{...}片段全部失败则回退到create_empty_evaluation()的全 0 评分。save_score_result会把评测结果连同任务元数据难度、类别、指令、执行状态、原始响应等落盘为score_difficulty.json。最后generate_statistics汇总所有评分文件输出总体、按难度、按类别的统计指标任务合规平均分、图表质量平均分、代码生成率、代码执行率、出图率等并写入statistics.json。评分体系任务合规 图表质量双维度prompts/eval.txt 是评测阶段的裁判手册定义了严格的评分体系这与源码中create_empty_evaluation与calculate_overall_score的数据结构一一对应维度一任务合规Task Compliance0/1 二值评分满分 4 分布局合规Layout Compliance图表是否符合要求的布局规格如 1x1、2x2、2x3。图表类型合规Chart Type Compliance是否使用了指令指定的图表类型柱状图、折线图、散点图等。可视化需求达成Visualization Requirement Fulfillment是否实现了核心可视化目标如展示两个变量关系、呈现时间趋势。完整任务达成Complete Task Fulfillment指令中的所有要求是否全部完成。维度二图表质量Chart Quality0/1/2 三级评分满分 10 分清晰度/无重叠Clarity No Overlap子图、标题、轴标签、刻度、图例、文本框之间是否相互重叠。布局质量Layout Quality元素尺寸、间距、留白与整体视觉平衡。配色质量Color Quality配色和谐度、对比度、可区分性。文字清晰度Text Clarity轴标签、标题、刻度文字、图例、文本框内容的正确性。格式化与专业标准Formatting and Professional Standards是否达到发表级标准白底、细网格线、主次分明的排版层级、标题加粗等而非软件默认输出或花哨主题。改进建议improvement_suggestions评测输出还要求附带具体可执行的改进建议并规定多子图图表必须使用从 0 开始的(row, column)坐标指明位置如subplot (0, 0)表示左上角、subplot (1, 2)表示第二行第三列涵盖元素定位与间距、文字格式、配色、图例注释、布局层级五个方面——这些建议正是多轮评测中第二轮的输入形成生成 → 评审 → 精修的完整闭环。最终calculate_overall_scoreL611-L642把二值分与三级分聚合为四个核心指标任务合规总分0-4、图表质量总分0-10、任务合规通过率满分占比、图表质量满分率perfect rate。评测脚本完整参数说明两个评测脚本都通过 argparse 暴露了全部可调参数见 evaluate_single_turn.py#L1191-L1254参数默认值说明--modeboth运行阶段generate仅生成、evaluate仅评测、both完整流水线--data_dirdata数据目录路径--results_dirresults结果根目录run 脚本分别指定results_single_turn/results_multi_turn--difficulty全部指定难度simple/middle/hard--generation_model_namegpt-4o代码生成模型名--generation_base_urlOpenAI 默认生成 API 端点--generation_api_key环境变量生成 API Key未传时回退到OPENAI_API_KEY--evaluation_model_namegpt-4o评测模型名run 脚本使用gemini-2.5-pro--evaluation_base_urlOpenAI 默认评测 API 端点--evaluation_api_key环境变量评测 API Key--max_retries5API 最大重试次数run 脚本设为 20--max_qpm/--max_qps1000/20每分钟 / 每秒最大请求数限流--generation_prompt_pathprompts/generate_code_prompt.txt生成系统提示词run 脚本使用prompts/benchmark_generate_prompt.txt--evaluation_prompt_pathprompts/eval.txt评测系统提示词--max_data_rows10数据集预览最大行数run 脚本设为 5--timeout120代码执行超时秒--diagnose关闭诊断模式对被跳过的任务输出详细问题报告task_diagnosis.json请求调度通过fluxllm的FluxOpenAIChat完成支持重试、QPS/QPM 限流与JSONL 缓存生成与评测各自独立的 cache 文件存放在结果目录下——这意味着断点续跑时已缓存的请求不会重复消耗 API 额度。结果解读与适用前提评测结束后results_single_turn/或results_multi_turn/目录下每个任务会得到generated_code_difficulty.py模型生成的绘图代码原始未改写版本raw_response_difficulty.txt生成模型的完整原始响应generated_plot_difficulty.png实际执行并落盘的图表dpi300score_difficulty.json包含执行状态、评审 JSON、聚合分数与原始评审响应的完整记录statistics.json全量统计汇总总体 / 按难度 / 按类别并在终端打印代码生成率、代码执行率、出图率、任务合规均分、图表质量均分等指标。需要提醒几点适用前提一是本基准要求生成与评测两端都具备 OpenAI 兼容 API 服务且评测端必须是支持视觉输入的多模态模型二是执行环境需要完整的 Python 绘图/科学计算依赖栈三是data/目录必须按前述两种方式之一准备妥当否则find_task_files找不到任务、任务会被跳过。仓库中的 README.md、评测脚本、多轮评测脚本 与 评分提示词 提供了完整的第一手参考按本文步骤即可在 Qwen3-Coder 评测体系中复现 PlotCraft 的单轮与多轮可视化能力评测。【免费下载链接】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),仅供参考
返回列表