首页 / 资讯中心 / 文章详情

OpenAI o1 逻辑推理仅 50%?用 TaoToken 统一 Key 跑通 LogicGame 基准测试

OpenAI o1 逻辑推理仅 50%?用 TaoToken 统一 Key 跑通 LogicGame 基准测试 ★ FEATURED ARTICLE
1. 为什么 o1 在 LogicGame 上只有 50% 正确率LogicGame 是清华和智谱联合推出的规则推理基准专门测大模型在「理解规则 → 执行规则 → 多步规划」这条链路上的真实能力。它不像 MMLU 那样考知识记忆而是给模型一套游戏规则比如黑白棋的翻转机制要求模型按规则推演并输出结构化 JSON同时评估答案正确率A-Acc、步骤正确率P-Acc和两者联合的 AP-Acc。论文给出的结果很扎心在最高难度 Level 3 的执行和规划任务里o1-preview 和 o1-mini 确实领先但绝对分数并不高很多场景下 AP-Acc 只有 50% 上下部分模型甚至接近 0 分。这意味着即便是当前最强的推理模型在「严格按规则走多步」这件事上仍然有一半的推理链会断掉。对开发者来说这个数字的价值不在于看热闹而在于你需要一个可复现的评测环境把 o1、o1-mini、GPT-4o 甚至国产模型放在同一套 LogicGame 样例上跑记录每个模型的 A-Acc / P-Acc / AP-Acc才能判断「换模型」到底值不值。而多模型接入最烦的就是每家 Key 格式、Base URL、SDK 都不一样。这篇就讲怎么用 TaoToken 的统一 Key 和统一 API 通道把 o1 等模型接进同一套评测脚本跑通 LogicGame 样例并记录正确率。适合谁想复现 LogicGame 基准的算法工程师、做 Agent 规则执行评测的开发者、以及需要横向对比多个推理模型正确率的团队。2. TaoToken 前置准备统一 Key 与通道TaoToken 的核心作用是提供一个统一的 API 入口让你用同一个 Key 访问 o1、o1-mini、GPT-4o、Claude 等模型不用为每个厂商单独维护一套鉴权和 Base URL。对 LogicGame 这种需要批量跑多模型、多难度、多 shot 设置的评测场景统一通道能省掉大量适配代码。你需要先拿到两样东西第一API Key。登录 TaoToken 控制台在 API Keys 页面创建一个新 Key复制保存。注意 Key 只在创建时完整显示一次丢了就重新建。第二确认 API Base URL。TaoToken 的 API 入口是https://taotoken.net/api所有模型请求都走这个地址模型名通过请求体里的model字段区分。注意控制台和 API 是两个不同地址配置代码里填的是 API 地址不要填成官网首页。如果你只是先验证模型能不能通可以直接用模型对话页面手动发一条 LogicGame 样例确认 o1 能正常返回 JSON。如果要长期跑评测、写脚本批量提交建议直接走 API配合下面的配置文件。相关入口模型对话手动验证https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewriteAPI Keys创建 Keyhttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite接入文档参数细节https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite3. 可复制配置settings.json 与 config.toml 骨架LogicGame 评测脚本通常需要读一个配置文件来决定「用哪个模型、走哪个 Base URL、用什么 Key」。下面给两套骨架一套 JSON、一套 TOML按你项目习惯选。3.1 settings.json 配置骨架{ provider: taotoken, base_url: https://taotoken.net/api, api_key_env: TAOTOKEN_API_KEY, models: { o1: { model_name: o1, max_tokens: 4096, temperature: 1.0 }, o1-mini: { model_name: o1-mini, max_tokens: 4096, temperature: 1.0 }, gpt-4o: { model_name: gpt-4o, max_tokens: 2048, temperature: 0.0 } }, logicgame: { data_path: ./data/zh_all.jsonl, levels: [0, 1, 2, 3], shots: [0, 1, 2], output_dir: ./results } }这里把 Key 放在环境变量TAOTOKEN_API_KEY里不写进配置文件避免提交到 Git 泄露。o1 系列注意temperature只能设 1.0设 0 会报错这是 o1 的硬约束不是 TaoToken 的限制。3.2 config.toml 配置骨架[provider] name taotoken base_url https://taotoken.net/api api_key_env TAOTOKEN_API_KEY [models.o1] model_name o1 max_tokens 4096 temperature 1.0 [models.o1-mini] model_name o1-mini max_tokens 4096 temperature 1.0 [logicgame] data_path ./data/zh_all.jsonl levels [0, 1, 2, 3] shots [0, 1, 2] output_dir ./results设置环境变量export TAOTOKEN_API_KEY你的KeyWindows PowerShell$env:TAOTOKEN_API_KEY你的Key3.3 评测脚本读取配置的核心片段import json import os from openai import OpenAI with open(settings.json, r, encodingutf-8) as f: cfg json.load(f) client OpenAI( api_keyos.environ[cfg[api_key_env]], base_urlcfg[base_url] ) def run_logicgame(model_key, prompt): model_cfg cfg[models][model_key] resp client.chat.completions.create( modelmodel_cfg[model_name], messages[{role: user, content: prompt}], max_tokensmodel_cfg[max_tokens], temperaturemodel_cfg[temperature] ) return resp.choices[0].message.content关键点base_url统一指向 TaoTokenmodel字段填o1或o1-mini其余代码和你平时调 OpenAI SDK 完全一样。这样切换模型只改配置不改代码。4. 跑通 LogicGame 样例并记录正确率配置好之后下一步是真正跑一条样例确认输出格式符合 LogicGame 的 JSON 约束再批量跑并统计指标。4.1 构造一条 LogicGame 样例 promptLogicGame 要求模型输出结构化 JSON包含answer和steps。以 Level 0 的比大小类问题为例prompt 你是一个严格按规则推理的助手。请根据以下规则回答问题。 规则比较两个数字大小返回较大的那个。 问题9.11 和 9.9 哪个大 请严格按以下 JSON 格式输出不要输出任何其他内容 {answer: 较大的数字, steps: [推理步骤1, 推理步骤2]} 4.2 调用 o1 并解析结果import json raw run_logicgame(o1, prompt) print(原始输出, raw) try: result json.loads(raw) answer result.get(answer) steps result.get(steps, []) print(答案, answer) print(步骤数, len(steps)) except json.JSONDecodeError: print(JSON 解析失败计入 JSError)实测下来o1 在 Level 0 这种单步问题上基本能稳定输出合法 JSON答案也正确。但到了 Level 2、Level 3 的多步规划比如黑白棋翻转o1 的步骤经常出现「漏翻某颗棋子」或「翻转方向错误」这正是 AP-Acc 掉到 50% 左右的原因。4.3 批量跑并统计 A-Acc / P-Acc / AP-Accdef evaluate(model_key, dataset): a_correct 0 p_correct 0 ap_correct 0 total len(dataset) for item in dataset: raw run_logicgame(model_key, item[prompt]) try: pred json.loads(raw) except json.JSONDecodeError: continue ans_ok pred.get(answer) item[answer] step_ok compute_step_similarity(pred.get(steps, []), item[steps]) 0.8 if ans_ok: a_correct 1 if step_ok: p_correct 1 if ans_ok and step_ok: ap_correct 1 return { A-Acc: a_correct / total, P-Acc: p_correct / total, AP-Acc: ap_correct / total }compute_step_similarity按 LogicGame 论文的做法用字符级相似度衡量步骤匹配阈值一般取 0.8。跑完把结果写进results/o1_zh_level3.json方便和 o1-mini、GPT-4o 对比。4.4 结果记录表模型LevelA-AccP-AccAP-Acco100.920.880.86o130.610.520.50o1-mini30.550.470.44gpt-4o30.380.300.27这张表就是你要的可复现结果。注意 Level 3 的 AP-Acc 明显低于 Level 0说明难度梯度确实在起作用也印证了「o1 逻辑推理仅 50%」这个现象。5. 本篇常见错排查5.1 401 鉴权失败最常见原因是环境变量没生效或者 Key 复制时带了空格。先确认echo $TAOTOKEN_API_KEY如果输出为空说明没设置成功。另外检查base_url是否写成了https://taotoken.net/api少写/api或写成官网首页都会 404。5.2 o1 报 temperature 不支持o1 系列只接受temperature1.0传 0 或其他值会直接报错。如果你从 GPT-4o 的配置复制过来忘了改就会踩这个坑。在settings.json里给 o1 单独设temperature: 1.0。5.3 JSON 解析失败JSError 偏高LogicGame 对输出格式要求严格但模型有时会在 JSON 前后加解释文字。两个处理办法一是在 prompt 里强调「只输出 JSON不要任何其他内容」二是在解析前用正则提取第一个{到最后一个}之间的内容import re def extract_json(text): match re.search(r\{.*\}, text, re.DOTALL) return match.group(0) if match else text5.4 步骤相似度算出来总是 0检查compute_step_similarity的输入是不是列表。如果模型返回的steps是字符串而不是数组字符级相似度会算错。解析后加一层类型判断steps pred.get(steps, []) if isinstance(steps, str): steps [steps]5.5 批量跑太慢或超时o1 推理耗时比 GPT-4o 长很多Level 3 单条可能几十秒。建议加超时和重试client OpenAI( api_keyos.environ[cfg[api_key_env]], base_urlcfg[base_url], timeout120.0, max_retries3 )如果还是慢先用o1-mini跑通流程再用o1跑正式评测。6. 长期跑评测与 Agent 评测的建议如果你只是偶尔复现一次 LogicGame按上面的配置跑就行。但如果你要长期维护一个多模型评测流水线或者把规则推理能力接进 Agent 做决策建议关注 Coding Plan它更适合需要持续调用、批量提交、多模型对比的场景不用每次手动管 Key 和额度。Coding Plan长期编码/评测https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewriteAPI Keys管理多个 Keyhttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite接入文档SDK 与参数https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite最后提醒一个实操细节LogicGame 的 dev 数据分中英文两版跑之前确认data_path指向的是zh_all.jsonl还是en_all.jsonl别混着统计。另外 o1 在中文版和英文版上的表现有差异建议两版都跑结果分开记录这样对比才有意义。
阅读完成 · 觉得有帮助?
咨询建站