Agent 可观测概述2:我如何理解 Agent 的关键对象


这是 Agent 可观测性系列的第二篇文章。上一篇我们聊了为什么 Agent 让”看得见”变难,这一篇来聊聊:在 Agent 的世界里,我们到底要观测什么?

从一个类比说起

做传统微服务的可观测性时,我们有一套成熟的心智模型:

  • 服务是基本单元
  • 依赖是服务之间的调用关系
  • 链路是一次请求经过的所有服务

这套模型之所以有效,是因为它准确地抽象了微服务架构中的核心对象和关系。

那么问题来了:Agent 的世界里,核心对象是什么?它们之间的关系又是什么?

在做 Agent 可观测性的过程中,我逐渐形成了一套自己的理解框架。这篇文章就来分享这个框架。


一、Agent 世界的四类核心对象

经过一段时间的实践,我把 Agent 世界中需要观测的对象归纳为四类:

1. Agent(智能体)

这是最核心的对象。

但什么是 Agent?从可观测的角度,我给它的定义是:具备自主推理能力,能够主动发起对 LLM 的请求并根据响应调用外部工具的工作负载。

注意几个关键词:

  • 自主推理:不是简单的 if-else 逻辑,而是基于 LLM 的概率推理
  • 主动发起:Agent 不是被动等待请求,它会主动”思考”和”行动”
  • 调用工具:Agent 的能力边界取决于它能调用哪些工具

从运维视角看,Agent 通常是一个长期运行的进程(或 Pod),它的特征包括:

  • 频繁向 LLM 服务发起 HTTPS 请求
  • 同时连接多个下游服务(数据库、API、外部工具)
  • 流量模式是”长文本”的 Request-Response

2. Model Source(模型源)

Agent 的”大脑”不在本地,而是在远程的 LLM 服务。这个服务就是模型源

模型源可以分两类:

  • 公有云模型:OpenAI、Anthropic、Google Gemini 等
  • 私有化部署:Ollama、vLLM、TGI 等自建模型服务

为什么模型源重要?

因为 Agent 与模型源之间的通信,承载了最核心的语义信息

  • Prompt(Agent 想做什么)
  • Response(模型建议怎么做)
  • Tool Calls(Agent 决定执行什么)

如果你只能观测一个地方,那就观测 Agent 与模型源之间的流量。

3. Tool(工具)

工具是 Agent 产生实际效果的载体。

Agent 本身不能直接改变世界——它需要通过调用工具来执行操作。一个 Agent 可能调用的工具包括:

基础设施工具

  • Kubernetes API(kubectl)
  • 云服务 CLI(aws、gcloud)
  • 容器运行时命令

数据工具

  • 数据库(PostgreSQL、Redis)
  • 向量库(Milvus、Pinecone)
  • 对象存储

外部 API

  • GitHub、Slack、Jira 等 SaaS 服务
  • MCP (Model Context Protocol) 服务器

工具调用是最容易出问题的环节。Agent 的一个错误推理,可能导致:

  • 误删数据
  • 泄露敏感信息
  • 执行危险命令

4. Agent-to-Agent Link(协作链路)

在复杂场景中,Agent 往往不是单打独斗,而是多个 Agent 协作完成任务。

比如:

  • Planner Agent 负责拆解任务
  • Executor Agent 负责执行具体操作
  • Reviewer Agent 负责检查结果

这些 Agent 之间的协作关系,构成了协作链路

协作链路带来的观测挑战是:一个任务的执行可能跨越多个 Agent,每个 Agent 有自己的推理过程和工具调用,如何把它们串联起来?


二、从”资产与链路”的角度理解可观测性

有了上面的四类对象,我们可以换一个视角来理解可观测性。

传统微服务的可观测性,本质上是在做两件事:

  1. 资产盘点:系统里有哪些服务?每个服务的状态如何?
  2. 链路追踪:一次请求经过了哪些服务?每个环节的耗时和状态如何?

Agent 可观测性也可以用这个框架来理解:

资产层面:我有哪些 Agent?它们依赖什么?

  • 集群里运行了哪些 Agent?
  • 每个 Agent 连接了哪些模型源?
  • 每个 Agent 可以调用哪些工具?
  • Agent 之间有哪些协作关系?

这是静态的资产拓扑,回答的是”系统长什么样”。

