Skip to content

可观测性

可观测性(Observability)是 Snail AI 平台的核心运维能力之一。它为每一次 AI 对话生成结构化的追踪数据,帮助开发者和运营人员深入理解智能体的推理过程、工具调用行为和性能瓶颈。

Snail AI 的可观测性设计参考了 Langfuse 的 Observation 追踪模型,并深度集成了客户端 Micrometer ObservationRegistry,实现了从服务端编排到客户端执行的全链路追踪。

核心架构

追踪模型

Snail AI 采用 Trace -> Observation 的两层追踪模型:

  • Trace(追踪):代表一次完整的用户交互轮次(一问一答),是追踪数据的最顶层容器。每个 Trace 包含输入、输出、耗时、状态、标签等元信息,以及一棵由多个 Observation 组成的树形结构。
  • Observation(观测):代表 Trace 内部的一个具体执行步骤,如模型调用、工具执行、思维链推理等。Observation 之间通过 parentObservationId 形成父子关系,构成完整的执行树。

观测类型 (Observation Type)

每个 Observation 都有一个明确的类型标识,用于区分不同的执行步骤:

类型说明典型场景
GENERATION大模型生成调用调用 GPT、Claude、Ollama 等模型进行推理,记录输入 prompt、输出内容、Token 用量、耗时、模型参数等
TOOL工具调用执行MCP 工具调用的实际执行过程,包含工具名称、输入参数、返回结果和执行耗时
THINKING思维链/推理过程记录推理模型(如 OpenAI o1/o3、Claude 等)的思维链内容,展示模型的内部推理过程
SPAN通用执行跨度记录任意内部处理阶段的耗时和上下文,如责任链节点执行、拦截器处理等
EVENT离散事件标记标记某个关键节点的状态变化或事件触发,如对话开始、模型切换、错误发生等
AGENT智能体编排步骤记录智能体责任链中的编排和路由决策过程
RETRIEVER检索操作RAG 知识库的向量检索、BM25 检索、融合排序等过程
EMBEDDING向量化操作文本向量化(Embedding)调用,记录输入文本和生成的向量维度

类型图标与颜色

在前端可视化中,每种观测类型使用不同的图标和颜色进行区分,便于在追踪树和瀑布图中快速识别:

  • GENERATION -- 紫色,表示 AI 生成
  • TOOL -- 蓝色,表示工具调用
  • THINKING -- 橙色,表示思维过程
  • SPAN -- 灰色,表示通用跨度
  • EVENT -- 绿色,表示事件
  • AGENT -- 青色,表示智能体编排
  • RETRIEVER -- 黄色,表示检索
  • EMBEDDING -- 粉色,表示向量化

观测级别 (Observation Level)

每个 Observation 都可以标记一个级别,用于表示该步骤的严重程度或重要性:

级别说明使用场景
DEBUG调试信息仅在调试模式下关注的详细信息,如内部参数传递、缓存命中等
DEFAULT默认级别正常执行的 Observation,大多数步骤使用此级别
WARNING警告执行中出现非致命性问题,如模型降级、重试成功、Token 接近上限等
ERROR错误执行失败或异常,如模型调用超时、工具执行报错、RAG 检索失败等

在追踪列表和详情页中,WARNING 和 ERROR 级别的 Observation 会以醒目的颜色标注,便于快速定位问题。

客户端 Micrometer 集成

Snail AI 的 Agent Client SDK 深度集成了 Spring Micrometer 的 ObservationRegistry,将 AI 交互全链路的关键指标自动采集为 Observation 数据:

采集指标

通过 Micrometer 集成,以下指标会自动采集并上报:

  • 模型调用耗时:包括首 Token 时间(Time to First Token)和总耗时
  • Token 用量:输入 Token 数、输出 Token 数、总 Token 数
  • 工具调用:工具名称、参数、返回值、执行耗时
  • 思维链内容:推理模型的内部思维过程
  • 错误信息:异常类型、错误消息、堆栈摘要

自定义扩展

开发者可以通过 Agent Client SDK 的拦截器机制,在 Micrometer ObservationRegistry 中注册自定义的 ObservationHandler,扩展采集维度:

java
@Bean
public ObservationHandler<Observation.Context> customObservationHandler() {
    return new ObservationHandler<>() {
        @Override
        public void onStart(Observation.Context context) {
            // 自定义采集逻辑
        }

        @Override
        public boolean supportsContext(Observation.Context context) {
            return true;
        }
    };
}

功能模块

可观测性包含以下子模块:

模块说明文档链接
追踪详情Trace 列表、观测树、瀑布图、工具调用检查追踪详情
统计分析Agent 维度的活跃用户、对话量、消息趋势等统计统计分析
评分系统对 Trace 和 Observation 进行多维度评分评分系统

数据流向

以下展示了一次完整对话中,可观测性数据的产生和消费路径:

下一步

Apache 2.0 Licensed