芥末
发布于 2026-05-11 / 0 阅读
0
0

用 AgentSight 看清 ANOLISA 中 Agent 的 Token 消耗明细

Agent 跑起来之后,真正难管的往往不是“能不能回答”,而是“它到底花了多少 Token、为什么会花这么多”。

一个 Agent 可能会持续处理工单、执行系统巡检、调用工具、读取历史上下文、生成中间推理,再把结果返回给用户。每一次大语言模型 LLM(Large Language Model,大语言模型)调用都会产生 Token 成本,但传统账单通常只给出总量,很难回答几个关键问题:

  • 哪个 Agent 消耗最多?
  • 哪个会话突然变贵?
  • 是系统提示词太长,还是历史消息不断膨胀?
  • 工具调用是否反复回放上下文?
  • Agent 是否卡住后还在持续产生无效调用?

AgentSight 是 Agentic OS(ANOLISA)里的可观测组件,核心目标就是把 Agent 的运行状态和 Token 消耗拆成可追踪的明细账。它不要求业务逻辑大改,而是在运行侧采集 Agent 状态、LLM 调用、审计事件、会话和对话链路,再通过命令行或 Dashboard 展示出来。

flowchart LR
    U[用户请求] --> A[Agent]
    A --> L[LLM 调用]
    A --> S[Skill / 工具调用]
    A --> H[历史上下文回放]

    L --> AS[AgentSight 采集]
    S --> AS
    H --> AS
    A --> AS

    AS --> T[Token 统计]
    AS --> AU[审计事件]
    AS --> ST[Agent 状态]
    AS --> D[可视化 Dashboard]
    AS --> CLI[CLI 查询]

AgentSight 要解决的是两个层面的问题:运行状态是否健康,以及 Token 钱花到哪里了。


AgentSight 能观察什么

AgentSight 不是单纯的 Token 计数器。Agent 系统的问题通常会交织在一起:进程离线、会话无响应、LLM 调用变慢、工具调用次数异常、历史消息过长,最后都会表现为体验变差或成本升高。

它主要覆盖这些数据:

观测对象能看到什么典型用途
Agent 进程状态在线、离线、卡死、活跃会话判断 Agent 是否正常工作
会话 Session单个会话的 Token 总量、调用次数、耗时找出异常昂贵的会话
对话 Trace每轮对话里的 LLM 调用、工具调用、输入输出 Token定位成本发生在哪一步
审计事件LLM 调用记录、进程操作记录排查异常行为和调用链路
Token 趋势按时间、Agent、模型维度统计对比不同时间段和不同 Agent 的成本变化
优化效果压缩前后 Token 差异评估 Tokenless 优化是否有效

一屏看清 Agent 健康状态

Agent 长时间运行时,最怕的问题不是报错,而是“悄悄坏掉”:进程还在,但不响应;任务中断了,但没有告警;某个 Agent 离线了,直到业务受影响才被发现。

AgentSight 的可视化面板会把这些状态集中展示出来,包括 Agent 健康状态、活跃会话、异常中断和卡死进程。

AgentSight 可视化面板

这个面板的价值在于把运行状态从“人工登录机器排查”变成“集中观察”。右侧状态区域可以查看当前 Agent 进程是否正常,出现离线或 hang(无响应)时可以触发告警;对于卡死进程,还可以配合重启能力让 Agent 尽快恢复。

在 Agent 运维里,健康状态和成本状态最好放在一起看。因为一个卡住的 Agent 可能继续重试、重复调用模型或不断回放上下文,最后表现为 Token 消耗异常升高。


Token 为什么会失控

很多人会低估 Agent 的 Token 消耗,是因为只按“用户输入”和“最终回答”来估算成本。实际运行中,一次 Agent 任务通常包含更多内容:

sequenceDiagram
    participant User as 用户
    participant Agent as Agent
    participant LLM as LLM
    participant Skill as Skill / 工具

    User->>Agent: 杭州今日天气
    Agent->>LLM: 系统提示词 + 历史消息 + 用户问题 + 工具描述
    LLM-->>Agent: 决定调用天气 Skill
    Agent->>Skill: 查询天气
    Skill-->>Agent: 返回天气数据
    Agent->>LLM: 系统提示词 + 历史消息 + 工具结果 + 用户问题
    LLM-->>Agent: 生成最终回答
    Agent-->>User: 返回天气结果

这里最容易被忽略的是第二次 LLM 调用。Agent 为了让模型理解上下文,往往会把前面的消息、工具调用结果、系统提示词和必要的历史记录再次发送给模型。工具调用越多,回放次数越多;历史窗口越长,每次调用的输入 Token 就越大。

