别再盲跑你的爱马仕了!Hermes+ Quack 给 Agent 装上「黑匣子」,每步 Token 和延迟一目了然

本文 Quack 协议部分参考自 DuckDB Lab 的深度解析

个人开发者做 Agent,最大的浪费不是硬件,是盲区。
爱马仕监控平台

爱马仕token

你有没有这种感觉——

自己的 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

部署脚本会自动:

  1. 安装 DuckDB + Quack
  2. 生成随机 Token
  3. 创建 systemd 守护服务(开机自启)
  4. 验证连接

然后你的 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「盲操」困扰的开发者看到。


参考


— 一个被 Token 账单惊醒无数次的独立开发者

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