Shared Imagination 复现报 401?TaoToken 的 Base URL 别多带 /v1
复现 Shared Imagination 时QM 生成虚构选择题、AM 回答第一次请求就报 401八成不是模型问题而是 Base URL 写成了 TaoToken 官网或多了 /v1。先打开 TaoToken 官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 注册并创建 Key脚本里的 API 基址统一写 https://taotoken.net/api。这个实验原本是验证“大模型‘脑回路’统一了LLMs 竟然能正确回答其他模型虚构的题目”论文名为 Shared Imagination: LLMs Hallucinate Alike。复现时 QM 和 AM 往往跨模型家族涉及 Llama 3 70B、Mistral Large 2、GPT-4o 等条目每个请求都要走同一个 API 基址。一旦其中一个 client 的 base_url 写成官网或者末尾多写 /v1就会出现 401、404 或 invalid url。更隐蔽的是 Key 不是从 TaoToken 控制台创建环境变量又互相覆盖最后看起来像模型不支持其实是地址和 Key 的问题。下面按排障顺序把 QM/AM 两路调用配通再继续跑原文的 8840 个虚构问题。1. Shared Imagination 复现 401先分清官网地址和 API 基址原实验的流程不复杂问题模型 QM 先围绕某个学科生成一个虚构选择题并给出正确答案回答模型 AM 收到题干和选项后只输出选项字母最后比较 AM 答案和 QM 给出的正确答案。原文覆盖 17 个大学学科包括数学、计算机、物理、化学、生物、地理、社会学、心理学、经济学、法律、历史、文学、哲学等每个 QM 每主题生成 20 个直接问题和 20 个上下文问题合计 8840 个虚构问题。直接问题平均正确率约 54%上下文问题平均约 86%个别模型对能到 96%。这些数字能不能复现出来第一步不是 prompt而是请求有没有打到正确的 API 基址。复现脚本里最容易混的两个地址是官网地址https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 这是注册、登录、创建 Key、看模型广场的地方不是 OpenAI SDK 的 base_url。API 基址https://taotoken.net/api 这是脚本、curl、Claude Code 等调用时填的地址末尾不要加 /v1也不要带 UTM 查询参数。很多人看到 OpenAI SDK 的 base_url 习惯写https://api.openai.com/v1于是顺手写成https://taotoken.net/api/v1。多出来的/v1会让实际请求路径变错常见结果是 404有时也会被网关返回 401。另一种情况是把官网链接整段复制进脚本连?utm_source...都带上SDK 拼路径后请求打到网页路由同样报 401 或返回 HTML。适用场景很明确QM/AM 多模型对打、Shared Imagination 论文复现、LLM 虚构问答批量生成、同家族与跨家族正确率对比。只要脚本里同时出现两个以上模型 ID就要检查每个 client 是否共用同一个正确的 API 基址。2. 在 TaoToken 创建 Key并从模型广场取 QM/AM 模型 ID先打开官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 完成注册进入控制台创建 API Key。Key 生成后直接保存为环境变量不要写死在提交到仓库的脚本里。然后进入模型广场按你的复现计划分别确认 QM 和 AM 要用的模型 ID。原文涉及 Llama 3 70B、Mistral Large 2、GPT-4o 等模型家族但脚本里填的必须是 TaoToken 模型广场展示的模型 ID不要照抄文章里的展示名。建议准备两个变量export TAOTOKEN_API_KEYYOUR_API_KEY export TAOTOKEN_BASE_URLhttps://taotoken.net/api export QM_MODEL_ID从模型广场复制的问题模型 ID export AM_MODEL_ID从模型广场复制的回答模型 ID这里再次强调TAOTOKEN_BASE_URL填https://taotoken.net/api不要填官网不要加/v1不要加 UTM。Key 只从 TaoToken 控制台创建遇到 401 先查 Key 来源再查 Base URL。3. 可复制的 Python QM/AM 调用配置Base URL 不带 /v1Python 侧用 OpenAI 兼容 SDK 即可。关键是 base_url 参数只写 API 基址模型 ID 从环境变量读取。下面是最小可跑版本import os from openai import OpenAI client OpenAI( api_keyos.environ[TAOTOKEN_API_KEY], base_urlos.environ[TAOTOKEN_BASE_URL], # https://taotoken.net/api ) def call_model(model_id: str, prompt: str, temperature: float) - str: resp client.chat.completions.create( modelmodel_id, messages[ {role: system, content: 你是一个严格按格式输出的模型。}, {role: user, content: prompt}, ], temperaturetemperature, ) return resp.choices[0].message.content qm_prompt 你是问题模型(QM)。请围绕“化学”生成一个虚构的选择题。 要求 1. 题干不超过 80 字 2. 给出 A、B、C、D 四个选项 3. 明确指出正确答案字母 4. 只输出 JSON不要解释。 .strip() qm_output call_model( model_idos.environ[QM_MODEL_ID], promptqm_prompt, temperature1.0, ) am_prompt f 你是回答模型(AM)。请阅读下面的虚构选择题只输出选项字母。 题目 {qm_output} .strip() am_output call_model( model_idos.environ[AM_MODEL_ID], promptam_prompt, temperature0.0, ) print(QM 输出) print(qm_output) print(AM 输出) print(am_output)如果 QM 输出 JSON可以用json.loads解析如果模型偶尔带 markdown 代码块先做字符串清洗。选项顺序实验要注意原文会打乱选项再给 AM所以你需要在本地保存打乱映射把 AM 返回的字母还原回 QM 的正确答案。这个映射错误不会报 401但会让正确率看起来异常。如果你还想在本地用 Claude Code 跑辅助脚本settings.json里的 Base URL 同样遵守这条规则。字段名以接入文档为准核心是不要带/v1{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: YOUR_API_KEY, ANTHROPIC_MODEL: 从模型广场复制的模型 ID } }注意 Codex 的config.toml不要套用ANTHROPIC_*变量不同工具分开配置。4. 验证一次请求从虚构选择题到 AM 回答闭环先不要直接跑 8840 个问题。用 curl 验证单个模型是否能通curl -sS $TAOTOKEN_BASE_URL/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d {\model\:\$QM_MODEL_ID\,\messages\:[{\role\:\user\,\content\:\围绕物理生成一个虚构选择题给出 A-D 四个选项和正确答案只输出 JSON。\}],\temperature\:1}如果TAOTOKEN_BASE_URL是https://taotoken.net/api实际请求就是https://taotoken.net/api/chat/completions。返回体里出现choices[0].message.content说明基址和 Key 已经通了。然后再把 Python 脚本里的 QM/AM 两个模型 ID 都跑一遍确认两个模型都返回 200最后合并成 QM 出题、AM 答题的最小闭环。成功时你会看到类似结构QM 返回一个虚构题干和四个选项AM 只返回 A/B/C/D 其中一个字母。若 AM 返回解释或拒答检查 temperature 是否设为 0以及提示词是否明确要求“只输出选项字母”。原文中 Claude 系列在某些设置下拒答更明显上下文问题会把回答率拉高这些属于模型行为不是 401。5. 401、/v1 与多模型混用排查清单这一节按报错现象逐项查不要一上来改 prompt。第一401 先看 Key。报错体里如果是invalid api key、unauthorized或missing api key依次检查Key 是否来自 TaoToken 控制台而不是从别处复制的旧 Key环境变量是否为空例如echo $TAOTOKEN_API_KEY是否输出YOUR_API_KEY还是空脚本里是否存在两个 Key 变量一个正确一个错误例如OPENAI_API_KEY和TAOTOKEN_API_KEY混用.env文件是否被 shell 里的旧变量覆盖必要时在 Python 里打印os.environ.get(TAOTOKEN_API_KEY)的前几位确认请求头是否写成Authorization: Bearer YOUR_API_KEY不要少了 Bearer也不要在 Key 前后加引号或空格。第二401 或 404 看 Base URL。最常见的是把官网写进脚本错误https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end错误https://taotoken.net错误https://taotoken.net/api/v1正确https://taotoken.net/api官网前面是给人看的页面API 基址后面才是给 SDK 拼接的路径。多带/v1后SDK 可能请求/api/v1/chat/completions而约定路径是/api/chat/completions。带 UTM 参数更隐蔽查询字符串会被保留路径拼接异常错误信息有时不是 404而是网关拒绝后的 401。第三QM 通了 AM 不通。多模型复现里QM 和 AM 经常分别初始化两个 client。检查两个 client 是否都用了同一个TAOTOKEN_BASE_URL。更稳的写法是只初始化一个 client调用时只替换model参数。这样 Base URL 和 Key 不会出现“一个对一个错”。第四模型 ID 报 not found。这个不是 401而是模型名不对。不要把文章里的展示名直接填进去要去模型广场复制当前可用 ID。QM 和 AM 可以是同一个模型也可以是同家族或跨家族模型原文的同家族相似性实验就是通过排列组合 QM/AM 来比较正确率。第五选项顺序映射错。原文在把问题交给 AM 之前会打乱选项所以 AM 返回的 A 不一定等于 QM 原始答案 A。你的脚本要保存shuffle_map例如 AM 选择 A原题正确项在 C则判分要按映射还原。这个错误不会抛 401但会让 8840 个问题的统计结果完全跑偏。第六并发和限流。全量跑 8840 个问题会产生大量请求。如果看到 429不要当成 401 去改 Key加并发上限、指数退避和断点续跑。建议先跑 17 个学科各 1 题确认 QM/AM 都稳定再扩大批量。6. 配通后继续跑 8840 个虚构问题与 CTA当 curl 和 Python 最小闭环都返回 200就可以按原文设置继续扩展QM 温度设为 1保留出题随机性AM 温度设为 0让答案选择更稳定。按 17 个学科、每个 QM 每主题 20 个直接问题和 20 个上下文问题组织数据落盘为 JSONL。每条记录建议包括qm_model、am_model、subject、question_type、question、options、correct_answer、am_answer、is_correct、request_id和raw_response。这样后面统计直接问题 54% 左右、上下文问题 86% 左右的差异时才能快速定位是模型行为还是脚本映射问题。刚才的 curl 已经返回 200 后先去控制台 API Keys 页确认这把 Key 的状态和可用范围https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentshared-imagination-401utm_campaignrewrite 。如果还要在本地用 Claude Code 跑 QM/AM 批处理按接入文档把settings.json的ANTHROPIC_BASE_URL写成https://taotoken.net/api不要加/v1https://taotoken.net/doc/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentshared-imagination-401utm_campaignrewrite 。如果你准备把 8840 个虚构问题拆成多轮长任务再看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentshared-imagination-401utm_campaignrewrite 。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →