ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

让 AutoResearch 共享记忆可检出,模型调用账本用 TaoToken Key

让 AutoResearch 共享记忆可检出,模型调用账本用 TaoToken Key 1. 从 Agora 的可检出 commit 说起AutoResearch 共享记忆为什么需要模型调用账本如果你正在复现 Agora 这类以 Git 作为共享记忆的 AutoResearch 工作流最容易断链的往往不是检索或推理而是模型调用账本。TaoToken 官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentautoresearch_intro提供统一 Key 与 Base URL把 Claude Code、Codex、CC Switch 以及自研 AutoResearch 脚本的调用记录接到同一条可审计路径上。Agora 的核心设计并不复杂它把 Git 当作智能体之间的共享记忆层提交历史构成只追加的有向无环图每一项结果、洞察或验证都以 commit 的形式留下可追溯、可复现的指纹。问题在于当这些 commit 由不同模型、不同 agent、不同时间生成时如果只记录“结论”而不记录“谁调用了哪个模型、消耗多少 token、走哪个入口”复现就会退化成猜测。本文把视角放在“模型调用账本”上而不是泛泛讨论 AutoResearch 有多先进。你需要做的是到 TaoToken 官网拿 Key把 Base URL 设为 https://taotoken.net/api让每一次模型调用都写进本地 JSONL 账本再把账本与产物一起提交成可检出 commit。最终你会得到两份可审计材料一份是 commit 清单能顺着 DAG 找到每条结果、洞察和验证另一份是 Token 账本能解释每条 commit 背后的模型调用成本与输入输出规模。这样AutoResearch 的共享记忆才不只是“代码版本管理”而是“模型调用 产物 验证”的联合可复现记录。本文所有命令都在本地执行不把 MCP 或 agent 直接接到生产数据库SQL 与校验脚本由读者在本地终端运行。配置顺序建议如下先拿 Key再改 Claude Code / Codex / CC Switch 的接入配置接着补调用日志最后把日志与产物提交进 Git。整个过程不依赖任何未公开插件名或私有 API只使用可核实的 Base URL、Key 占位符和标准 Git 操作。2. 在 TaoToken 官网拿到 Key并把 Base URL 固定为 https://taotoken.net/api第一步不是写代码而是把入口统一。打开 TaoToken 官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentget_key登录后进入 API Keys 页面创建 Key。创建完成后不要写进仓库文件也不要写进 commit message只放到本地环境变量或系统密钥环里。Key 占位符统一用 YOUR_API_KEY后文所有配置示例都按这个占位符替换。创建 Key 的直达入口是https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentcreate_key 。进入控制台后建议给 Key 起一个可识别的名字例如autoresearch-ledger-local方便后续在账本里按用途筛选。模型对话入口可用于先验证账号与模型可用性https://taotoken.net/models/detail/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchat_smoke_test 。如果只是先跑通 Claude Code 或 Codex也可以从 Coding Plan 了解套餐与调用方式https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_plan_intro 。本地环境变量建议这样设置export TAOTOKEN_API_KEYYOUR_API_KEY export TAOTOKEN_BASE_URLhttps://taotoken.net/api注意Base URL 是https://taotoken.net/api不要在工具配置里给它加 UTM 参数。UTM 只用于官网链接追踪不进入 API 请求地址。不同客户端对路径拼接方式不同有的 SDK 会自动追加/v1有的需要你在 provider 配置里写完整前缀。原则是先按工具文档填写 Base URL再用最小请求验证不要同时混用多个旧地址。最小验证可以用 curl 在本地执行。下面示例把 Base URL 拼成 OpenAI 兼容路径实际模型名按控制台或模型页显示的可用 ID 替换curl -sS ${TAOTOKEN_BASE_URL}/v1/chat/completions \ -H Authorization: Bearer ${TAOTOKEN_API_KEY} \ -H Content-Type: application/json \ -d { model: YOUR_MODEL_ID, messages: [ {role: user, content: 只回复 pong} ], temperature: 0 }如果返回 401 或 403优先检查 Key 是否完整、是否带了多余空格、请求头是否写成Bearer YOUR_API_KEY。如果返回 404检查 Base URL 是否被客户端重复拼接例如写成了https://taotoken.net/api/v1后又自动追加/v1。如果返回模型不存在回到 TaoToken 模型页确认模型 ID不要把展示名称直接当成 API 模型名。接下来配置 Claude Code。Claude Code 使用settings.json和ANTHROPIC_*系列环境变量。项目级配置可以放在.claude/settings.json用户级配置通常放在~/.claude/settings.json。示例{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: claude-sonnet-4-5 } }如果你的 Claude Code 版本使用ANTHROPIC_API_KEY而不是ANTHROPIC_AUTH_TOKEN按版本文档替换字段名但不要同时保留多个冲突值。配置完成后重启终端或 IDE 会话让环境变量重新加载。验证时可以在 Claude Code 中发一条极短请求同时观察本地终端是否出现对应调用日志。Claude Code 的接入文档入口是https://taotoken.net/doc/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaude_code_settings 。Codex 的配置方式不同不能把ANTHROPIC_*套到 Codex 上。Codex 使用config.toml常见位置是~/.codex/config.toml。示例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然后在 shell 中导出export TAOTOKEN_API_KEYYOUR_API_KEYCodex 的env_key指向环境变量名不是直接把 Key 写进 TOML。model_provider必须和[model_providers.taotoken]的名字一致大小写敏感。wire_api按你的 Codex 版本选择常见为responses或chat不要凭感觉混填。切换配置后重新打开 Codex 会话否则旧环境变量可能仍然生效。CC Switch 可以理解为在多个供应商配置之间做切换。无论 UI 怎么变核心都是三件套供应商名称、Base URL、API Key。建议按下面表格填写字段建议值Provider 名称TaoTokenBase URLhttps://taotoken.net/apiAPI KeyYOUR_API_KEY模型按控制台可用列表填写备注本地账本用途不写生产库凭据切换完成后先确认 CC Switch 写入的是 Claude Code 的settings.json还是 Codex 的config.toml不要在两个工具之间共享错误字段。CC Switch 只负责切换不负责替你生成 Token 账本账本仍要在调用层或脚本层记录。3. 设计可检出 commit 清单把模型调用元数据写进 Git DAGAgora 式 AutoResearch 的共享记忆之所以有价值是因为每条结果、洞察或验证都能落到一个 commit 上。但仅有代码 diff 还不够模型调用账本必须一起进入 DAG否则你只能看到“产物变了”看不到“为什么变、由哪个模型生成、消耗多少”。建议在仓库中建立两个目录artifacts/存放结构化结果ledger/存放按日期切分的调用日志。每次实验完成后把产物和账本一起提交。commit message 可以遵循固定模板让git log天然可解析。示例research(insight): 更新 H-042 的验证结果 agent: planner-01 model: claude-sonnet-4-5 provider: taotoken base_url: https://taotoken.net/api request_id: req_01J... input_tokens: 8123 output_tokens: 1420 total_tokens: 9543 cost_usd: 0.034 artifact: artifacts/h042.json ledger: ledger/2025-01-01.jsonl parent_commit: a1b2c3d注意commit message 里不要写YOUR_API_KEY或真实 Key。Key 只存在于环境变量或密钥管理器中。request_id应该来自调用层或响应头如果供应商没有返回就用本地生成的 UUID并同步写入 JSONL 账本保证 commit 与账本通过同一个 ID 关联。一个可检出提交的本地操作序列如下mkdir -p artifacts ledger reports git init # 假设产物和账本已经生成 git add artifacts/h042.json ledger/2025-01-01.jsonl git commit -m research(insight): 更新 H-042 的验证结果 agent: planner-01 model: claude-sonnet-4-5 provider: taotoken base_url: https://taotoken.net/api request_id: req_01J... input_tokens: 8123 output_tokens: 1420 total_tokens: 9543 cost_usd: 0.034 artifact: artifacts/h042.json ledger: ledger/2025-01-01.jsonl parent_commit: a1b2c3d只追加 DAG 的关键纪律是已推送的 commit 不要--amend不要rebase掉历史。如果发现结果有问题新增一个 commit 记录修正并在 message 中写corrects: old_commit。这样 AutoResearch 的记忆才是只追加的任何一次洞察都有迹可循。生成 commit 清单可以用本地 Git 命令git log --reverse --all --prettyformat:%H|%ad|%an|%s --dateiso reports/commit-list.tsv如果 commit message 里包含多行元数据可以用git log --format%B导出完整正文再用本地脚本解析。不要用 MCP 或 agent 直接读取生产库所有解析都在本地仓库副本上完成。你也可以把结构化元数据额外写进ledger/commits/*.json让 commit 清单与 Token 账本通过request_id和commit_hash双向关联。4. Token 账本从每次模型调用到 JSONL、CSV 与本地 SQLiteToken 账本的目标不是替代控制台账单而是让每条 commit 背后的调用可解释。建议每次模型调用写一行 JSONL字段至少包括时间、agent 名称、模型、供应商、Base URL、request_id、输入 token、输出 token、总 token、耗时、commit 提示。不要写 Key不要写用户隐私不要写生产库连接串。一个可运行的 Python 调用封装示例import json import os import time import uuid from openai import OpenAI client OpenAI( api_keyos.environ[TAOTOKEN_API_KEY], base_urlos.environ.get(TAOTOKEN_BASE_URL, https://taotoken.net/api), ) def call_model(commit_hint: str, model: str, messages: list): request_id str(uuid.uuid4()) started time.time() resp client.chat.completions.create( modelmodel, messagesmessages, temperature0, ) elapsed_ms int((time.time() - started) * 1000) usage resp.usage record { ts: time.strftime(%Y-%m-%dT%H:%M:%S%z), commit_hint: commit_hint, request_id: request_id, model: model, provider: taotoken, base_url: os.environ.get(TAOTOKEN_BASE_URL, https://taotoken.net/api), elapsed_ms: elapsed_ms, input_tokens: getattr(usage, prompt_tokens, None), output_tokens: getattr(usage, completion_tokens, None), total_tokens: getattr(usage, total_tokens, None), } os.makedirs(ledger, exist_okTrue) with open(ledger/calls.jsonl, a, encodingutf-8) as f: f.write(json.dumps(record, ensure_asciiFalse) \n) return resp if __name__ __main__: result call_model( commit_hintH-042, modelYOUR_MODEL_ID, messages[{role: user, content: 用一句话总结当前实验假设。}], ) print(result.choices[0].message.content)并发场景下多进程同时写同一个 JSONL 可能交错。可以按进程或日期分片例如ledger/2025-01-01-worker01.jsonl。如果确实要并发写单文件加本地文件锁或者先写临时文件再合并。账本越简单越容易进入 Git不要把二进制数据库当作唯一账本。从 JSONL 生成汇总 CSVpython - PY import csv import json from collections import defaultdict sums defaultdict(lambda: {input_tokens: 0, output_tokens: 0, total_tokens: 0, calls: 0}) with open(ledger/calls.jsonl, encodingutf-8) as f: for line in f: r json.loads(line) key r.get(commit_hint) or unknown sums[key][input_tokens] r.get(input_tokens) or 0 sums[key][output_tokens] r.get(output_tokens) or 0 sums[key][total_tokens] r.get(total_tokens) or 0 sums[key][calls] 1 with open(reports/token-summary.csv, w, newline, encodingutf-8) as f: writer csv.writer(f) writer.writerow([commit_hint, calls, input_tokens, output_tokens, total_tokens]) for key, value in sorted(sums.items()): writer.writerow([key, value[calls], value[input_tokens], value[output_tokens], value[total_tokens]]) PY如果要用本地 SQLite 做审计查询可以建一张只读分析表-- 本地执行 CREATE TABLE IF NOT EXISTS calls ( ts TEXT, commit_hint TEXT, request_id TEXT, model TEXT, provider TEXT, base_url TEXT, input_tokens INTEGER, output_tokens INTEGER, total_tokens INTEGER );然后用 Python 或 sqlite3 命令行把 JSONL 导入。查询示例-- 本地执行 SELECT commit_hint, COUNT(*) AS calls, SUM(total_tokens) AS total_tokens FROM calls GROUP BY commit_hint ORDER BY total_tokens DESC;这些 SQL 只在你本地的 SQLite 文件上执行不要通过 MCP 或 agent 直连 Oracle、MySQL、PostgreSQL 等生产库。AutoResearch 需要的是可复现不是把生产凭据暴露给工具链。5. 排障Claude Code、Codex、CC Switch 与账本不一致的检查清单配置阶段最常见的不是模型不可用而是字段错位。先看 Claude Code如果请求仍然打到旧地址检查settings.json是否被正确读取用户级与项目级配置是否冲突ANTHROPIC_BASE_URL是否写成了带 UTM 的官网链接。正确值应是https://taotoken.net/api。如果报鉴权失败检查ANTHROPIC_AUTH_TOKEN或ANTHROPIC_API_KEY是否为空、是否被 shell 中旧变量覆盖。修改后重启终端而不是只重开一个对话窗口。Codex 排障要单独看。config.toml中model_provider必须匹配[model_providers.taotoken]env_key写的是环境变量名不是 Key 本身base_url不要加 UTM。如果你从 Claude Code 复制了ANTHROPIC_*字段Codex 不会识别。Codex 没有义务读取 Claude Code 的 settings.json两者是独立配置链。切换模型后确认model字段在 TaoToken 控制台可用不要把展示名称直接当 ID。CC Switch 的问题通常出在“切换了但没落盘”。有些版本只改 UI 状态有些版本会写入目标工具的配置文件。切换后逐一检查Claude Code 对应settings.json是否出现ANTHROPIC_BASE_URLCodex 对应config.toml是否出现base_url和env_key。如果 CC Switch 同时管理多个工具确认当前激活的是哪一个不要让 Codex 继承了 Claude Code 的字段。账本不一致的检查顺序如下现象可能原因处理commit 有记录账本没有调用层没写 JSONL或写到了别的目录检查ledger/calls.jsonl路径与工作目录账本有记录commit 没有产物提交了但账本被 gitignore检查.gitignore把ledger/*.jsonl加入版本控制request_id 对不上本地 UUID 与 commit message 不一致调用完成后把同一 ID 写入产物元数据和 commit messagetoken 数与控制台不同本地只统计部分调用或模型有缓存以控制台账单为准本地账本用于关联实验401/403Key 错误、过期、请求头格式不对重新从 API Keys 页面生成使用Bearer头404Base URL 被重复拼接固定为https://taotoken.net/api检查客户端是否自动加/v1旧配置覆盖shell、IDE、系统变量多处设置用 env账本文件建议只追加不要原地改写历史行。如果发现某行记录错误新增一条修正记录并在字段中写corrects_request_id。这样 Token 账本也符合只追加 DAG 的思想和 Git 共享记忆保持一致。6. 把可检出 AutoResearch 跑成流水线从 Key 到 commit 清单与 Token 账本当 Key、Base URL、调用日志和 Git 提交都准备好后可以把整条流程固定成六步流水线。第一步到 TaoToken 官网拿 Keyhttps://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentpipeline_key 。第二步把 Base URL 设为https://taotoken.net/api并在 Claude Code、Codex、CC Switch 中分别验证。第三步在 AutoResearch 脚本中封装模型调用每次调用追加一行 JSONL。第四步把 artifact 和 ledger 一起git add用包含 request_id、模型、token 数的 message 提交。第五步用本地脚本生成reports/commit-list.tsv和reports/token-summary.csv。第六步用 commit hash 作为复现入口先对账本再对产物。可检出 commit 清单可以设计成如下 CSV 模板commit_hash,date,agent,model,provider,request_id,input_tokens,output_tokens,total_tokens,artifact a1b2c3d,2025-01-01T10:00:0008:00,planner-01,claude-sonnet-4-5,taotoken,req_01J...,8123,1420,9543,artifacts/h042.jsonToken 账本可以设计成如下 JSONL 模板{ts:2025-01-01T10:00:0008:00,commit_hint:H-042,request_id:req_01J...,model:claude-sonnet-4-5,provider:taotoken,base_url:https://taotoken.net/api,input_tokens:8123,output_tokens:1420,total_tokens:9543,elapsed_ms:1830}注意base_url字段保留https://taotoken.net/api即可不要写官网 UTM 链接。UTM 链接用于你获取 Key、查看模型和进入控制台不用于 API 请求。这样 commit 清单说明“发生了什么”Token 账本说明“花了多少、调了谁”两者通过request_id和commit_hash互相关联。如果你要把这套流程交给团队建议再加两条本地校验规则。第一pre-commit 检查是否把YOUR_API_KEY或疑似 Key 写进暂存区第二提交前检查ledger/是否包含本次调用记录。可以用本地脚本实现不要依赖远程服务。示例检查命令git diff --cached --name-only | grep -E ledger/|artifacts/ || { echo 缺少 ledger 或 artifacts请先补齐可检出材料 exit 1 }最后把工具入口按顺序固定下来避免每次重新找配置。需要对话验证模型时走模型对话需要长期编码与 AutoResearch 批量调用时看 Coding Plan需要新建或轮换 Key 时进 API Keys需要确认 Claude Code 字段写法时查 Claude Code 文档。四个入口按转化路径排列如下模型对话https://taotoken.net/models/detail/chat?utm_sourcetaotoken_aicg_blog_endutm_contentautoresearch_chatCoding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentautoresearch_plan创建 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回到 Agora 式 AutoResearch 的核心共享记忆不是一堆散落的对话记录而是一条只追加、可检出、可复现的 commit DAG。把 TaoToken Key 作为统一模型调用入口把 Base URL 固定为https://taotoken.net/api把每次调用写进 Token 账本再把账本与 artifact 一起提交你就能让每条结果、洞察和验证都带上调用上下文。这样即使过一段时间回头复现也能从 commit 清单找到产物从 Token 账本找到模型消耗从 request_id 找到那次调用的完整路径。
返回列表