作为透明代理记录每一次LLM调用(prompt、回复、token、费用、延迟、工具调用),本地优先、零代码改造,解决Agent卡死不自知、账单延迟披露的工程风险。
有人让 Claude Code 开了一整夜,早上起来收到 6000 美元账单。这个故事下面的评论区里满是"我也是"。一个多 Agent 系统曾经循环了十一天,烧掉 47000 美元才被人发现。
问题在于:这些 Agent 都没有崩溃。它们在循环。一个卡住的 Agent 不会抛异常,它会一次又一次地调用模型,而每一次调用都要花钱。提供商的后台仪表盘可能要延迟好几天才能发出警告。没有东西在实时监控,也没有任何机制能对它说"不"。
所以我做了 Agentic Ledger:一款 AI Agent 的飞行记录器。本周它发布了两个版本,我想走一遍它们的功能和实现思路。
Agentic Ledger 是一个透明代理。Agent 对 LLM 的调用在发往提供商的路上的会经过它,账本会记录下每一次调用:提示词、回复、token 数量、价格、延迟、工具调用。零代码改动,只需要把 base URL 指向它即可。
pip install agentic-ledger
agenticledger start
export ANTHROPIC_BASE_URL=http://localhost:8000
这就是整套上手流程。它是本地优先的:代理、数据库和仪表盘都运行在你的机器上,你的提示词永远不会离开它。你的 API Key 原样过境,账本从不存储它们。
因为它站在网线上,所以能做到基于 SDK 的可观测性工具在架构上做不到的事:它可以拒绝一次调用。下面细说。
本周第一个版本关注的是覆盖范围和持久性。
每条网线。同样的抓取现在支持 OpenAI、Anthropic、Azure OpenAI、本地模型(LM Studio、Ollama)、网关(OpenRouter、LiteLLM),以及旗舰功能——直接接入 AWS Bedrock。Bedrock 是最难搞的:调用经过 SigV4 签名,流式响应以 AWS 的二进制事件流格式到达,而不是 SSE。账本持有自己的 AWS 凭证(仅标准链,绝不写在配置文件里),剥离调用者的身份头,重新签名每个请求,解码二进制流以重建 token 和成本。处于 Bedrock 模式的 Claude Code 和使用 boto3 的 Agent 都会被记录、计费、熔断,全程感知不到账本的存在。
重启后依然存活的循环。账本自行识别循环:有相同 system prompt 的新鲜上下文迭代会被归入一个"run",带有实时瓦片、迭代条和熔断开关。在早期版本中,这种识别是放在内存里的,所以代理重启会让每一个自动检测到的循环都变成孤儿,更糟糕的是,被停止的 run 的墙不再匹配它所卡住的循环。现在这个状态存在数据库里。阻止一个 run、重启代理,下一次迭代仍然落在同一个瓦片上,仍然被拒绝。
实时观看。打开任意一个 run,有一个叫"Calls, as they happen"的流。每一次调用在代理抓取到的那一刻就出现在那里:时间、迭代次数、模型、token 数量、延迟、成本,以及一个判定。阻止的调用是琥珀色(故意拒绝),损坏的是红色,"ok"意味着 HTTP 200。
用一个词给循环命名。对于你故意运行的循环:
agenticledger run nightly-digest -- python agent.py
你的命令原样执行。它的调用落在名为 nightly-digest 的瓦片上,明天启动就算同一次 run 的第二次迭代。加上 --project acme,整个东西自动归档。
第二个版本直接冲着 6000 美元的故事来的。
run 的详情现在实时读取花钱情况:迄今花费、每小时燃烧速率,以及一个预测("按这个速度:到早上 8 点 212 美元")。这个预测是提供商仪表盘给不了你的,因为它们落后好几天,而账本零秒延迟。
然后是我最在意的一部分:成本上限。给你的任意 run 设一个美元金额,在它运行的时候,从仪表盘上设:
一旦 run 的花费达到上限,代理拒绝下一次调用。HTTP 402, feed 里显示琥珀色,零美元。
Agent 继续敲,但敲多少次都不花钱。提高或清除上限,调用就再次放行。
上限存在数据库里,所以重启无法动摇它,而且它和命名 run 一样守护着自动检测到的循环。
80% 时触发 webhook,让你在撞墙之前就知道。
这件事之所以能做得到,完全是因为账本是在线的。仪表盘能告诉你一个失控的循环。只有站在 Agent 和模型之间的东西才能对它说不。
记录一切的一个副作用:关于 Agent 架构的争论变成了可量化的数据。compare 视图取任意两次 run 并排比较:ReAct 风格的 Agent(一次长对话,工具在同一个线程里)vs Ralph 风格的循环(每次迭代都是全新上下文),并排展示:成本差值、token 差值、墙上时钟差值、标记数量,以及两次 run 被告知内容的 diff。
在我的演示对中,Ralph 循环成本高出 41%,输出 token 燃烧量是三倍(新鲜上下文不是免费的),但墙上时钟缩短了一半,而且零标记,而 ReAct Agent 被卡环检测器抓到三次重复运行同一个失败测试。"新提示词有没有帮助"现在是一个数字,不是感觉。
有一段 4 分钟的视频展示以上全部内容。链接。
本周又教会我一件事:我自己把开发环境搞坏了好几次(错误 Python 环境中的过时安装,在 PATH 上覆盖了真实 Python 的假影子,编译给错误架构的 wheel,静默提供旧代码的服务)。每一次诊断都变成了一个产品:
agenticledger doctor
它打印出 PATH 上的每一个安装以及谁覆盖了谁,用真实的 import 探测每一个(错误架构的 wheel 会以其实际报错浮出水面),检查后台服务在提供什么,并在每个发现后附上修复它的准确命令。我机器上最糟糕的一天写出了它的规格文档。
pip install agentic-ledger
agenticledger start
仓库开源:github.com/ShekharBhardwaj/AgenticLedger。如果它有用,一颗星真的能帮助一个小项目被更多人发现。
如果你想贡献,有好的入门 issue 在等着:新增模型的定价包、关于循环标记的文档页、一个小型前端任务,以及我最喜欢的:发给我一段我的检测器漏掉的卡住循环的转录。每一份转录都会让这个标记对所有人变得更智能。
你的 Agent 会通宵运行。让它们被记录在案。
www.agentic-ledger.dev