可以用一个简化公式理解:

单次任务 Token 成本
≈ Σ 每次 LLM 调用的输入 Token
  + Σ 每次 LLM 调用的输出 Token

每次输入 Token
≈ 系统提示词 + 历史消息 + 用户问题 + 工具描述 + 工具返回结果

所以,Agent 的成本并不只取决于用户问了什么,还取决于它为了完成任务绕了多少步、带了多少历史、调用了多少工具。


一个简单天气查询也可能消耗大量 Token

以“杭州今日天气”这种单轮查询为例,用户输入很短,直觉上成本应该很低。但在 Agent 场景里,如果系统提示词较长、工具说明较多、历史上下文不断回放,实际 Token 数可能远高于预期。

AgentSight 面板可以直接显示这类调用的 Token 消耗。

AgentSight Token 消耗数据

从 Token 构成看,Agent 任务里经常出现“输入 Token 远大于输出 Token”的情况。原因不是最终回答很长,而是模型每次被调用时都要接收系统提示词、历史上下文、工具定义和中间结果。

再看一次调用过程,用户询问天气后,Agent 产生了两次大模型调用:一次用于判断和选择天气 Skill,另一次基于 Skill 返回结果生成回答。

Agent 调用过程

这类链路里,真正需要关注的是每一次 LLM 调用的输入 Token 和耗时。如果工具调用次数增加,历史消息就可能被多次带入,输入 Token 会持续上升。

最终 Agent 给出的回答可能很短,但成本已经在中间链路里发生了。

Agent 输出结果

这个例子说明了一个常见误区:最终输出短,不代表整次任务便宜。Agent 的主要成本经常藏在“决策、调用工具、读取历史、拼接上下文”的过程中。


按会话和对话拆 Token 明细

只看总 Token 没有排查价值。AgentSight 把消耗拆成两个常用粒度:会话级和对话级。

粒度关注点适合排查的问题
会话级一个 Session 总共用了多少 Token哪个 Agent 或哪次会话整体异常昂贵
对话级单条对话链路里每一步用了多少 Token哪次 LLM 调用、哪个 Skill、哪段上下文导致成本升高

会话级与对话级 Token 示例

会话级视角适合先找异常点。比如某个 Agent 的平均 Token 消耗突然升高,或者某个 Session 比其他会话贵很多,就可以从这里开始下钻。

对话级视角适合做精确定位。一次对话中,Token 可能消耗在这些地方:

  • System Prompt 太长;
  • History 窗口持续膨胀;
  • 工具描述或工具返回结果过大;
  • 某个 Skill 被重复调用;
  • Agent 决策路径过长,产生多轮 LLM 调用;
  • 模型输入里包含了不必要的旧上下文。

AgentSight 还支持按时间段、Agent、模型等维度做查询和对比,适合观察趋势变化。

按时间、Agent、模型维度查询

如果某一天 Token 消耗突然抬升,可以先按时间定位异常区间,再按 Agent 维度找到责任进程,最后进入 Session 和 Trace 查看具体调用链路。


从“总账单”到“明细账”的排查路径

排查 Token 成本时,可以按这个顺序走:

flowchart TD
    A[发现 Token 总量升高] --> B[按时间段查看趋势]
    B --> C[按 Agent 维度排序]
    C --> D[定位异常 Session]
    D --> E[进入对话 Trace]
    E --> F{成本主要在哪里?}

    F -->|System Prompt| G[精简系统提示词]
    F -->|History| H[压缩或裁剪历史窗口]
    F -->|Skill 调用| I[减少重复调用或优化工具返回]
    F -->|模型输出| J[限制输出格式和长度]
    F -->|异常重试| K[排查错误和重试策略]

关键不是一上来就“压缩所有东西”,而是先知道成本来源。不同来源对应的优化方法完全不同:

成本来源表现优化方向
系统提示词过长每次 LLM 调用输入 Token 都很高拆分角色说明,删除重复规则,保留必要约束
历史消息过长对话越往后越贵摘要历史、滑动窗口、只保留关键状态
工具返回过大调用某个 Skill 后 Token 激增压缩工具返回,只返回模型需要的字段
工具重复调用Trace 中同类 Skill 多次出现增加缓存、优化决策提示、限制重试次数
异常重试短时间内大量相似调用查看审计事件,定位失败原因和重试策略
输出冗长输出 Token 占比高约束回答格式、设置最大输出长度

ANOLISA 还提供 Tokenless 优化工具包,主要通过模式压缩、响应压缩和命令重写降低上下文窗口消耗。AgentSight 可以显示优化前后的 Token 节省效果,方便判断压缩策略是否真的保留了语义,同时减少了输入成本。

