ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Qwen半成品刷爆AIME‘25满分,TaoToken统一API通道实测跑分全流程

2026/9/29 20:13:40 拓冰建站 浏览量
Qwen半成品刷爆AIME‘25满分,TaoToken统一API通道实测跑分全流程 1. 从一条刷屏消息说起Qwen 在 AIME25 上到底发生了什么如果你这两天刷技术社区大概率会看到一条消息Qwen 的推理模型在一个还处于早期预览阶段的版本上把 AIME25 这道高难度数学竞赛基准刷到了满分。AIME 是美国数学邀请赛题目以数论、组合、代数为主对推理链条的严谨性要求极高往年能稳定拿到高分的模型屈指可数。这次引发讨论的点在于官方自己都说这还是个半成品训练仍在继续但当前 checkpoint 已经能在 AIME25 和 HMMT25 上达到 100% 准确率。对做应用的人来说比谁第一更有价值的问题是我能不能自己搭一套跑分环境把这类数学推理题批量喂给模型然后自动校验答案答案是能而且门槛比想象中低。这篇就围绕这个目标展开——用统一的 API 通道调用 Qwen 系列模型写一个 Python 脚本把 AIME25 风格的题目批量推理、抽取答案、比对结果最后得到一份属于你自己的跑分报告。适合谁看想验证模型数学推理能力的开发者、需要给团队做模型选型对比的同学、以及单纯想动手跑一遍评测流程的爱好者。你不需要有评测框架经验只要会写基础 Python、能配环境变量就够了。下面所有代码都可以直接复制运行我会把每一步的输入、输出和可能踩的坑都写清楚。2. 前置准备用 TaoToken 统一 Key 打通模型调用在开始写跑分脚本之前先把调用通道理顺。评测场景有个很现实的需求你可能想同时对比 Qwen 的不同版本甚至横向对比其他模型如果每个模型都要单独注册、单独管理 Key、单独记不同的请求格式光配置就能耗掉半天。TaoToken 在这里的作用就是提供一个统一的 API 入口用一套 Key 和一套 OpenAI 兼容的请求格式去调用包括 Qwen 系列在内的多种模型。先拿到访问凭证。打开官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册登录后进入控制台。控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 在里面找到 API Keys 管理页新建一个 Key。这个 Key 就是后面脚本里要用的凭证建议不要硬编码进代码用环境变量管理。创建 Key 的页面在这里https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。点新建复制生成的字符串形如sk-xxxxxxxx。注意这个 Key 只在创建时完整显示一次关掉页面就看不到了先存到安全的地方。接口的 base URL 是https://taotoken.net/api注意这个地址不带任何查询参数。它兼容 OpenAI 的/v1/chat/completions规范所以你可以直接用 openai 官方 SDK也可以裸写 requests。模型名称方面Qwen 系列在平台上的标识建议在模型列表页确认通常形如qwen3-max或带 thinking 后缀的版本具体以控制台展示为准。配置环境变量Linux/macOS 下export TAOTOKEN_API_KEYsk-你的Key export TAOTOKEN_BASE_URLhttps://taotoken.net/apiWindows PowerShell$env:TAOTOKEN_API_KEYsk-你的Key $env:TAOTOKEN_BASE_URLhttps://taotoken.net/api如果你更习惯用.env文件配合 python-dotenv也可以但记得把.env加进.gitignore别把 Key 推到公开仓库。这一步做完通道就通了接下来写代码。3. 可复制配置Python 请求骨架与依赖安装先装依赖。跑分脚本需要发 HTTP 请求、解析 JSON、做答案比对用到的库不多pip install openai python-dotenv如果你不想用 openai SDK只用 requests 也行但 SDK 帮你处理了重试和流式解析省事。下面给出一个最小可用的请求封装放在qwen_client.py里import os from openai import OpenAI client OpenAI( api_keyos.environ[TAOTOKEN_API_KEY], base_urlos.environ.get(TAOTOKEN_BASE_URL, https://taotoken.net/api), ) def ask_qwen(prompt: str, model: str qwen3-max, temperature: float 0.0) - str: resp client.chat.completions.create( modelmodel, messages[ {role: system, content: 你是一个严谨的数学推理助手请逐步推理并在最后用 \\boxed{} 给出最终答案。}, {role: user, content: prompt}, ], temperaturetemperature, max_tokens4096, ) return resp.choices[0].message.content几个参数说明。temperature0.0是为了让评测结果可复现数学题不需要发散。max_tokens给到 4096因为推理模型会输出较长的思维链给太小会被截断导致答案抽取失败。system prompt 里要求用\boxed{}包裹最终答案是为了后面用正则稳定抽取这个约定很关键别省。模型名qwen3-max只是示例实际以你控制台里能选到的为准。如果平台提供了带 thinking 的版本评测数学题优先用它因为长链推理对 AIME 这类题帮助明显。你可以先跑一个单题测试确认通道和模型名都对from qwen_client import ask_qwen print(ask_qwen(求 1 到 100 的所有整数之和给出计算过程。))如果返回了带推理过程的文本说明配置成功。如果报 401检查 Key 是否复制完整如果报 404 或模型不存在检查模型名拼写。这一步通了再往下走。4. 批量推理与结果校验把 AIME25 跑成一份报告现在进入核心部分。AIME 的题目是填空题答案是 0 到 999 之间的整数这给自动校验带来了便利——我们只需要从模型输出里抽出那个整数和标准答案比对即可。先准备一份题目数据格式用 JSONL每行一个对象包含id、question、answer{id: aime25_01, question: 求所有实数α对于任一正整数n整数⌊α⌋⌊2α⌋…⌊nα⌋一定是n的倍数。, answer: 0} {id: aime25_02, question: 某数列满足 a_11, a_{n1}a_n2n求 a_{100}。, answer: 9901}真实评测时把题目替换成你手上的 AIME25 题目集即可。注意答案字段是整数方便比对。下面是批量推理脚本run_eval.pyimport json import re import time from qwen_client import ask_qwen def extract_boxed(text: str): m re.search(r\\boxed\{([^}]*)\}, text) if not m: return None raw m.group(1).strip() nums re.findall(r-?\d, raw) return int(nums[-1]) if nums else None def run(jsonl_path: str, model: str qwen3-max): results [] with open(jsonl_path, r, encodingutf-8) as f: items [json.loads(line) for line in f if line.strip()] for item in items: t0 time.time() try: output ask_qwen(item[question], modelmodel) pred extract_boxed(output) except Exception as e: output, pred fERROR: {e}, None elapsed round(time.time() - t0, 2) correct (pred item[answer]) results.append({ id: item[id], pred: pred, gold: item[answer], correct: correct, elapsed: elapsed, }) print(f{item[id]} pred{pred} gold{item[answer]} ok{correct} {elapsed}s) total len(results) acc sum(r[correct] for r in results) / total if total else 0 print(f\n准确率: {acc:.2%} ({sum(r[correct] for r in results)}/{total})) with open(eval_report.json, w, encodingutf-8) as f: json.dump({accuracy: acc, results: results}, f, ensure_asciiFalse, indent2) if __name__ __main__: run(aime25.jsonl)运行python run_eval.py预期输出类似aime25_01 pred0 gold0 okTrue 42.3s aime25_02 pred9901 gold9901 okTrue 38.7s 准确率: 100.00% (2/2)同时目录下会生成eval_report.json包含每题的预测值、标准答案、是否正确、耗时。这份报告就是你自己的跑分结果可以直接拿去做对比。实测下来推理模型单题耗时在几十秒量级题目多的话建议加并发但注意并发太高可能触发限流先从 2 到 3 并发试起。关于答案抽取这里有个细节模型有时会在推理过程中也写\boxed{}或者最终答案里带单位。我的做法是取最后一个\boxed{}匹配再从中抽最后一个整数。如果你的题目答案不是整数需要改extract_boxed的逻辑比如保留字符串做精确匹配。5. 本篇常见错排查跑的过程中容易遇到几类问题提前说清楚能省不少时间。第一类是 Key 和地址问题。报 401 通常是 Key 没读到检查环境变量名是否和代码里一致注意别多复制了空格。报连接错误则检查 base URL 是否写成了带/v1的完整路径——这里 base 只到https://taotoken.net/apiSDK 会自动补/v1/chat/completions你手动加/v1反而可能 404。第二类是答案抽取失败表现为predNone。原因一般是max_tokens太小思维链没输出完就被截断\boxed{}还没出现。把max_tokens调大或者检查 system prompt 是否真的要求了\boxed{}。还有一种情况是模型用了\boxed{9901.0}这种带小数的写法正则抽整数时要注意必要时先做类型归一化。第三类是超时和限流。推理模型单题几十秒很正常如果你的 HTTP 客户端默认超时是 30 秒会频繁报超时。在 OpenAI 客户端初始化时加上timeout120。限流的话报 429 就降低并发、加退避重试。第四类是结果不可复现。同一道题两次跑出不同答案多半是temperature没设成 0或者模型版本在两次调用之间发生了更新。评测时固定模型名和参数把每次的模型标识也记进报告里。6. 继续深入把跑分环境用起来一套能跑的评测脚本价值不止于复现一次满分新闻。你可以把它扩展成模型对比工具把model参数做成命令行入参同一份题目集分别跑 Qwen 的不同版本把eval_report.json汇总成表格准确率和平均耗时一目了然。想做长期编码或 Agent 类任务的同学可以了解下 Coding Plan地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 适合需要稳定调用额度的场景。如果只是想快速手动验证某道题不想写脚本直接用模型对话页面更省事https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite 。把题目粘进去看它怎么推理、答案对不对适合做抽样检查。接入细节和参数说明都在文档里https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 遇到请求格式问题先翻这里。最后留个实用建议评测题目集和标准答案一定要版本化管理最好连模型返回的原始文本也一起存档。因为数学题的答案抽取规则可能会随题目格式变化等你过两周想复现结果时有原始输出就能重新解析不用重新花钱跑一遍。这套流程跑顺之后换个题目集、换个模型就是一次新的评测成本很低。