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 健康状态、活跃会话、异常中断和卡死进程。
这个面板的价值在于把运行状态从“人工登录机器排查”变成“集中观察”。右侧状态区域可以查看当前 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 消耗。
从 Token 构成看,Agent 任务里经常出现“输入 Token 远大于输出 Token”的情况。原因不是最终回答很长,而是模型每次被调用时都要接收系统提示词、历史上下文、工具定义和中间结果。
再看一次调用过程,用户询问天气后,Agent 产生了两次大模型调用:一次用于判断和选择天气 Skill,另一次基于 Skill 返回结果生成回答。
这类链路里,真正需要关注的是每一次 LLM 调用的输入 Token 和耗时。如果工具调用次数增加,历史消息就可能被多次带入,输入 Token 会持续上升。
最终 Agent 给出的回答可能很短,但成本已经在中间链路里发生了。
这个例子说明了一个常见误区:最终输出短,不代表整次任务便宜。Agent 的主要成本经常藏在“决策、调用工具、读取历史、拼接上下文”的过程中。
按会话和对话拆 Token 明细
只看总 Token 没有排查价值。AgentSight 把消耗拆成两个常用粒度:会话级和对话级。
| 粒度 | 关注点 | 适合排查的问题 |
|---|---|---|
| 会话级 | 一个 Session 总共用了多少 Token | 哪个 Agent 或哪次会话整体异常昂贵 |
| 对话级 | 单条对话链路里每一步用了多少 Token | 哪次 LLM 调用、哪个 Skill、哪段上下文导致成本升高 |
会话级视角适合先找异常点。比如某个 Agent 的平均 Token 消耗突然升高,或者某个 Session 比其他会话贵很多,就可以从这里开始下钻。
对话级视角适合做精确定位。一次对话中,Token 可能消耗在这些地方:
- System Prompt 太长;
- History 窗口持续膨胀;
- 工具描述或工具返回结果过大;
- 某个 Skill 被重复调用;
- Agent 决策路径过长,产生多轮 LLM 调用;
- 模型输入里包含了不必要的旧上下文。
AgentSight 还支持按时间段、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 降了,但模型仍能得到完成任务所需的信息,说明压缩是有效的;如果压缩导致模型频繁补问或调用错误工具,就需要调整压缩规则。
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,这样可以减少手工配置模型密钥和访问权限的步骤。
这个界面用于选择认证方式和模型提供商。配置完成后,就可以通过自然语言、命令行或 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 可以安装对应版本的 rustc 和 cargo:
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,生成 cosh、co、copilot 等命令:
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,才能判断该优化提示词、裁剪历史、压缩工具返回,还是处理异常重试和卡死进程。








