别再盲跑你的爱马仕了!Hermes+ Quack 给 Agent 装上「黑匣子」,每步 Token 和延迟一目了然
别再盲跑你的爱马仕了!Hermes+ Quack 给 Agent 装上「黑匣子」,每步 Token 和延迟一目了然
本文 Quack 协议部分参考自 DuckDB Lab 的深度解析
个人开发者做 Agent,最大的浪费不是硬件,是盲区。

你有没有这种感觉——
自己的 AI Agent 在后台跑了几十步,花了 $0.50,最终结果看起来还行。但你完全不知道中间发生了什么:
- 哪一步最烧 Token?
- 哪个工具调用最慢?
- 为什么有一次花了 12 秒?
- Pro 模型比 Flash 到底贵多少?
- 错误到底出在哪一步?
你只能靠猜。或者加 console.log 大海捞针。
问题不在你,在整个 Agent 生态都缺少一个给个人开发者用的可观测性工具。
ELK?太重了,一台 16GB 的服务器光 ES 就得占一半。
Datadog?15/月起,个人开发者为爱发电搞不起。SentryPerformance?15/月起,个人开发者为爱发电搞不起。SentryPerformance?26/月起,而且它看的是代码性能,不是 Agent 行为。
我要的是一个:0 成本、5 分钟搭好、一屏看清所有 Agent 行为的仪表盘。
于是有了这个项目。
三个技术选型,刚好凑成了完美方案
DuckDB — 嵌入式分析数据库
DuckDB 是个「穷人的 ClickHouse」。单文件、零配置、SQLite 一样的嵌入体验,但跑分析查询比 SQLite 快 10-100 倍。
最骚的是,它可以直接查 CSV / Parquet / JSON,连导入都不用。
Quack 协议 — DuckDB 新出的「联网」能力
2026 年 5 月,DuckDB 官方发布了 Quack 协议——一个构建在 HTTP 之上的原生远程通信协议,让 DuckDB 实例之间可以像 PostgreSQL 那样客户端-服务端通信。
更详细的 Quack 协议架构和性能基准见 DuckDB Lab 的这篇解析
几个关键数字:
- 单次往返:一次查询只需 1 次 network round trip,比 Arrow Flight SQL(至少 2 次)快一倍
- ~5,500 TPS:小事务并发性能,8 线程压测数据
- 60M 行 < 5 秒:批量传输性能
- 一行开启:
CALL quack_serve('quack:0.0.0.0', token = 'xxx')
有了它,多个 Agent 可以同时写入同一个 DuckDB,数据一致性由服务端串行化保证。
Hermes Agent — AI Agent 框架
Hermes 是有记忆、有工具调用能力的开源 Agent 框架。你正在读这篇文章用的就是它。
三个东西凑一起,就成了:
text
┌─────────────────────────────┐
│ Hermes Agent │
│ ┌───────────────────────┐ │
│ │ ObservabilityHook │ │ ← 每步自动记录
│ │ (5 行代码插桩) │──┼── action, token_cost, latency_ms
│ └──────────┬────────────┘ │
└─────────────┼───────────────┘
│ HTTP (单次往返, ~5,500 TPS)
▼
┌─────────────────────────────┐
│ Quack 协议 │ ← 一行启动
│ (localhost:8338) │
├─────────────────────────────┤
│ DuckDB (obs.db) │
│ ┌───────────────────────┐ │
│ │ agent_traces │ │ ← 结构化查询
│ │ v_expensive_tools │ │
│ │ v_slow_sessions │ │
│ │ v_daily_token_usage │ │
│ └───────────────────────┘ │
└─────────────────────────────┘
效果:一个 SQL 回答所有问题
插桩好之后,你的终端变成了 Agent 的「黑匣子分析仪」:

