尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

借 TaoToken Key 跑 AutoResearch,Git commit 只存可检出结果

借 TaoToken Key 跑 AutoResearch,Git commit 只存可检出结果 1. 从一次 AutoResearch 复现失败说起为什么 commit 只存可检出结果上周在 Claude Code 里把ANTHROPIC_BASE_URL指向一个自建代理跑一个多步文献筛选的 AutoResearch 任务。第一次跑完输出了一份看起来挺像样的 Markdown。第二次复现时同样的任务、同样的输入结果里少了两个关键引用结论也从“需要进一步验证”变成了“可以直接采用”。diff 之后才发现第一次只把最终 Markdown 提交了模型名、温度、系统提示、检索命中的原始片段、每次调用的 Token 用量都没进版本库。于是那份 commit 只能证明“我得到过这个结果”不能证明“别人在同样条件下能再次得到这个结果”。后来我把入口换成 TaoToken到 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentautoresearch_intro 拿 KeyBase URL 设为 https://taotoken.net/api再把每一步 AutoResearch 产出都写成 Git commit只提交可检出、可复现、可核对的内容。这个思路跟近期一篇关于用 Git 做共享记忆的论文方向一致把智能体的结果、洞察和验证都变成版本库里的节点节点之间通过 parent 指针形成只追加的 DAG。但论文谈的是系统设计落到工程里我更关心三件事commit 里到底放什么复现命令怎么写Token 账怎么记。下面按可跟做的顺序拆开。2. 用 TaoToken Key 接管 Claude Code、Codex 与 CC Switch在 TaoToken 官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentconfig_entry注册后进入控制台创建 API Key。Key 通常只显示一次建议放进密码管理器不要写进 Git。所有工具共用一个 Base URLhttps://taotoken.net/api。注意 Base URL 不追加 UTM也不要在末尾手写/v1让工具按自己的路径拼接否则很容易出现/api/v1/v1/...这种 404。Claude Codesettings.json ANTHROPIC_*Claude Code 支持在项目或用户级settings.json里注入环境变量。可复制示例{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: claude-sonnet-4-20250514, ANTHROPIC_SMALL_FAST_MODEL: claude-3-5-haiku-20241022 } }如果使用 shell 环境变量macOS/Linuxexport ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKENYOUR_API_KEY export ANTHROPIC_MODELclaude-sonnet-4-20250514Windows PowerShell$env:ANTHROPIC_BASE_URL https://taotoken.net/api $env:ANTHROPIC_AUTH_TOKEN YOUR_API_KEY $env:ANTHROPIC_MODEL claude-sonnet-4-20250514验证claude --version claude -p 只输出 OK --model claude-sonnet-4-20250514如果返回 401检查ANTHROPIC_AUTH_TOKEN是否带了多余引号或换行如果返回 404检查ANTHROPIC_BASE_URL是否误写成https://taotoken.net/api/v1。Codexconfig.toml不要混用 ANTHROPIC_*Codex 使用~/.codex/config.toml。不要把ANTHROPIC_*写进来Codex 不认这些变量。示例model gpt-5-codex model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY wire_api responses设置 Keyexport TAOTOKEN_API_KEYYOUR_API_KEY codex --version codex exec 只输出 OK如果你的 Codex 版本使用chat协议把wire_api改为chat如果报unsupported wire_api先查看当前版本支持的取值不要同时保留两个 provider 配置。CC Switch 三件套CC Switch 用来在多个供应商之间切换。新增一个供应商时只填三件套供应商名称TaoTokenBase URLhttps://taotoken.net/apiAPI KeyYOUR_API_KEY可选第四项模型名填你在 TaoToken 控制台看到的模型标识。保存后切换到TaoToken重启终端或重新加载 Claude Code/Codex 会话。切换没生效时优先检查 CC Switch 是否写到了当前 shell 对应的配置文件而不是只看界面上的绿色勾。3. Git commit 存储规范只追加 DAG 与可检出结果AutoResearch 的结果落库核心原则是每个 commit 只存可检出结果。所谓可检出不是“有个 Markdown 就行”而是别人 checkout 这个 commit 后能按命令跑出同样的输出至少能校验输入哈希、输出哈希、模型参数和 Token 用量。commit 之间通过 parent 指针形成只追加的 DAG已推送的提交不 amend、不 rebase、不 force push。目录布局research/ steps/ 20260514-01-retrieve/ manifest.json command.sh input.sha256 output/ result.json summary.md ledger.jsonl index.jsonmanifest.json每个 step 的 manifest 记录复现所需的最小信息{ step_id: 20260514-01-retrieve, parent_commits: [实际的上游 commit SHA], model: claude-sonnet-4-20250514, base_url: https://taotoken.net/api, temperature: 0.2, max_tokens: 2048, system_prompt_sha256: 填入系统提示的哈希, input_files: [queries.txt], output_files: [output/result.json, output/summary.md], output_sha256: { output/result.json: 填入输出文件哈希, output/summary.md: 填入输出文件哈希 }, created_at: 2026-05-14T10:00:00Z }command.shcommand.sh要能在干净环境执行。不要把 Key 硬编码进去用环境变量#!/usr/bin/env bash set -euo pipefail export TAOTOKEN_API_KEY${TAOTOKEN_API_KEY:?set TAOTOKEN_API_KEY} export BASE_URLhttps://taotoken.net/api export MODELclaude-sonnet-4-20250514 python3 run_step.pyrun_step.py可以调用 TaoToken 的兼容接口。下面是一个最小调用示例读者可在本地执行import os, json, urllib.request BASE_URL os.environ.get(BASE_URL, https://taotoken.net/api) API_KEY os.environ[TAOTOKEN_API_KEY] MODEL os.environ.get(MODEL, claude-sonnet-4-20250514) def call_model(prompt: str) - dict: req urllib.request.Request( f{BASE_URL}/v1/chat/completions, datajson.dumps({ model: MODEL, messages: [{role: user, content: prompt}], temperature: 0.2, max_tokens: 2048 }).encode(), headers{ Content-Type: application/json, Authorization: fBearer {API_KEY} }, methodPOST ) with urllib.request.urlopen(req, timeout120) as resp: return json.loads(resp.read()) if __name__ __main__: result call_model(用三句话解释这个检索结果的关键结论) print(json.dumps(result, ensure_asciiFalse, indent2))commit message 规范建议固定格式方便脚本解析research(step): 20260514-01-retrieve modelclaude-sonnet-4-20250514 base_urlhttps://taotoken.net/api input_sha256填入输入哈希 output_sha256填入输出哈希 token_total1832 parent填入上游 commit SHA只追加规则已推送 commit 不 amend、不 rebase、不 force push。新结果用新 commitparent 指向它所依赖的上游 commit。大文件不进 Git存哈希和下载命令Git 里只保留可校验的摘要。每个 commit 必须能用command.sh在干净环境跑出同样输出至少能校验哈希。不要把YOUR_API_KEY的真实值提交进仓库.env放进.gitignore只提交.env.example。4. 复现命令从 clone 到结果比对复现脚本要尽量短短到别人愿意直接粘贴执行。下面这个脚本接受一个 commit SHAclone 后 checkout校验输入执行 step再比对输出哈希。#!/usr/bin/env bash set -euo pipefail REPO_URL${REPO_URL:?set REPO_URL} COMMIT_SHA${1:?usage: $0 commit-sha} WORKDIR$(mktemp -d) git clone --filterblob:none $REPO_URL $WORKDIR cd $WORKDIR git checkout $COMMIT_SHA # 1. 校验输入 sha256sum -c research/input.sha256 # 2. 执行可复现命令 export TAOTOKEN_API_KEY${TAOTOKEN_API_KEY:?set TAOTOKEN_API_KEY} bash research/command.sh # 3. 比对输出哈希 python3 - PY import hashlib, json, pathlib, sys manifest json.loads(pathlib.Path(research/manifest.json).read_text()) for rel in manifest[output_files]: p pathlib.Path(rel) got hashlib.sha256(p.read_bytes()).hexdigest() expected manifest[output_sha256][rel] if got ! expected: print(fFAIL {rel}: {got} ! {expected}) sys.exit(1) print(fOK {rel}) PY查看 DAGgit log --graph --oneline --decorate --all从某个 commit 追溯父节点git show commit-sha:research/manifest.json | jq .parent_commits如果你想让复现更严格可以在 CI 里加一个 job每次 push 后对新增的research/steps/*依次执行command.sh只允许哈希一致的提交合并。这样 Git 就不只是代码仓库而是 AutoResearch 的共享记忆层。5. Token 账把用量写进每个 commitAutoResearch 跑多了Token 账会比代码 diff 更容易失控。建议每个 step 的ledger.jsonl只追加记录每次模型调用写一行。字段包括时间、request_id、模型、prompt_tokens、completion_tokens、total_tokens。示例import json, time, uuid, pathlib def append_ledger(step_dir: str, model: str, usage: dict) - None: record { ts: time.strftime(%Y-%m-%dT%H:%M:%SZ, time.gmtime()), request_id: str(uuid.uuid4()), model: model, prompt_tokens: usage.get(prompt_tokens, 0), completion_tokens: usage.get(completion_tokens, 0), total_tokens: usage.get(total_tokens, 0) } p pathlib.Path(step_dir) / ledger.jsonl with p.open(a, encodingutf-8) as f: f.write(json.dumps(record, ensure_asciiFalse) \n)汇总所有 step 的 Token 用量import json, pathlib, collections total collections.Counter() for line in pathlib.Path(research).rglob(ledger.jsonl): for row in line.read_text().splitlines(): rec json.loads(row) total[rec[model]] rec[total_tokens] for model, tokens in total.most_common(): print(f{model}\t{tokens})本地 ledger 要和控制台用量对账。你可以到 TaoToken 官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contenttoken_ledger控制台的 API Keys 页面查看 Key 维度的用量再和ledger.jsonl汇总结果比对。如果差异超过 1%优先检查三件事是否有请求绕过了记录脚本流式响应是否漏记usage重试请求是否重复计费但没有追加新记录。把 Token 账提交进 Git 的好处是回看某个研究结论时你能同时看到它花了多少 Token、用了哪个模型、经过哪些父节点。如果后面要优化成本直接按ledger.jsonl排序先砍掉那些 token 高但输出哈希没变化的重复步骤。6. 常见报错与排查401 UnauthorizedKey 错了、带了空格、用了ANTHROPIC_AUTH_TOKEN但工具读的是ANTHROPIC_API_KEY。先打印当前环境变量确认不要靠猜。404 Not FoundBase URL 写成https://taotoken.net/api/v1工具又追加/v1变成/api/v1/v1/...。统一用https://taotoken.net/api。model not found模型名不在 TaoToken 可用列表。去模型对话页面确认标识不要拿旧文档里的模型名硬套。unsupported wire_apiCodex 配置里wire_api与模型不匹配。把responses和chat分别试一次不要同时保留两个 provider。CC Switch 切换后仍走旧供应商环境变量优先级高于 CC Switch检查 shell profile、项目.env、用户级settings.json是否残留旧值。git commit 后复现失败检查 output 是否被.gitignore忽略大文件哈希是否记录command.sh里是否依赖了未提交的本地文件。Token 账对不上检查流式响应是否漏记 usage重试请求是否重复计费是否有请求走了另一个 Base URL。排查时建议按“入口 → 配置 → 请求 → 落库”顺序来先用最小请求确认 TaoToken Key 和 Base URL 可用再确认工具读的是哪份配置然后确认每次调用都写 ledger最后确认 commit 里只有可检出结果。7. 把 AutoResearch 结果落库的完整路径如果你现在就想把 AutoResearch 的每一步落成可检出 commit可以按这个顺序走先到模型对话页试一个最小任务确认 Key 和 Base URL 可用https://taotoken.net/models/detail/chat?utm_sourcetaotoken_aicg_blog_endutm_contentautoresearch_chat需要稳定跑批时看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentautoresearch_plan创建 API Keyhttps://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentautoresearch_keysClaude Code 配置文档https://taotoken.net/doc/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentautoresearch_claude_code最后再强调一遍Base URL 用https://taotoken.net/apiKey 用YOUR_API_KEY占位真实 Key 只放在环境变量或密码管理器里。Git 仓库里只保留manifest.json、command.sh、input.sha256、ledger.jsonl和输出摘要。这样每个 commit 才是可检出的结果而不是一份无法复现的截图。
返回列表