尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

别再手动翻 Agent 日志了:用 Go + SQLite 给 27 个编程 Agent 建本地索引,TaoToken 统一 Key 接入

发布时间:2026/9/26 18:02:41

资讯中心
01
ARTICLE

别再手动翻 Agent 日志了:用 Go + SQLite 给 27 个编程 Agent 建本地索引,TaoToken 统一 Key 接入

别再手动翻 Agent 日志了:用 Go + SQLite 给 27 个编程 Agent 建本地索引,TaoToken 统一 Key 接入
1. 27 个 Agent 的日志散在 27 个目录里我受够了如果你日常同时挂着 Claude Code、Codex、Cursor、Gemini CLI 这几个编程 Agent大概率遇到过同一个尴尬想知道这周到底烧了多少 token、哪个会话触发了限流、上周那段关键对话到底在哪个工具里结果发现每个 Agent 的会话日志都躺在自己的目录里格式还各不相同。Claude Code 在~/.claude/projects/Codex 在~/.codex/sessions/Cursor 在~/.cursor/projects/Gemini CLI 在~/.gemini/OpenCode 在~/.local/share/opencode/光是记住这些路径就够呛更别说逐个翻 JSON Lines 文件。社区里最常用的 token 用量分析工具是 ccusage但它只覆盖 Claude Code 一家。我想看 Cursor 这周花了多少、Codex 上次为什么命中限流对不起要么自己写脚本解析要么挨个打开工具 UI 手动翻。会话一多检索基本靠 grep 加记忆效率极低。这篇要解决的问题很具体用 Go CLI SQLite 的思路把散落在 27 个编程 Agent 目录下的会话日志统一索引到本地一个数据库支持全文检索和用量统计同时用 TaoToken 的统一 Key 接入多个模型让所有 Agent 的调用都走同一个入口方便后续做成本归因。适合日常用两个以上 AI 编程工具、想算清 token 成本、或者做 AI 工具内部可观测性的开发者。下面给的是可复制的 config.toml 骨架、索引构建命令、查询验证步骤以及和 ccusage 的对照方法。2. 前置准备TaoToken 统一 Key 与本地环境2.1 为什么需要统一 Key多 Agent 场景下最烦的一件事是每个工具配一套 Key、一套 base_url换模型要改好几处。TaoToken 提供的是 OpenAI 兼容的统一接入层一个 Key 可以调用多个模型base_url 固定为https://taotoken.net/api。这样无论你用的是 Claude Code、Codex 还是自己写的 Go CLI只要支持 OpenAI 兼容协议就能共用同一个 Key会话日志里的模型字段也能统一归因。先去控制台创建 Key访问 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 登录后进入 API Keys 页面新建一个 Key 并复制保存。注意 Key 只在创建时完整显示一次丢了只能重建。2.2 本地环境要求索引工具本身是 Go 写的需要 Go 1.22如果要绑定 SQLite 需要 CGO建议装好 gcc 或 clang。SQLite 用 FTS5 做全文检索现代发行版自带的 sqlite3 一般已编译 FTS5可以用sqlite3 --version确认。Node.js 22 只在你想跑 Web UI 时才需要纯 CLI 查询可以跳过。# 检查 Go 版本 go version # 期望输出 go version go1.22.x 或更高 # 检查 SQLite 是否带 FTS5 sqlite3 :memory: CREATE VIRTUAL TABLE t USING fts5(x); SELECT fts5 ok; # 期望输出 fts5 ok2.3 目录规划我习惯把索引工具和数据库放在~/.agents-index/下数据库文件sessions.db配置config.toml日志index.log。这样备份和迁移都只动一个目录。mkdir -p ~/.agents-index cd ~/.agents-index3. 可复制配置config.toml 骨架与 TaoToken Key3.1 config.toml 完整骨架下面这份配置覆盖了 Agent 日志路径映射、SQLite 索引参数、TaoToken 接入三部分。路径按你实际安装的 Agent 增删没装的直接删掉对应[[agents]]块即可。# ~/.agents-index/config.toml [storage] # SQLite 数据库路径支持 ~ 展开 db_path ~/.agents-index/sessions.db # 首次全量扫描的并发度机械硬盘建议 2SSD 可以 8 scan_workers 4 # 单文件超过该大小(MB)时跳过防止个别巨型日志拖慢索引 max_file_mb 512 [search] # FTS5 分词器中文会话建议用 trigram 或 unicode61 tokenizer unicode61 # 查询默认返回条数 default_limit 50 [provider.taotoken] # TaoToken 统一接入OpenAI 兼容协议 base_url https://taotoken.net/api api_key_env TAOTOKEN_API_KEY # 默认模型可在各 Agent 里覆盖 default_model claude-sonnet-4-5 # 请求超时(秒) timeout 120 # 每个 Agent 的会话目录与格式 [[agents]] name claude-code path ~/.claude/projects format jsonl # 该 Agent 走哪个 provider provider taotoken [[agents]] name codex path ~/.codex/sessions format jsonl provider taotoken [[agents]] name cursor path ~/.cursor/projects format jsonl provider taotoken [[agents]] name gemini-cli path ~/.gemini format jsonl provider taotoken [[agents]] name opencode path ~/.local/share/opencode format jsonl provider taotoken [[agents]] name qwen-code path ~/.qwen/projects format jsonl provider taotoken [[agents]] name kimi path ~/.kimi/sessions format jsonl provider taotoken3.2 设置环境变量Key 不要写进 config.toml用环境变量注入避免误提交到 git。# 写入 shell 配置zsh 用 ~/.zshrcbash 用 ~/.bashrc echo export TAOTOKEN_API_KEYsk-你的Key ~/.zshrc source ~/.zshrc # 验证变量已生效 echo $TAOTOKEN_API_KEY | head -c 8 # 期望输出 sk-xxxxx 前几位注意如果你在 CI 或容器里跑索引用 secrets 注入TAOTOKEN_API_KEY不要 echo 到日志。3.3 各 Agent 的 base_url 配置要让 Agent 的调用也走 TaoToken需要在各工具里改 base_url。以 Claude Code 为例设置环境变量即可export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEY$TAOTOKEN_API_KEYCodex 和 Cursor 在各自的设置里把 OpenAI base_url 改成https://taotoken.net/apiKey 填同一个。这样所有 Agent 的会话日志里模型名和用量口径一致索引后做成本归因不会出现同一模型两个名字的情况。4. 索引构建与查询验证4.1 初始化数据库第一次运行需要建表包括会话主表、消息表、FTS5 虚拟表。cd ~/.agents-index go run ./cmd/agents-index init --config config.toml # 期望输出 # [init] created sessions.db # [init] created tables: sessions, messages, messages_fts4.2 全量扫描构建索引首次扫描会遍历所有配置的 Agent 目录解析 JSON Lines写入 SQLite。日志多的话第一次会慢我实测 5GB 左右的 Claude Code 日志在 SSD 上大约 6 分钟。go run ./cmd/agents-index index --config config.toml --full # 期望输出 # [scan] claude-code: 1284 files, 39201 messages # [scan] codex: 312 files, 8804 messages # [scan] cursor: 96 files, 2103 messages # [index] committed 50108 messages in 6m12s4.3 增量索引日常用增量模式只处理 mtime 变化的文件秒级完成。go run ./cmd/agents-index index --config config.toml --incremental # 期望输出 # [scan] changed files: 7 # [index] committed 143 messages in 1.2s4.4 全文检索验证用 FTS5 查关键词跨所有 Agent 返回命中会话。go run ./cmd/agents-index search --config config.toml 限流 --limit 10 # 期望输出 # [claude-code] 2026-06-10 14:22 sessionabc123 score8.4 # ...触发限流建议降低并发... # [codex] 2026-06-11 09:03 sessiondef456 score6.1 # ...rate limit exceeded...4.5 用量统计与 ccusage 对照按天统计 token 用量输出格式对齐 ccusage方便直接 diff。go run ./cmd/agents-index usage daily --config config.toml # 期望输出 # Date Agent Input Output Cache-Read # 2026-06-10 claude-code 120340 45210 880000 # 2026-06-10 codex 30120 12040 0 # 2026-06-11 claude-code 98220 38100 720000对照 ccusage 时只比 Claude Code 那一行因为 ccusage 不覆盖其他 Agent。# 如果装了 ccusage npx ccusagelatest daily # 把两边 claude-code 的 input/output 相加对比误差应在 1% 以内提示如果两边差异较大先检查时区。ccusage 默认本地时区索引工具默认 UTC用--timezone Asia/Shanghai对齐。4.6 单会话深挖定位到某个会话后直接看它的完整用量和消息。go run ./cmd/agents-index session show --config config.toml abc123 # 期望输出 # sessionabc123 agentclaude-code modelclaude-sonnet-4-5 # messages42 input120340 output45210 cache_read880000 # first2026-06-10T14:02:11Z last2026-06-10T15:41:03Z5. 本篇常见错排查5.1 报错no such module: fts5SQLite 没编译 FTS5。macOS 自带 sqlite3 通常有Linux 上如果用的是精简版需要重装。# Ubuntu/Debian sudo apt install -y libsqlite3-dev # 重新编译 Go 程序时确保 CGO 开启 CGO_ENABLED1 go build ./cmd/agents-index5.2 报错permission denied读取 Agent 目录某些 Agent 目录权限是 700当前用户不是属主。确认属主后要么切用户跑要么改权限。ls -ld ~/.claude/projects # 如果属主不是当前用户 sudo chown -R $USER ~/.claude/projects5.3 索引后搜不到中文FTS5 默认 unicode61 对中文按字切分效果一般。改成 trigram 分词器或者查询时用双引号包短语。[search] tokenizer trigram改完需要重建索引agents-index index --full --rebuild-fts。5.4 TaoToken 请求返回 401Key 没读到或已失效。先确认环境变量再确认 Key 在控制台是否被禁用。echo $TAOTOKEN_API_KEY curl -s https://taotoken.net/api/models \ -H Authorization: Bearer $TAOTOKEN_API_KEY | head -c 200 # 期望返回模型列表 JSON若返回 401 说明 Key 有问题5.5 首次扫描卡住不动大概率是某个巨型日志文件在解析。看日志确认卡在哪个文件临时用max_file_mb跳过。tail -f ~/.agents-index/index.log # 如果卡在某个 2GB 文件把 max_file_mb 调到 256 重跑5.6 用量和 ccusage 对不上先对齐时区再确认 ccusage 版本。老版本 ccusage 不统计 cache creation tokens会导致 input 偏小。npx ccusagelatest --version # 建议 0.8.0 以上6. 把统一 Key 和本地索引接起来索引建好之后真正省事的是把 TaoToken 的统一 Key 贯穿到所有 Agent。这样新增一个 Agent 时只要在 config.toml 里加一个[[agents]]块、在工具里改一次 base_url索引和用量归因自动生效不用再为每个工具单独配 Key 和统计脚本。如果你主要做长期编码和 Agent 编排建议直接上 Coding Plan把多个模型的调用额度统一管理https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。日常想快速验证某个模型在会话里的表现用模型对话页面直接试https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。Key 管理和接入文档分别在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 和 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。最后留一个我踩过的坑索引数据库别放在 iCloud 或 Dropbox 同步目录里SQLite 的 WAL 文件在同步过程中容易损坏我因此重建过一次索引。放在本地~/.agents-index/下需要备份时用sqlite3 sessions.db .backup backup.db导出比直接拷文件安全。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。