资讯动态

AI算命评测数据集BaziQA分享:用TaoToken统一Key跑通DeepSeek与GPT基准测试

发布时间:2026/9/26 3:30:20 来源:尧图企业网站定制
1. 为什么我要复现 BaziQA 这套 AI 算命评测先说清楚 BaziQA 是什么。它是 AuraMate 灵伴团队开源的一套 AI 命理推理 benchmark题目来自全球算命师大赛 2021 到 2025 年的真题一共 200 道四选一选择题。每道题给一份排好的生辰八字问一个具体人生事件比如此人哪年结婚出生家境如何事业转折在何时而且都有标准答案。它适合谁适合想认真测模型推理能力、又不想停留在发个 prompt 截图说准到离谱的开发者。我关注它是因为它把算命这件玄乎的事变成了可量化的选择题。所有模型拿到的干支数据完全一样四柱、十神、大运流年都提前排好模型只负责推理这就排除了排盘差异带来的干扰。更关键的是它提出了 SRP也就是结构化推理协议引导模型按全局扫描→力量排序→事件推断的步骤走而不是跳步骤直接下结论。论文里 SRP 引擎在流年分析上能涨 8 到 10 个百分点学业推断最高涨 30 个百分点这个提升幅度值得自己动手验证一遍。问题来了复现要同时跑 DeepSeek 和 GPT 两个模型如果每家单独申请 Key、单独改 SDK、单独记 base_url光是环境切换就能耗掉半天。我试过用 TaoToken 的统一 Key 把两家收敛到一套配置里改一个 config.toml 就能切换模型评测脚本几乎不用动。下面把我跑通的完整流程写出来包括配置骨架、双模型接入、SRP 指标验证命令以及我踩过的几个坑。2. TaoToken 前置准备一个 Key 打通 DeepSeek 与 GPTTaoToken 在这里的角色是统一接入层。你不需要为 DeepSeek 和 GPT 分别维护两套鉴权逻辑只要拿到一个 Key把 base_url 指向它的 API 地址就能在同一个 OpenAI 兼容接口下调用不同模型。对 BaziQA 这种要横向对比多个模型的场景这一点省事很多。第一步是拿 Key。打开官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册后在控制台里创建 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 。创建时建议按项目命名比如 baziqa-eval方便后面区分额度消耗。第二步是确认你要用的模型名。BaziQA 论文里对比的是 DeepSeek-V3 和 GPT 系列你在 TaoToken 的模型列表里找到对应的标识符DeepSeek 侧一般用 deepseek-chat 这类名字GPT 侧用 gpt-4o 或 gpt-4o-mini 之类。具体以控制台模型页显示的为准别照抄我这里的字符串模型名会更新。第三步是环境变量。我习惯把 Key 放进环境变量而不是写死在代码里避免提交到 Git 时泄露export TAOTOKEN_API_KEYsk-你的key export TAOTOKEN_BASE_URLhttps://taotoken.net/api注意 base_url 这里不加任何 UTM 参数就是干净的 https://taotoken.net/api 。如果你用的是 OpenAI 官方 SDK它会自动在 base_url 后面拼 /chat/completions所以填到 /api 这一层就够了多填反而会 404。提示Key 只在创建时完整显示一次记得当场复制保存。丢了就重新建一个别去猜。3. 可复制配置config.toml 骨架与双模型接入BaziQA 的评测脚本通常需要一个配置文件来描述模型、温度、并发和数据集路径。我用 TOML 写了一份骨架你可以直接拿去改。核心思路是把 provider 抽象成同一个 base_url 不同 model 名这样切换模型只改一行。# config.toml —— BaziQA 双模型评测配置 [global] dataset_path ./data/baziqa_200.jsonl output_dir ./results max_tokens 1024 temperature 0.0 # 评测要可复现温度压到 0 concurrency 4 # 并发别开太高先跑通再提速 timeout 60 [provider.taotoken] base_url https://taotoken.net/api api_key ${TAOTOKEN_API_KEY} # 从环境变量读取 # DeepSeek 侧 [model.deepseek] provider taotoken name deepseek-chat enable_srp false # 先跑基线不开 SRP # GPT 侧 [model.gpt] provider taotoken name gpt-4o enable_srp false # SRP 实验组同一模型开结构化推理协议 [model.deepseek_srp] provider taotoken name deepseek-chat enable_srp true [model.gpt_srp] provider taotoken name gpt-4o enable_srp true这里有几个参数值得解释。temperature 设成 0.0 是为了让同一道题多次请求结果稳定评测最怕模型每次答得不一样。concurrency 我一开始设了 16结果触发限流报了一堆 429后来降到 4 才稳。enable_srp 是我自己加的开关用来对比开不开结构化推理协议的差异对应论文里 SRP 那组实验。接入代码用 OpenAI SDK 就行因为 TaoToken 是 OpenAI 兼容接口。下面这段是加载配置并构造 client 的最小示例import os import toml from openai import OpenAI cfg toml.load(config.toml) def build_client(model_key: str): m cfg[model][model_key] p cfg[provider][m[provider]] client OpenAI( base_urlp[base_url], api_keyos.environ[TAOTOKEN_API_KEY], ) return client, m[name] client, model_name build_client(deepseek) resp client.chat.completions.create( modelmodel_name, messages[{role: user, content: ping}], max_tokens8, temperature0.0, ) print(resp.choices[0].message.content)跑通这段说明 Key、base_url、模型名三者对上了。如果这里就报错先别往下走去第 5 节对号入座。4. 跑通 SRP 指标验证请求与成功结果BaziQA 的评测流程分两步先让模型对 200 道题逐题作答再统计准确率也就是 SRP 指标里说的命中率。SRP 本身是提示词层面的结构化协议不改变模型只改变提问方式。基线组直接把题目丢给模型SRP 组在题目外面包一层推理框架。先看基线请求长什么样。每道题从 jsonl 里读出来拼成 promptimport json def load_dataset(path): with open(path, r, encodingutf-8) as f: return [json.loads(line) for line in f] def build_prompt(item, enable_srpFalse): base ( f以下是已排好的四柱信息\n{item[bazi]}\n\n f问题{item[question]}\n f选项\nA. {item[options][A]}\nB. {item[options][B]}\n fC. {item[options][C]}\nD. {item[options][D]}\n 请只回答一个字母。 ) if not enable_srp: return base srp ( 请按以下步骤推理\n 第一步全局扫描先看日主强弱与整体格局。\n 第二步力量排序排出十神与大运流年的主次。\n 第三步事件推断结合问题定位最可能的选项。\n 推理完成后最后一行只输出字母。\n\n ) return srp base注意 SRP 组要求最后一行只输出字母这样解析答案时用正则抓最后一个 A/B/C/D 就行不用去解析整段推理。这一步很关键我第一版没约束输出格式模型洋洋洒洒写了一大段解析器直接崩了。批量跑评测的主循环import re from concurrent.futures import ThreadPoolExecutor def answer_one(client, model_name, item, enable_srp): prompt build_prompt(item, enable_srp) resp client.chat.completions.create( modelmodel_name, messages[{role: user, content: prompt}], max_tokens1024, temperature0.0, ) text resp.choices[0].message.content m re.findall(r[ABCD], text.strip()[-8:]) return m[-1] if m else X def run_eval(model_key, enable_srp): client, model_name build_client(model_key) data load_dataset(cfg[global][dataset_path]) with ThreadPoolExecutor(max_workerscfg[global][concurrency]) as ex: preds list(ex.map( lambda it: answer_one(client, model_name, it, enable_srp), data)) correct sum(1 for p, it in zip(preds, data) if p it[answer]) acc correct / len(data) print(f{model_key} SRP{enable_srp} 准确率{acc:.3f}) return acc跑起来大概是这样python eval.py --model deepseek --srp false python eval.py --model deepseek --srp true python eval.py --model gpt --srp false python eval.py --model gpt --srp true成功的结果会打印四行准确率。按论文的结论你应该能看到开 SRP 之后准确率有提升尤其是事件定位类题目。我实测下来基线组和 SRP 组的差距在流年类问题上最明显和论文里流年分析涨 8 到 10 个百分点的方向一致。具体数值会因为你选的模型版本、题目子集不同而有波动别拿我的数字当标准重点看趋势。如果你想先手动感受一下 SRP 提示词的效果可以打开模型对话页 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 把上面 build_prompt 生成的文本粘进去对比开不开 SRP 时模型的推理路径差异比看数字更直观。5. 本篇常见错排查报 401 Unauthorized。九成是 Key 没读到。检查环境变量名是否和 config.toml 里的 ${TAOTOKEN_API_KEY} 一致注意 shell 里 export 之后要新开终端或 source 一下。还有一种情况是 Key 复制时带了空格或换行粘进环境变量后变成非法字符。报 404 Not Found。通常是 base_url 写错了。正确写法是 https://taotoken.net/api 不要在后面加 /v1 或 /chat/completionsSDK 会自己拼。如果你从别处抄了带 /v1 的地址删掉。报 429 Too Many Requests。并发开太高。把 config.toml 里的 concurrency 从 16 降到 4 甚至 2或者加个重试退避。评测不是压测稳比快重要。模型名不存在。控制台模型列表里显示的名字才是准的别用记忆里的旧名字。DeepSeek 和 GPT 的标识符会随版本更新跑之前扫一眼模型页。解析答案全是 X。说明模型没按最后一行只输出字母来。两个办法一是把 max_tokens 调大防止推理被截断二是解析时放宽正则从整段文本里找最后一个独立出现的 A/B/C/D。我建议两个都做。准确率明显低于论文。先确认你跑的是不是同一批题目BaziQA 有年份子集2022 和 2025 的难度不一样。再确认 temperature 是不是 0非零温度会让结果抖动。最后确认 SRP 开关有没有真的生效打印一下实际发送的 prompt 看看。注意评测脚本里不要硬编码 Key也不要把 results 目录连同 Key 一起打包分享。用 .gitignore 把 config 里的敏感字段和输出目录排除掉。6. 把评测跑成日常接入文档与长期方案跑通一次不难难的是把 DeepSeek 和 GPT 的对比评测变成可重复的日常任务。我的做法是把 config.toml 里的模型组做成参数化每次新增一个模型只加一段 [model.xxx]评测脚本不用改。这样你以后想加别的模型进 BaziQA 对比成本很低。接入细节和参数说明可以查接入文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里面有 base_url、鉴权方式、错误码的完整说明排障时对着看比猜快。如果你要长期跑编码类或 Agent 类的评测任务额度消耗会比较集中可以了解下 Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 按套餐走比零散调用更可控。最后留一个我踩过的坑BaziQA 的题目里有不少需要长推理的max_tokens 设太小会把推理截断导致答案丢失。我一开始设 256准确率莫名其妙低了一截调到 1024 之后才恢复正常。你跑之前先把这一项检查一遍能省掉一轮无效对比。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