Token 节省与优化详情

优化前后内容对比

这类对比适合用来验证优化效果:如果压缩后 Token 降了,但模型仍能得到完成任务所需的信息,说明压缩是有效的;如果压缩导致模型频繁补问或调用错误工具,就需要调整压缩规则。


ANOLISA v0.2 相关能力

Agentic OS(ANOLISA)v0.2 中,多个组件都围绕 Agent 运行效率、可观测性和安全性做了增强。

组件 / 能力更新点解决的问题
小规格实例优化2C2G 实例初始可用内存提升,OpenClaw 并发会话数量提升,Agent 冷启动时间降低降低小规格机器运行 Agent 的资源压力
Copilot Shell认证界面升级,内置多种模型提供商配置,支持 RAM(Resource Access Management,访问控制)角色授权降低模型接入和云上认证配置成本
AgentSight新增可视化面板、健康监控、离线告警、卡死进程重启、Token 分析、轨迹分析能力让 Agent 状态和 Token 明细可观察、可追溯
AgentSecCore支持 Skill 完整性自动化签名校验降低 Skill 被篡改的风险
OS Skills内置 sysom-diagnosis 系统诊断能力支持系统级故障诊断
Tokenless通过模式压缩、响应压缩、命令重写降低上下文 Token控制 Agent 上下文窗口成本

在阿里云 ECS 上使用 AgentSight

云上使用方式适合希望快速体验 ANOLISA 和 AgentSight 的场景。ECS(Elastic Compute Service,云服务器)实例使用 Agentic 版 Alibaba Cloud Linux 镜像后,可以直接进入 Copilot Shell 并配置模型授权。

创建 ECS 实例

创建实例时需要注意三点:

  • 内存建议大于 2 GiB;
  • 系统镜像选择 Alibaba Cloud Linux 4 LTS 64位 Agentic 版
  • 绑定公网 IP,可以使用 EIP(Elastic IP Address,弹性公网 IP)或公网带宽。

其他参数可以按默认配置开始。

配置模型授权

登录实例后,系统会自动进入 Copilot Shell,也就是 cosh。首次使用需要配置模型授权。云上环境可以使用 Aliyun Authentication,这样可以减少手工配置模型密钥和访问权限的步骤。

Copilot Shell 认证配置界面

这个界面用于选择认证方式和模型提供商。配置完成后,就可以通过自然语言、命令行或 Dashboard 查询 Agent 运行状态和 Token 消耗。


方式一:用自然语言查询

cosh 中可以直接输入自然语言指令,让系统调用 AgentSight 查询数据。

示例:

今天 Token 用了多少?
帮我查一下今天的 LLM 调用记录

这种方式适合临时排查,不需要记具体命令。


方式二:用 CLI 查询

CLI(Command Line Interface,命令行界面)适合脚本化和终端排查。

查询 Token 用量:

agentsight token

查询最近审计事件:

agentsight audit

按进程 ID 和事件类型过滤审计事件:

agentsight audit --pid 12345 --type llm

查看汇总统计:

agentsight audit --summary

扫描系统中运行的 AI Agent:

agentsight discover

列出已知 Agent 类型:

agentsight discover --list-known

方式三:打开可视化 Dashboard

Dashboard 服务会启动一个 HTTP API(Application Programming Interface,应用程序编程接口)服务器,并提供嵌入式 Web 界面。

sudo agentsight serve --host 0.0.0.0 --port 7396

访问地址:

http://<服务器公网IP>:7396

使用公网访问时,需要确认服务器防火墙或安全组已经放行 7396 端口。

Dashboard 主要可以查看这些内容:

  • Token 消耗总览;
  • 当前 Agent 进程状态;
  • Agent 卡死后的重启入口;
  • 会话中断诊断;
  • Session 和 Trace 的 Token 明细;
  • 模型提示词、思考过程和调用链路;
  • Tokenless 优化前后的节省效果。

本地从源码部署 ANOLISA 并使用 AgentSight

本地部署适合需要阅读源码、二次开发、集成自有环境的场景。ANOLISA 已开源,可以从源码构建 Copilot Shell 和 AgentSight。

安装 Node.js

Copilot Shell 依赖 Node.js 和 npm,要求:

  • Node.js >= 20;
  • npm >= 10。

Alibaba Cloud Linux 4 可以直接使用系统仓库安装:

sudo dnf install -y nodejs npm make gcc-c++

如果其他发行版的软件仓库版本过低,可以用 nvm 安装 Node.js 20:

