1. 当大模型遇上化学文献为什么“读得懂字”却“看不懂反应”RxnBench 是深势科技开源的一个多模态基准专门用来评测大模型从真实科研文献里理解化学反应的能力。它适合三类人做 AI for Science 的研究者、想验证多模态模型化学推理极限的工程师、以及正在搭建“AI 化学家”类 Agent 的开发者。它要回答的核心问题是——当模型面对 Nature Chemistry、JACS 这类顶刊里的反应图示、机理箭头和实验表格时到底能推理到什么程度。我先把结论摆出来RxnBench 把评测分成了两层。第一层是单图问答 SF-QA305 张有机反应图示、1525 个四选一 QA考的是模型对单张图的细粒度感知第二层是全文问答 FD-QA108 篇开放获取文献题目需要跨正文、图表、表格整合信息而且是不定项选择可以多选、单选甚至不选专门惩罚“瞎猜”。实测数据里SF-QA 上 Gemini-3-Flash-preview 能到 96.23%但结构识别这一类所有模型都掉到 74% 左右FD-QA 更狠目前没有模型超过 50%没有显式推理能力的模型普遍低于 20%。这意味着什么模型能提取事实、能读机理描述但一旦要求它把分子结构图像和文本逻辑对齐短板立刻暴露。你要做的不是感叹差距而是自己跑一遍看你的模型或你的 Agent 在哪个维度崩掉。下面我就按“拿到 Key → 配环境 → 跑评测 → 看结果 → 排错”的顺序把可复制的骨架交给你。2. 前置准备用 TaoToken 统一 Key 打通模型调用通道RxnBench 本身是评测框架它不绑定某一家模型。你要跑评测得先有一个能稳定调用多模态模型的通道。我试过直接对接各家 API光是 Key 管理和不同 SDK 的请求格式就够折腾半天。后来换成 TaoToken 的统一 Key一个 Key 走 OpenAI 兼容接口切换模型只改 model 字段评测脚本不用动。TaoToken 在这里的角色是“模型调用通道”不是替代你的评测逻辑。你仍然需要自己拉 RxnBench 数据集、自己写推理循环但它帮你把“调哪个模型、怎么鉴权、怎么计费”这件事收敛成一套配置。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 注意 API 地址不带 UTM 参数别拼错。你需要先做两件事第一在控制台创建一个 API Key第二确认你要评测的模型名。控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content Key 管理页在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。如果你只是想先验证模型能不能读懂一张反应图可以直接用模型对话页 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 手动传图试一次确认通道通了再写脚本。注意RxnBench 的 FD-QA 需要模型同时处理长文本和图像选模型时优先选支持多模态、上下文窗口足够大的版本。纯文本模型在 SF-QA 上就会直接失败。3. 可复制配置settings.json 与 config.toml 骨架RxnBench 的 GitHub 仓库里评测入口通常依赖配置文件来指定数据集路径、模型参数和输出目录。下面这套骨架是我按它的双层结构整理的你可以直接改成自己的路径。先看settings.json它负责运行时参数{ benchmark: { name: RxnBench, split: sf_qa, data_dir: ./data/RxnBench, image_dir: ./data/RxnBench/images, output_dir: ./runs/sf_qa }, model: { provider: openai_compatible, base_url: https://taotoken.net/api, api_key_env: TAOTOKEN_API_KEY, model_name: gemini-3-flash-preview, max_tokens: 2048, temperature: 0.0, timeout: 120 }, eval: { batch_size: 1, save_raw_response: true, resume: true } }几个关键点split在sf_qa和fd_qa之间切换temperature设 0 是为了可复现化学推理不需要随机性resume打开后中断了不用从头跑。api_key_env指向环境变量不要把 Key 写进文件。再看config.toml它更适合放数据集元信息和评测维度权重[dataset] name RxnBench version v1 source huggingface repo_id UniParser/RxnBench local_path ./data/RxnBench [dataset.sf_qa] num_images 305 num_questions 1525 question_types [ fact_extraction, reagent_role, mechanism, comparative_reasoning, structure_recognition, global_understanding ] [dataset.fd_qa] num_documents 108 allow_multi_select true allow_no_answer true [scoring] exact_match true partial_credit false report_by_dimension truereport_by_dimension一定要开否则你只看到一个总分不知道模型是结构识别崩了还是机理推理崩了。数据集从 HuggingFace 拉仓库地址是UniParser/RxnBench论文在 arXiv 2512.23565GitHub 在uni-parser/RxnBench。环境变量这样设export TAOTOKEN_API_KEY你的Key export RxnBench_DATA_DIR./data/RxnBench如果你用 Python 脚本直接调核心请求长这样import os, base64, requests def encode_image(path): with open(path, rb) as f: return base64.b64encode(f.read()).decode() url https://taotoken.net/api/v1/chat/completions headers { Authorization: fBearer {os.environ[TAOTOKEN_API_KEY]}, Content-Type: application/json } payload { model: gemini-3-flash-preview, temperature: 0, messages: [{ role: user, content: [ {type: text, text: 根据反应图示回答该步骤中催化剂的作用是什么A... B... C... D...}, {type: image_url, image_url: {url: fdata:image/png;base64,{encode_image(rxn_001.png)}}} ] }] } resp requests.post(url, headersheaders, jsonpayload, timeout120) print(resp.json()[choices][0][message][content])这段代码就是 SF-QA 单题推理的最小闭环。你把它套进循环遍历 1525 个 QA 对把回答和标准答案比对就能得到单图问答的准确率。4. 跑通一次评测从单图问答到全文问答的验证请求先跑 SF-QA因为它快、反馈直接。把上面脚本包成run_sf_qa.py读settings.json逐题请求结果写进runs/sf_qa/results.jsonl。跑 20 题左右就能看出模型有没有基本的多模态理解能力。如果前 20 题准确率低于 60%先别急着跑全量去排错章节看图像编码和 prompt 格式。成功的结果长这样{ qid: sf_qa_0042, type: mechanism, pred: B, gold: B, correct: true, raw: 该步骤中催化剂通过配位活化羰基... }跑完 SF-QA 后切split到fd_qa。FD-QA 的请求体不一样它要把整篇 PDF 的文本和关键图像一起送进去而且选项可能多选。你的 payload 里content数组会包含多个文本块和多张图prompt 要明确写“本题为不定项选择可选 0 到 4 个选项无正确答案时选 NONE”。这一步 token 消耗大建议先拿 5 篇文献试确认模型不会因为上下文超限直接报错。验证通道是否真的通了最省事的办法是去模型对话页手动传一张反应图问一个结构识别问题。如果那边能答对说明 Key、模型名、多模态能力都没问题脚本报错就纯是代码问题。模型对话入口在 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。如果你打算长期跑评测、甚至把 RxnBench 接进自己的 Agent 做持续评估那按次调 API 不如用 Coding Plan 包周期入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里面写了 OpenAI 兼容接口的完整参数。5. 本篇常见错排查图像、选项、超限与评分第一个坑是图像编码。RxnBench 的图是 PDF 里裁出来的有些是 CMYK 色彩空间直接 base64 送进去模型可能读不出。先用 PIL 转成 RGB 再编码from PIL import Image img Image.open(path).convert(RGB) img.save(tmp_path, formatPNG)第二个坑是选项格式。SF-QA 是四选一但 FD-QA 允许不选。如果你在 FD-QA 里还按单选解析准确率会虚高。评分脚本要区分allow_multi_select和allow_no_answer多选漏选都算错。第三个坑是上下文超限。FD-QA 一篇文献的文本加图像很容易超过 128k token。解决办法是只送与问题相关的页面或者用 Uni-Parser 先做版面分析把反应图示和对应段落抽出来再送。别硬塞整篇 PDF。第四个坑是模型名写错。TaoToken 的模型名要和控制台里列出的完全一致大小写、连字符都不能差。报 404 先查模型名报 401 查 Key报 429 查额度。第五个坑是评分维度丢失。如果你只统计总准确率会误以为模型“还行”。按question_types分组统计后你会发现结构识别类题目准确率明显低一截这才是 RxnBench 想让你看到的推理极限。提示跑全量前先用--limit 50跑子集确认流程通了再放开。FD-QA 单篇成本高别一上来就全量。6. 把评测接进你的 AI 化学家工作流跑通一次 RxnBench 只是起点。真正有用的是把它变成你模型迭代的回归测试每次换模型、改 prompt、加工具调用都跑一遍 SF-QA 和 FD-QA 的子集看结构识别和跨页推理这两个短板有没有改善。TaoToken 的统一 Key 让你可以在同一套脚本里切换不同模型做对比不用为每家写适配层。API Key 在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 管理接入细节看 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。如果你要搭的是长期运行的化学 AgentCoding Plan 的周期额度比按次调用更可控。先把 SF-QA 的 1525 题跑完拿到你当前模型的分维度报告再决定下一步是换模型还是补结构识别模块。