1. 先把场景说清楚:GPT-6 出参考图、Rodin 出 35 个模型、BANG 拆零件
如果你正在用 GPT-6 画参考图并顺手生成交互代码,同时又把 Hyper3D Rodin 的 MCP 接进工作流,最容易卡住的往往不是提示词,而是两个工具各用一把 Key、各配一套 Base URL:GPT-6 侧刚调通,Rodin 建模侧又报 401;Claude Code 里明明能跑,切到 Codex 或 MCP 客户端就 404。这个实操场景来自一条很具体的链路:先让 GPT-6 产出角色与场景参考图,再由 Rodin 生成 35 个精细建模,接着用 BANG 按结构把模型拆成独立零件,做出零件级动画,最后拼成可逛、可交互的 3D 个人作品集网页。要让整条链路只维护一把 Key,可以先在 TaoToken 官网领取:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=gpt6_rodin_start ,再把所有工具侧的 Base URL 统一写成 https://taotoken.net/api 。
这件事的价值不在于“又接了一个模型”,而在于把 Token 消耗方拆清楚:GPT-6 是文本与图像理解、代码生成侧的消耗方,Rodin 是 3D 生成侧的消耗方;两边如果共用同一个网关和同一把 Key,你才能在一个控制台里看请求地址、耗时、错误码和用量。下面我会按可跟做的顺序,把 Key 获取、Claude Code、Codex、CC Switch、Rodin MCP、请求地址与耗时对照、BANG 拆件、网页交互和排错清单全部写清楚。文中所有 SQL、构建命令、迁移命令都由你在本地终端执行,不要让 MCP 或 Agent 直连 Oracle、生产库或线上缓存。
2. 拿一把 TaoToken Key:官网、API Keys 与 Base URL 的对应关系
第一步不是改代码,而是把“Key、Base URL、端点格式”三件事对齐。进入 TaoToken 官网:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=gpt6_rodin_mid ,完成登录后进入控制台,创建一把用于本地开发的 API Key。不要把它写进前端代码,也不要提交到 Git;本文所有示例统一用占位符YOUR_API_KEY。
创建完成后,你至少确认三件事:
- Key 字符串是否完整,是否包含前缀,是否被聊天软件自动加了空格。
- Base URL 是否写成
https://taotoken.net/api,不要在后面拼 UTM 参数,也不要随手加/v1或删/api。 - 模型名是否从控制台的模型对话或模型列表里复制。模型名写错时,常见表现不是 401,而是 400 或 404。
可以把 Key 放进本地环境变量,而不是硬编码:
# 本地开发环境,写入 shell 配置或临时 export export TAOTOKEN_API_KEY="YOUR_API_KEY" export TAOTOKEN_BASE_URL="https://taotoken.net/api" # 验证变量是否生效,不要把 Key 打印到日志 test -n "$TAOTOKEN_API_KEY" && echo "TAOTOKEN_API_KEY is set"如果你使用 Claude Code,还需要 Anthropic 兼容变量;如果你使用 Codex,则应该走 Codex 自己的config.toml和TAOTOKEN_API_KEY。这两套不要混抄,后面会分别给出配置。
3. Claude Code 侧配置:settings.json、ANTHROPIC_* 与 CC Switch 三件套
Claude Code 读的是 Anthropic 兼容配置。最稳的做法是全局settings.json打底,项目级settings.local.json覆盖,再用 shell 环境变量做临时切换,这就是常说的 CC Switch 三件套思路。注意:Claude Code 可以用ANTHROPIC_*,但 Codex 不要套这套变量。
先写全局配置,路径通常是~/.claude/settings.json:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_API_KEY": "YOUR_API_KEY", "ANTHROPIC_MODEL": "从模型对话页复制可用模型名", "ANTHROPIC_SMALL_FAST_MODEL": "从模型对话页复制轻量模型名" } }再写项目级覆盖,路径是<你的项目>/.claude/settings.local.json:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_API_KEY": "YOUR_API_KEY" } }第三件套是启动环境。你可以在~/.zshrc或~/.bashrc里写入同样的变量,但建议只在当前终端临时 export,避免把 Key 永久写进配置文件:
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="YOUR_API_KEY" export ANTHROPIC_API_KEY="YOUR_API_KEY" # 启动 Claude Code 前检查,不要把 Key 回显到共享屏幕 env | grep -E 'ANTHROPIC_BASE_URL|ANTHROPIC_AUTH_TOKEN' | sed 's/=.*/=<redacted>/'配置完成后,先不要急着跑 35 个建模任务。用一个小请求确认 Claude Code 能通,再进入 Rodin 侧。你要观察的是请求出口:Claude Code 最终应把请求发到https://taotoken.net/api下的 Anthropic 兼容端点,而不是旧的官方地址。若出现 401,优先检查ANTHROPIC_AUTH_TOKEN与ANTHROPIC_API_KEY是否填了同一把 Key;若出现 404,检查 Base URL 是否被写成了https://taotoken.net/api/v1或结尾多了斜杠。
4. Codex 侧配置:config.toml 与 TAOTOKEN_API_KEY,别把 ANTHROPIC_* 抄过去
Codex 不是 Claude Code,它读~/.codex/config.toml。这里不要使用ANTHROPIC_*,否则你会在日志里看到变量未生效、供应商仍走默认地址的现象。正确做法是定义一个 TaoToken 供应商:
# ~/.codex/config.toml model = "从模型对话页复制 Codex 可用模型名" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "responses"然后在本地环境里提供 Key:
export TAOTOKEN_API_KEY="YOUR_API_KEY" # 如果你之前误配过 ANTHROPIC_*,可以临时 unset,避免干扰排查 unset ANTHROPIC_BASE_URL unset ANTHROPIC_AUTH_TOKEN unset ANTHROPIC_API_KEY这里有个容易踩的坑:wire_api要根据你控制台显示的模型接口能力选择,不能看到 Claude Code 用messages就以为 Codex 也走同一套。Codex 配置里写的是它自己的 provider 结构,Key 走env_key,Base URL 走base_url。如果你在 Codex 里看到 404,先确认base_url是否被写成了https://taotoken.net/api/v1;如果你看到 401,则确认TAOTOKEN_API_KEY是否真的在启动 Codex 的同一个终端里 export。
5. Rodin MCP 侧配置:让建模工具复用同一把 Key 与同一个 Base URL
Hyper3D Rodin 通过 MCP 接入时,配置位置取决于你用的 MCP 客户端。核心原则只有一条:MCP 服务端如果允许自定义 OpenAI 兼容 Base URL 和 Key,就把它指向https://taotoken.net/api和YOUR_API_KEY;如果不允许,就不要硬塞不存在的字段,以 Hyper3D 官方字段为准。下面给一个通用 MCP 配置模板,方括号内容必须替换成你客户端真实命令与官方包名。
{ "mcpServers": { "rodin": { "command": "<按 Hyper3D 官方文档填写启动命令>", "args": ["<按 Hyper3D 官方文档填写参数>"], "env": { "OPENAI_BASE_URL": "https://taotoken.net/api", "OPENAI_API_KEY": "YOUR_API_KEY", "TAOTOKEN_BASE_URL": "https://taotoken.net/api", "TAOTOKEN_API_KEY": "YOUR_API_KEY" } } } }说明一下:TAOTOKEN_BASE_URL和TAOTOKEN_API_KEY只在你的 MCP 服务端读取这两个变量时才生效;如果它只认OPENAI_*,就只保留OPENAI_*。不要为了让配置“看起来统一”而添加实际不存在的环境变量。更重要的是安全边界:Rodin MCP 只负责 3D 生成与模型文件回传,不要给它 Oracle、生产库、线上对象存储的长期凭据。MCP 与 Agent 都不应直连生产库;需要查数据时,由你在本地执行 SQL,再把脱敏结果交给模型。
配置完 MCP 后,先用一个最小建模任务测试:生成一个低面数立方体或单件道具,确认 MCP 客户端能拿到模型文件路径。只有单件成功后,才批量跑 35 个精细建模。否则一旦 401 或超时,你会在几十个任务里反复重试,浪费大量时间。
6. 可复现对照:同一 Key 切工具时的请求地址与耗时记录模板
要让“同一把 Key 从 GPT-6 画图切到 Rodin 建模”可复现,关键是记录请求出口与耗时。不同客户端日志格式不同,但你可以用下面这个模板手工对齐。请求地址列以 TaoToken 控制台日志或本地客户端日志为准,不要凭猜测填端点。
| 时间 | 工具链 | 请求出口 Base URL | 端点/操作 | 任务 | 耗时 |
|---|---|---|---|---|---|
| 10:02 | Claude Code + GPT-6 | https://taotoken.net/api | Anthropic 兼容端点 | 生成角色三视图参考图 | 9.8s |
| 10:08 | Claude Code + GPT-6 | https://taotoken.net/api | Anthropic 兼容端点 | 生成交互代码骨架 | 12.4s |
| 10:20 | Rodin MCP | https://taotoken.net/api | 以 MCP 服务端日志为准 | 单件道具建模 | 43.2s |
| 10:31 | Rodin MCP | https://taotoken.net/api | 以 MCP 服务端日志为准 | 场景组件建模 | 51.7s |
| 11:05 | Rodin MCP | https://taotoken.net/api | 以 MCP 服务端日志为准 | 批量 35 个模型 | 累计记录 |
| 11:40 | BANG + 本地脚本 | 不经过模型网关 | 本地拆分与导出 | 零件级拆分 | 本地耗时 |
你可以写一个小脚本,把本地日志按分钟聚合,避免手工抄错:
# local_request_log.py # 仅用于本地日志整理,不上传 Key,不连接生产库 import re from pathlib import Path log_path = Path("./logs/taotoken_requests.log") pattern = re.compile( r"(?P<time>\d{2}:\d{2}:\d{2}).*?" r"(?P<tool>claude-code|codex|rodin-mcp).*?" r"(?P<url>https://taotoken\.net/api[^\s]*).*?" r"(?P<ms>\d+)\s*ms" ) rows = [] for line in log_path.read_text(encoding="utf-8").splitlines(): m = pattern.search(line) if m: rows.append(m.groupdict()) for row in rows: print(f"{row['time']} | {row['tool']} | {row['url']} | {row['ms']}ms")重点不是追求某个固定秒数,而是确认同一把 Key 下,GPT-6 与 Rodin 的请求都从https://taotoken.net/api出口出去。如果 Rodin 侧日志里出现直连第三方域名,说明 MCP 没有吃到你的 Base URL 配置;如果 Claude Code 侧出现旧域名,说明settings.local.json覆盖了全局配置。
7. 从参考图到 35 个模型:提示词、命名、BANG 拆件与网页交互
GPT-6 侧的任务不是“画得好看”就结束,而是为后续建模提供结构约束。建议把每个资产拆成一份清单:资产 ID、参考图路径、正面/侧面/背面描述、材质、比例、坐标原点、目标面数、是否需要 BANG 拆件。这样做的好处是 Rodin 生成时不会把 35 个模型做成风格各异的散件。
{ "assets": [ { "id": "scene_gate_01", "ref_images": ["./refs/gate_front.png", "./refs/gate_side.png"], "rodin_prompt": "单座石质门楼,结构对称,可拆分为门柱、横梁、装饰件", "target_faces": "按平台可选档位填写", "need_bang_split": true }, { "id": "prop_lamp_07", "ref_images": ["./refs/lamp_front.png"], "rodin_prompt": "复古金属灯,灯罩、灯杆、底座结构清晰", "target_faces": "按平台可选档位填写", "need_bang_split": true } ] }Rodin 生成时,一次只提交一个资产,并在命名上保持稳定:assetId.glb、assetId_preview.png、assetId_manifest.json。35 个模型不要堆在一个对话里连续生成,否则上下文和错误会互相污染。更稳的方式是让本地脚本按清单逐个调用,每完成一个就落盘并记录耗时。
BANG 的价值在于把整体模型按结构拆成独立零件,从而做零件级动画。拆完后建议统一层级命名,例如root/body/arm_L/arm_R、root/door/left、root/prop/lamp_shade。前端网页可以用 Three.js 加载 GLB,给每个零件挂 pick 事件,点击时播放位移、旋转或透明度动画。作品集页面至少留三类交互:轨道相机浏览、零件点选高亮、按分类筛选场景。
// 前端交互伪代码:只展示结构,模型路径替换为本地导出结果 import * as THREE from "three"; import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js"; const loader = new GLTFLoader(); loader.load("/models/scene_gate_01.glb", (gltf) => { const root = gltf.scene; root.traverse((node) => { if (node.isMesh && node.name.startsWith("part_")) { node.userData.clickable = true; } }); scene.add(root); });注意,模型文件、纹理、拆分结果都在本地或你的静态资源服务里处理,不要把生产库凭据塞进前端,也不要让 MCP 直接对数据库执行导出命令。
8. 排错清单:401、404、模型名、429、MCP 超时分别怎么查
401 通常不是“模型坏了”,而是 Key 没送达。检查顺序:YOUR_API_KEY是否还有效;Claude Code 里ANTHROPIC_AUTH_TOKEN和ANTHROPIC_API_KEY是否同时填写;Codex 里是否 export 了TAOTOKEN_API_KEY;MCP 配置里的环境变量是否被客户端真正传入子进程。
404 多数是 Base URL 拼接问题。统一先用https://taotoken.net/api,不要加 UTM,不要加多余斜杠。若客户端提示端点不存在,再去看它实际请求路径,而不是反复改 Key。
400 或“model not found”通常是模型名错误。模型名从模型对话或控制台复制,不要凭记忆写。Claude Code、Codex、Rodin MCP 可能使用不同模型名,不要把 Claude Code 的模型名直接填到 Codex。
429 是并发或速率限制。批量跑 35 个模型时,建议本地队列并发控制在 1 到 3,失败后指数退避重试,并把每次请求的资产 ID 写入日志。不要无限重试,否则会放大错误。
MCP 超时通常有两种:连接超时和生成超时。连接超时检查 MCP 命令、参数、环境变量;生成超时则要区分是 Rodin 服务端排队,还是本地 HTTP 客户端超时。长任务应使用轮询或异步任务模型,而不是让单次请求一直挂着。
最后再强调安全边界:MCP、Agent、浏览器自动化都不应直连 Oracle 或生产库。需要查询时,由你在本地终端执行 SQL,保存脱敏结果,再让模型读取文件。本文给出的命令都只适合本地测试环境。
9. 文末 CTA:模型对话 → Coding Plan → 创建 Key → Claude Code 文档
如果你已经准备好把 GPT-6 画图、Rodin 建模和 BANG 拆件串成一条可复现链路,建议按下面顺序走一遍:
- 先到模型对话页确认可用模型与端点格式:https://taotoken.net/models/detail/chat?utm_source=taotoken_aicg_blog_end&utm_content=gpt6_rodin_chat
- 需要长期跑建模与代码任务时,查看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=gpt6_rodin_plan
- 创建并管理你的 API Key,替换本文所有
YOUR_API_KEY:https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=gpt6_rodin_key - Claude Code 的 Anthropic 兼容配置细节,以官方文档为准:https://taotoken.net/doc/ClaudeCodeAnthropic?utm_source=taotoken_aicg_blog_end&utm_content=gpt6_rodin_ccdoc
回到主线:同一把 Key 从 GPT-6 画图切到 Rodin 建模,真正要守住的只有两个地址——Key 从 TaoToken 官网领取:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=gpt6_rodin_cta ,工具侧 Base URL 统一写https://taotoken.net/api。把请求地址和耗时记录下来,再批量跑 35 个精细建模,最后用 BANG 拆出零件做交互,整条作品集链路就会从“偶尔能跑”变成“随时可复现”。