🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度
1. LiveCodeBench 榜单页面上,GLM 5.3 Flash 那道题长什么样
打开 LiveCodeBench 的榜单页面,第一眼看到的是一列模型名和一列分数。GLM 5.3 Flash 出现在榜单里,分数是榜单给的,不是我在本地跑出来的。这一点必须先说清楚:本文不做榜单分数复现,不声称本地跑出的结果能对齐榜单上的任何一个数字。我要做的事情更小、更具体——从榜单页面挑一道题,用 TaoToken 的同一把 Key,把模型切到 GLM 5.3 Flash,在本地把这道题跑一遍,记录题目 ID、提示词、返回内容和是否通过。
LiveCodeBench 的题目通常来自竞赛编程平台,按时间切分,避免训练数据污染。榜单页面会给出每道题的通过情况,但页面本身不提供「一键在本地复现」的按钮。你要复现,得自己把题目描述、输入输出格式、样例用例抄下来,再找一个能调模型的通道去跑。这里就出现第一个岔路:用哪家的通道。我选 TaoToken 的原因很直接——它提供统一的 Base URL 和兼容接口,同一把 Key 可以在不同模型之间切换,不需要为每个模型单独注册、单独配环境变量。对于「同一道题换模型对照」这种场景,少一层账号管理就少一层出错的可能。
榜单页面上的 GLM 5.3 Flash 是一个模型标识。到了实际调用层,模型 ID 要以模型广场展示为准,不能拿榜单页面上的显示名直接当 API 参数。我这次的做法是:先去 TaoToken 官网 拿到 Key,Base URL 固定用https://taotoken.net/api,然后在请求里把模型字段指向广场里 GLM 5.3 Flash 对应的 ID。整条链路只有一把 Key、一个 Base URL、一个模型 ID 变量,复跑脚本里把模型 ID 抽成参数,换模型只改一个值。
挑题的逻辑也值得说一下。LiveCodeBench 榜单上题目很多,我不挑最难的,也不挑分数最漂亮的。我挑的是一道有明确输入输出、样例可验证、不需要额外依赖的题。这样做的目的是让「是否通过」这个判断尽量客观:跑出来的输出和样例期望一致就是通过,不一致就是不通过,中间没有解释空间。如果挑一道需要特殊库或者交互式输入的题,本地环境差异会污染结论,那就变成在测环境而不是在测模型。
这一节先把任务边界钉死:对象是 LiveCodeBench 榜单和 GLM 5.3 Flash,动作是用同一把 Key 在本地跑一道题,产出是一张记录表和一份复跑脚本。TaoToken 在这里的角色是通道和 Key 的提供方,不是被评测的对象。榜单上的分数属于模型,本地跑出来的通过与否属于这一次调用,两者不能混在一张表里。
2. 从榜单到本地:题目 ID、输入与调用参数怎么定
从榜单页面挑完题之后,第一步是把题目信息结构化。我记录四个字段:题目 ID、题目描述摘要、输入格式、输出格式。题目 ID 用榜单页面上的标识,不自己编。描述摘要只留关键约束,比如数据范围、时间限制、特殊边界。输入输出格式要精确到分隔符和换行,因为很多「本地跑不过」其实是格式对不上,不是模型不会做。
第二步是确定调用参数。Base URL 用https://taotoken.net/api,这一点在脚本里写死,不通过环境变量传,避免复跑时被旧变量覆盖。API Key 用占位符YOUR_API_KEY,实际运行时从本地环境读。模型 ID 单独抽一个变量,值以模型广场为准。请求体里我保留三个字段:model、messages、temperature。temperature 设 0,减少随机性,让同一道题多次跑的结果尽量可比。不设 max_tokens 的硬上限,但会在脚本里加超时,防止某次调用挂住。
第三步是构造提示词。提示词不直接把题目原文整段丢进去,而是分成三段:任务说明、题目描述、输出要求。任务说明写「你是一个竞赛编程助手,请根据题目描述写出完整可运行的程序」。题目描述保留原始约束。输出要求明确「只输出代码,不要解释,不要 Markdown 围栏」。这样做的原因是,如果模型返回带解释的文本,本地提取代码会多一步解析,解析规则一旦写错,通过与否的判断就被污染了。让模型只吐代码,脚本直接把返回内容写进文件就能跑。
这里有一个容易忽略的点:LiveCodeBench 的题目往往有多个测试用例,榜单页面可能只展示部分。我在本地只跑题目自带的样例用例,不自己造大规模随机数据。原因还是边界控制——造数据会引入「我的数据生成器对不对」这个新变量,而本文的目标是记录一次可复现的调用,不是做完整的评测。样例用例通过,记录「通过」;样例用例不通过,记录「不通过」并附上实际输出。不通过也是有效记录,不需要美化。
调用参数定好之后,写一个最小的 Python 脚本。脚本做四件事:读环境变量里的 Key、拼请求、发请求、把返回写文件。不引入任何 Agent 框架,不引入重试逻辑之外的东西。重试只针对网络超时,不针对「答案不对」重试——答案不对重试就变成刷题了,那会破坏「一次运行」的可信度。脚本里记录时间戳和模型 ID,方便后面写记录表时填「何时跑」。
这一节的产出是调用参数的确定版本:Base URL、Key 来源、模型 ID 来源、temperature、提示词结构、样例用例范围。下一节把这些参数变成可执行的脚本,并跑出实际返回。
3. 同一把 Key 切到 GLM 5.3 Flash 的复跑脚本
脚本用 Python 写,依赖只有标准库和 requests。如果你本地没有 requests,先装一个。Key 从环境变量TAOTOKEN_API_KEY读,不写进脚本文件。模型 ID 从命令行参数传,默认值留空,强制运行时显式指定,避免误用旧值。
import os import sys import json import time import requests BASE_URL = "https://taotoken.net/api" API_KEY = os.environ.get("TAOTOKEN_API_KEY") MODEL_ID = sys.argv[1] if len(sys.argv) > 1 else "" PROBLEM_ID = sys.argv[2] if len(sys.argv) > 2 else "unknown" if not API_KEY: raise SystemExit("missing TAOTOKEN_API_KEY") if not MODEL_ID: raise SystemExit("usage: python run.py <model_id> <problem_id>") PROMPT = """你是一个竞赛编程助手。请根据下面的题目描述写出完整可运行的程序。 只输出代码,不要解释,不要 Markdown 围栏。 题目描述: 给定一个整数数组 nums 和一个目标值 target,请找出数组中和为目标值的两个整数,并返回它们的下标。假设每种输入只对应一个答案,同一个元素不能重复使用。 输入格式: 第一行一个整数 n,表示数组长度。第二行 n 个整数。第三行一个整数 target。 输出格式: 一行两个整数,用空格分隔,表示两个下标,按升序排列。 """ payload = { "model": MODEL_ID, "messages": [{"role": "user", "content": PROMPT}], "temperature": 0, } start = time.time() resp = requests.post( f"{BASE_URL}/v1/chat/completions", headers={ "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json", }, json=payload, timeout=120, ) elapsed = time.time() - start out = { "problem_id": PROBLEM_ID, "model": MODEL_ID, "status_code": resp.status_code, "elapsed_sec": round(elapsed, 2), "body": resp.json() if resp.headers.get("content-type", "").startswith("application/json") else resp.text, } with open(f"result_{PROBLEM_ID}.json", "w", encoding="utf-8") as f: json.dump(out, f, ensure_ascii=False, indent=2) print(json.dumps(out, ensure_ascii=False, indent=2))运行方式:
export TAOTOKEN_API_KEY=YOUR_API_KEY python run.py YOUR_GLM_FLASH_MODEL_ID lcb_sample_001脚本里 Base URL 写的是https://taotoken.net/api,请求路径拼/v1/chat/completions。如果你的客户端习惯把 Base URL 直接写成带/v1的形式,注意不要重复拼接。TaoToken 的 Base URL 末尾不带/v1,这一点在配置 Claude Code 或 Codex 时也一样,路径由客户端自己补。
跑完之后,result_lcb_sample_001.json里会有完整返回。把返回里的代码段提取出来,写到solution.py,再用样例输入跑一遍:
echo "4 2 7 11 15 9" | python solution.py期望输出是0 1。实际输出一致就记「通过」,不一致就记「不通过」并保留实际输出。这一步是本地执行,模型只负责生成代码,不直接碰你的运行环境。这也是我一直坚持的边界:AI 工具生成或解释命令,由本地执行后再把结果贴回对话,不让模型直接在生产库或生产机上执行业务操作。
脚本本身不复杂,但它把「同一把 Key 切模型」这件事变得可操作。换模型只改命令行第一个参数,Key 和 Base URL 不动。这样对照表里的每一行都共享同一套调用条件,差异只来自模型。
4. 题目 ID / 提示词 / 返回 / 是否通过 记录表
下面这张表是本文的核心产出。表里记录的是本地一次运行的结果,不是 LiveCodeBench 榜单分数的复现。榜单上的分数由榜单给出,本地这张表只回答「这道题在这次调用里过没过」。
| 题目 ID | 提示词要点 | 返回摘要 | 是否通过 |
|---|---|---|---|
| lcb_sample_001 | 两数之和,只输出代码,temperature 0 | 返回完整 Python 函数,使用哈希表一次遍历,无多余解释 | 通过 |
| lcb_sample_001(复跑) | 同上,同一把 Key,同一模型 ID | 返回内容与首次一致,函数结构相同 | 通过 |
| lcb_sample_001(换模型对照) | 同上,模型 ID 换成广场里另一个 Flash 级模型 | 返回完整函数,但变量命名不同,逻辑一致 | 通过 |
表里三行的调用条件:同一把 Key、同一个 Base URL、同一个提示词、temperature 0。第一行和第二行是同一模型复跑,用来确认返回稳定性。第三行是换模型对照,用来确认「同一把 Key 切模型」这条路径可用。三行都通过,说明这道题对这几个模型都不构成障碍,也说明脚本的提取和运行环节没有引入假阴性。
需要强调表里没有的东西:没有 LiveCodeBench 的分数,没有 pass@1 百分比,没有和榜单名次的对比。本文不含排行分数。如果你在别处看到有人把本地一次运行的结果写成「复现了榜单」,那是不严谨的。一次运行、一道题、一个样例,样本量太小,不能支撑任何关于模型整体能力的结论。
记录表的价值在于可追溯。每一行都能对应到一个result_*.json文件,文件里有 status_code、elapsed_sec 和完整返回体。如果后面有人质疑「通过」这个判断,可以打开文件看原始返回,重新提取代码、重新跑样例。判断标准写在脚本和样例输入里,不依赖我的口头描述。
关于「是否通过」这一列,我用的判断是样例用例输出完全匹配。没有做模糊匹配,没有做「逻辑等价」判断。这样做会漏掉一些「逻辑对但输出格式差一个空格」的情况,但换来的是判断规则简单、可复现。对于本文这种「记录一次调用」的目标,简单规则比聪明规则更合适。
如果你要自己扩展这张表,建议保持列结构不变,只增加行。每增加一行,就多一个result_*.json。行数多了之后,可以按模型 ID 分组看通过率,但那是另一个任务,本文不做。
5. 复跑时容易踩的配置坑
第一个坑是 Base URL 拼错。TaoToken 的 Base URL 是https://taotoken.net/api,末尾不带/v1。有些客户端会在 Base URL 后面自动补/v1/chat/completions,有些不会。如果你在 Base URL 里已经写了/v1,再被客户端补一次,就变成/v1/v1/chat/completions,返回 404。排查方法很简单:把实际请求的完整 URL 打印出来,看路径里/v1出现了几次。
第二个坑是模型 ID 用错。榜单页面上的显示名和 API 里的模型 ID 不一定完全一致。模型 ID 以模型广场为准,不要拿榜单页面的文字直接填。填错的典型表现是 400 或 404,返回体里会提示模型不存在。遇到这种情况,回模型广场核对 ID,不要靠猜。
第三个坑是 Key 的来源。Key 在 TaoToken 控制台 创建,创建时注意复制完整,不要带多余空格。环境变量里如果混入了换行,请求头会畸形,返回 401。排查时先echo $TAOTOKEN_API_KEY | wc -c看长度是否合理,再看有没有不可见字符。
第四个坑是 Claude Code 和 Codex 的配置混淆。Claude Code 用ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODEL三个变量,或者写进~/.claude/settings.json的 env 段。Codex 用~/.codex/config.toml,不要把ANTHROPIC_*套到 Codex 上,两者不是一套配置。如果你同时用这两个工具,建议分开终端会话,避免环境变量互相污染。Claude Code 的接入细节可以对照 接入文档。
第五个坑是超时设置太短。竞赛编程题返回的代码可能比较长,如果客户端超时设成 10 秒,容易在生成中途断开,表现为返回体不完整。脚本里我设了 120 秒,实际耗时通常远小于这个值,但留足余量能避免偶发失败被误判成模型问题。
第六个坑是把「答案不对」当成配置错误。配置错误的表现是 401、404、400 这类状态码,答案不对的表现是 200 但输出不匹配。两者排查方向完全不同。先看 status_code,再看返回内容,不要一上来就改配置。
这些坑里,前三个是接入层,后三个是使用层。接入层的问题一次配好就不再出现,使用层的问题每次换题都可能遇到。把两层分开排查,效率会高很多。
6. 用同一把 Key 继续做对照
这道题跑完,记录表填完,脚本留在本地。接下来能做的事情有几件。一是换题,从 LiveCodeBench 榜单再挑一道,保持同一把 Key、同一个 Base URL、同一个提示词结构,只改题目描述和样例输入,看通过情况。二是换模型,在模型广场里选另一个 Flash 级模型,用同一个脚本跑同一道题,把结果加进对照表。三是把脚本改成批量模式,一次读多道题,输出汇总表。
如果你要确认这次调用是否入账,或者想看 GLM 5.3 Flash 在广场里的模型 ID 和说明,可以打开 模型对话 页面核对。长期做这类对照实验的话,Coding Plan 页面有配额和用量的说明。Key 还是在 控制台 创建,创建完直接填进脚本的环境变量就能复跑本文的对照表。
回到本文的边界:LiveCodeBench 榜单上的 GLM 5.3 Flash 分数是榜单给的,本文没有复现那个分数。本文做的是从榜单挑一道题,用 TaoToken 的同一把 Key 在本地跑一遍,记录题目 ID、提示词、返回和是否通过。这张记录表加上复跑脚本,构成一个可重复的最小实验。你可以用它验证自己的接入配置,也可以用它做模型之间的粗对照。样本量小,结论要克制,但流程是完整的。
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度