if command -v node &>/dev/null && node -v | grep -qE '^v(2[0-9]|[3-9][0-9])'; then
  echo "Node.js $(node -v) 已安装,跳过"
else
  curl -fsSL --connect-timeout 15 --max-time 60 \
    https://gitee.com/mirrors/nvm/raw/v0.40.3/install.sh | bash

  source "$HOME/.$(basename "$SHELL")rc"

  export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node/

  nvm install 20
  nvm use 20
fi

node -v
npm -v

期望版本:

node v20.x.x 或更高
npm  10.x.x 或更高

安装 Rust 和 AgentSight 系统依赖

AgentSight 构建需要 Rust,要求 Rust >= 1.91.0。

Alibaba Cloud Linux 4 可以先安装构建工具,再通过 rustup 安装 Rust:

sudo dnf install -y gcc make

Ubuntu 24.04 可以安装对应版本的 rustccargo

sudo apt install -y rustc-1.91 cargo-1.91 gcc make
sudo update-alternatives --install /usr/bin/cargo cargo /usr/bin/cargo-1.91 100

AgentSight 还需要一些系统依赖。

dnf 系发行版:

sudo dnf install -y clang llvm libbpf-devel \
  elfutils-libelf-devel zlib-devel openssl-devel \
  perl perl-IPC-Cmd

sudo dnf install -y kernel-devel-$(uname -r)

apt 系发行版:

sudo apt-get update -y

sudo apt-get install -y clang llvm libbpf-dev \
  libelf-dev zlib1g-dev libssl-dev perl \
  linux-headers-$(uname -r)

AgentSight 对 Linux 内核也有要求:

  • Linux 内核版本 >= 5.10;
  • 启用 BTF(BPF Type Format);
  • /sys/kernel/btf/vmlinux 文件存在。

可以这样检查:

test -e /sys/kernel/btf/vmlinux && echo "BTF 可用" || echo "BTF 不可用"

检查依赖版本

依赖安装完成后,可以统一检查:

node -v
npm -v
rustc --version
cargo --version
python3 --version
uv --version
clang --version

期望结果大致如下:

node    v20.x.x 或更高
npm     10.x.x 或更高
rustc   1.91.0 或更高
cargo   1.91.0 或更高
Python  3.12.x
uv      0.x.x
clang   14 或更高

构建 Copilot Shell

Copilot Shell 是 Node.js / TypeScript 项目,采用 npm workspaces 的 monorepo 布局。

cd src/copilot-shell
make deps
make build

构建产物是:

dist/cli.js

可以直接运行:

node dist/cli.js

也可以安装到系统 PATH,生成 coshcocopilot 等命令:

sudo make install
cosh

构建 AgentSight

进入 AgentSight 目录并构建:

cd src/agentsight
make build

构建产物是:

target/release/agentsight

安装到系统路径:

sudo make install

安装后可以使用这些命令:

sudo agentsight trace
agentsight token
agentsight audit

其中:

  • sudo agentsight trace:启动 AI Agent 活动追踪;
  • agentsight token:查询 Token 用量;
  • agentsight audit:查询审计事件。

Dashboard、CLI 和自然语言查询方式与云上安装后的使用方式一致。


使用 AgentSight 排查 Token 问题时要注意什么

不要只看总量

总 Token 只能说明“花得多不多”,不能说明“为什么多”。排查时要从时间趋势进入,再按 Agent、Session、Trace 逐层下钻。

输入 Token 异常更常见

Agent 场景里,输入 Token 过高很常见,因为模型输入通常包含系统提示词、历史消息、工具说明和工具结果。输出短并不意味着任务便宜。

工具返回要控制粒度

很多 Skill 或 MCP(Model Context Protocol,模型上下文协议)工具会返回大量字段,但模型完成任务可能只需要其中几个值。工具返回越冗长,后续上下文回放成本越高。

压缩要验证语义

Tokenless 压缩的目标不是简单删内容,而是在保留任务必要信息的前提下降低 Token。压缩后要结合 Trace 看模型是否还能正确调用工具、正确生成结果。

Dashboard 端口不要直接裸露

agentsight serve --host 0.0.0.0 --port 7396 会绑定所有网络接口。如果在公网机器上使用,需要配合安全组、访问控制或内网代理,避免把观测面板暴露给不可信网络。


AgentSight 的核心价值可以概括为一句话:把 Agent 的运行过程从黑箱变成可观测链路。只有知道每个 Agent、每个会话、每次 LLM 调用和每段上下文分别消耗了多少 Token,才能判断该优化提示词、裁剪历史、压缩工具返回,还是处理异常重试和卡死进程。


评论