链路层面:一次任务经历了什么?

  • Agent 收到了什么输入?
  • Agent 向模型发送了什么 Prompt?
  • 模型返回了什么建议?
  • Agent 调用了哪些工具?参数是什么?结果是什么?
  • 如果涉及多 Agent 协作,任务是如何在 Agent 之间流转的?

这是动态的执行链路,回答的是”这次任务发生了什么”。

把两者结合起来,形成的图景是:

┌─────────────────────────────────────────────────────────┐
│                    资产拓扑                              │
│  ┌─────────┐    A2L     ┌─────────┐                    │
│  │  Agent  │ ────────→ │  Model  │                    │
│  │         │            │  Source │                    │
│  └────┬────┘            └─────────┘                    │
│       │ A2T                                            │
│       ▼                                                │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐                │
│  │  Tool   │  │  Tool   │  │  Tool   │                │
│  │ (Infra) │  │ (Data)  │  │ (SaaS)  │                │
│  └─────────┘  └─────────┘  └─────────┘                │
│                                                        │
│       A2A (Agent-to-Agent)                            │
│  ┌─────────┐            ┌─────────┐                   │
│  │ Planner │ ────────→ │Executor │                   │
│  │  Agent  │            │  Agent  │                   │
│  └─────────┘            └─────────┘                   │
└─────────────────────────────────────────────────────────┘

其中的三种链路类型:

  • A2L (Agent-to-LLM):Agent 与模型源之间的推理请求
  • A2T (Agent-to-Tool):Agent 调用工具产生实际效果
  • A2A (Agent-to-Agent):多 Agent 协作时的任务流转

三、从现有方案获得的启发

在构建 Agent 可观测性的过程中,我参考了不少现有的方案。虽然不想直接点名,但有几个共性的启发值得分享:

启发 1:SDK 埋点 vs 无侵入采集

市面上大多数 Agent 可观测方案采用 SDK 埋点的方式——在你的 Agent 代码里引入它们的 SDK,SDK 会自动上报调用数据。

这种方式的优点是:

  • 实现简单
  • 能获取到应用层的语义信息(比如 Prompt、Tool Call 参数)

缺点是:

  • 需要修改业务代码
  • 只能观测”愿意被观测”的行为
  • 难以覆盖所有 Agent 框架

另一种思路是无侵入采集:在网络层或系统调用层拦截数据,不需要修改业务代码。

这种方式的优点是:

  • 零改动
  • 能观测到所有行为,包括”没打算被观测”的
  • 更适合安全审计场景

缺点是:

  • 实现复杂
  • 加密流量需要额外处理
  • 可能有性能开销

我的选择:对于生产环境的安全可观测,无侵入采集是更好的选择。SDK 埋点适合开发调试阶段。

启发 2:关注点在”Trace”还是”Audit”

不同的可观测方案有不同的侧重点:

有些方案侧重于调试体验——帮你看清 Agent 的推理过程,方便调优 Prompt、优化 Tool 调用。这类方案的数据模型类似传统的 Distributed Tracing。

有些方案侧重于安全审计——帮你记录 Agent 的所有行为,检测异常和风险。这类方案的数据模型更像 Audit Log。

两者的差异体现在:

  • Trace 关心”延迟”,Audit 关心”完整性”
  • Trace 可以采样,Audit 必须全量
  • Trace 保留时间短,Audit 需要长期存储

我的选择:两者都需要,但在生产环境,Audit 优先于 Trace。

启发 3:数据模型要能”关联”

无论是哪种方案,一个共同的挑战是:如何把不同来源的数据关联起来

  • 网络流量 + 进程信息
  • K8s Audit Log + 容器内行为
  • Agent 推理过程 + 工具调用结果

如果这些数据是孤立的,价值会大打折扣。

设计数据模型时,关联能力应该是第一优先级。


小结

理解 Agent 世界的关键对象,是构建可观测性的基础:

  1. 四类核心对象:Agent、Model Source、Tool、Agent-to-Agent Link
  2. 两个观测维度:资产拓扑(静态)+ 执行链路(动态)
  3. 三种链路类型:A2L、A2T、A2A

在下一篇文章中,我会深入聊聊”采集”这个话题——面对这么多种类的数据,应该用什么方式采集?代码埋点、网络代理、运行时监控,各有什么权衡?


上一篇:Agent 可观测概述1: 为什么 Agent 会让”看得见”变难

下一篇:Agent 可观测概述3: 采集与还原的现实选择

评论