今日总览
sql
SELECT COUNT(*) AS 总步骤, SUM(token_cost) AS 总Token,
ROUND(AVG(latency_ms), 1) AS 平均延迟_ms
FROM agent_traces WHERE created_at >= CURRENT_DATE;
哪个工具最烧钱
sql
SELECT tool_name, SUM(token_cost) AS 总Token, COUNT(*) AS 调用次数
FROM agent_traces WHERE action = 'tool_call'
GROUP BY tool_name ORDER BY 总Token DESC LIMIT 10;
我的实测数据
text
═══ 📊 Hermes-Obs 今日仪表盘 ═══
总步骤数 总Token 总耗时_秒 活跃会话数
22 11,067 33.9 4
─── 💰 最贵工具 Top 10 ───
tool_name 调用次数 总Token 平均延迟_ms
search_content 2 105 370
edit_file 2 155 575
read_file 2 65 190
directory_tree 1 20 90
─── ⚡ 模型成本对比 ───
model 调用次数 总Token 平均延迟_ms
deepseek-v4-pro 3 9,700 6,800
deepseek-v4-flash 11 820 361
一目了然:Pro 模型占了 92% 的 Token 消耗,但只占 21% 的调用次数。 这意味着我该考虑是不是所有场景都需要 Pro。
5 分钟搭建(实测)
第一步:装 DuckDB
bash
# Windows
winget install DuckDB.cli
# macOS
brew install duckdb
# Linux
curl -fsSL https://install.duckdb.org | sh
第二步:启动服务端
bash
git clone <项目地址> hermes-obs
cd hermes-obs
# 一键安装
node bin/hermes-obs.js setup
# 启动 Quack 服务端(不要关这个终端)
node bin/hermes-obs.js start
第三步:插桩 Agent
在你 Hermes Agent 的代码里加 5 行:
typescript
import { ObsHook } from './hermes-obs/agent-hook/hook.js';
const obs = new ObsHook({ quackTarget: 'quack:localhost', token: 'dev-token' });
await obs.connect();
// 在每个工具调用前后
const stepId = obs.stepStart({ toolName: 'search_content' });
// ... 执行工具 ...
obs.stepEnd(stepId, {
action: 'tool_call',
tokenCost: 45,
latencyMs: 320,
model: 'deepseek-v4-flash',
});
第四步:打开大屏仪表盘
bash
node dashboard/server.js
# 浏览器打开 http://localhost:3000
你会看到这样的界面:
text
┌──────────┬──────────┬──────────┬──────────┐
│ 总Token │ 总步骤 │ 活跃会话 │ 错误数 │
│ 1,067 │ 22 │ 4 │ 1 │
├──────────┴──────────┴──────────┴──────────┤
│ 📈 Token 趋势 (24h 折线图) │
├──────────┬────────────────────────────────┤
│ 💰 最贵 │ ⚡ 行为分布 (饼图) │
│ 工具 Top │ think / tool_call / llm_call │
│ 10 柱状图 │ │
├──────────┼────────────────────────────────┤
│ 🐢 最慢 │ 🤖 模型成本对比 │
│ 会话 Top │ Pro vs Flash 柱状图 │
│ 5 横向图 │ │
├──────────┴────────────────────────────────┤
│ 📋 最近活动 (自动刷新,每 10 秒) │
└───────────────────────────────────────────┘
成本对比:碾压级优势
| 方案 | 月费 | RAM | 部署时间 |
|---|---|---|---|
| Hermes-Obs | $0 | < 100MB | 5 分钟 |
| ELK Stack | 0(自建)/0(自建)/200+ (云) | 16GB+ | 1-2 天 |
| Datadog APM | $15/host/月起 | — | 30 分钟 |
| Sentry Performance | $26/月起 | — | 20 分钟 |
不是「差不多便宜」,是 两个数量级的差距。
进阶玩法:部署到服务器上
一台 1C2G 的轻量云服务器(¥30/月)就够了:
bash
# 上传项目
scp hermes-obs.zip root@your-server:/opt/
# SSH 登录后一键部署
ssh root@your-server
cd /opt
unzip hermes-obs.zip
sudo bash hermes-obs/deploy/deploy.sh
部署脚本会自动:
- 安装 DuckDB + Quack
- 生成随机 Token
- 创建 systemd 守护服务(开机自启)
- 验证连接
然后你的 Agent 只需要改一行:
typescript
// 之前
const obs = new ObsHook({ quackTarget: 'quack:localhost', token: 'dev-token' });
// 之后(连服务器)
const obs = new ObsHook({
quackTarget: 'quack:obs.your-domain.com:8338',
token: 'hobs-a1b2c3d4...',
});
所有 Agent 的数据自动汇聚到一个地方。
我还能用这个做什么?
这个架构不只是「Agent 日志」,它是一个通用的 AI 可观测性底座:
- Token 预算管理:按月设限,超过告警
- 异常检测:突然的延迟飙升 → 自动通知
- 多用户统计:每个用户的 Agent 调用量和花费
- Prompt 优化:从记录中找到最长的 LLM 调用,针对性优化
- 成本分摊:不同项目挂不同 tag,月底一查就知道钱花哪了
DuckDB 的 SQL 能力意味着:任何你能想到的 Analytics 问题,一行 SQL 搞定,不需要学新的查询语言。
写在最后
做 Agent 开发快一年了,最大的感受是:你看不见的东西,你就无法优化。
之前我优化 Agent 全凭感觉——「这段 Prompt 好像长了点,减一点试试」。有了可观测性之后变成了——「search_content 平均延迟 370ms、edit_file 平均 575ms,而 llm_call 占了 92% 的 Token,我现在知道该从哪里下手了」。
从盲人摸象到数据驱动,差的只是一个 5 分钟能搭好的黑匣子。
项目完全开源,MIT 协议,随便用随便改。有想法的朋友欢迎评论区交流,觉得有用点个赞 👍 让更多被 Agent「盲操」困扰的开发者看到。
参考
- DuckDB Quack 协议:原生客户端-服务端架构全面解析 — DuckDB Lab
- DuckDB 官方文档
- Hermes Agent
— 一个被 Token 账单惊醒无数次的独立开发者
更多推荐


所有评论(0)