TL;DR

003e AI-Native 系统需要新的可观测性范式:

  1. 日志的局限 — 记录发生了什么,但不理解为什么发生
  2. 意图追踪 — 记录 AI 的决策意图、推理过程和上下文
  3. 三层可观测性 — 系统层、Agent 层、意图层的立体监控
  4. 可解释性 — 不仅能发现问题,还能解释 AI 为什么做出某个决策

003e 关键洞察:最好的可观测性不是收集更多数据,而是收集更有意义的意图数据。


📋 本文结构

  1. 传统可观测性的盲区
  2. 为什么 AI-Native 系统需要新范式
  3. 意图追踪:可观测性的第三维度
  4. 实战:设计意图感知的可观测系统
  5. 从监控到理解:可解释性的崛起
  6. 反直觉洞察:少即是多
  7. 工具链与架构
  8. 结语:可观测性的终极目的

传统可观测性的盲区

可观测性三支柱

传统的可观测性建立在三个支柱之上:

  1. Metrics(指标) — CPU、内存、请求量、延迟
  2. Logs(日志) — 应用输出的事件记录
  3. Traces(追踪) — 请求在分布式系统中的流转

这套体系在微服务时代非常有效,但在 AI-Native 时代遇到了根本性的挑战。

场景:一个神秘的 Bug

凌晨 3 点,生产环境告警:推荐系统的点击率下降了 40%。

你打开监控面板:

  • ✅ CPU 正常
  • ✅ 内存正常
  • ✅ 请求量正常
  • ✅ 响应延迟正常

所有指标都正常,但业务明显异常。

你查看日志:

[INFO] 2026-03-14 02:15:32 - Recommendation request received
[INFO] 2026-03-14 02:15:32 - User profile fetched
[INFO] 2026-03-14 02:15:33 - ML model inference completed
[INFO] 2026-03-14 02:15:33 - Results returned

日志显示一切正常,但用户收到的推荐明显不合理——全是 6 个月前的冷内容。

你查看追踪:请求从 API 网关到推荐服务到模型服务,链路完整,没有错误。

问题出在哪里?

传统可观测性的盲区

盲区 描述 例子
黑盒推理 不知道 AI 为什么做出某个决策 为什么推荐 A 而不是 B?
意图缺失 不知道用户的真实意图 用户搜索”apple”是想买水果还是电脑?
上下文漂移 不知道决策时的上下文状态 模型用的是哪个版本的 prompt?
推理过程 看不到 AI 的思考过程 Agent 为什么选择了这个工具?

传统可观测性告诉我们系统”做了什么”,但不告诉我们”为什么这么做”。


为什么 AI-Native 系统需要新范式

AI 系统的特殊性

AI-Native 系统与传统系统有本质区别:

1. 概率性而非确定性

传统系统:输入 A → 输出 B(总是如此)

AI 系统:输入 A → 输出 B(90% 概率),输出 C(10% 概率)

同样的输入可能产生不同的输出,这让传统的”错误检测”变得困难。

2. 上下文依赖性

AI 的输出高度依赖上下文:

  • 使用的 Prompt 版本
  • 提供的 Context 内容
  • 模型的温度和参数

传统日志不记录这些,导致无法复现问题。

3. 推理不透明性

对于复杂的 AI Agent:

  • 它为什么选择这个工具?
  • 它如何分解任务?
  • 它从哪些来源获取信息?

这些都是黑盒,传统可观测性无法洞察。

传统监控的失败案例

**案例 1:客服机器人”

客服机器人突然开始给出荒谬的回答。监控显示:

  • API 响应时间正常
  • 没有异常错误
  • 模型服务健康

但用户投诉激增。

原因:上游知识库更新了一个错误的 FAQ,AI 基于错误知识给出了错误回答。传统监控完全无法发现。

案例 2:代码生成工具

开发工具开始生成有安全漏洞的代码。监控显示:

  • 生成成功率 99%
  • 平均生成时间 2.3 秒
  • 用户满意度 4.5/5

但安全审计发现大量 SQL 注入风险。

原因:模型微调数据的分布发生了变化,但监控没有跟踪生成代码的质量指标。


意图追踪:可观测性的第三维度

三层可观测性模型

AI-Native 系统需要三层可观测性:

三层可观测性:
  
  系统层 (System Layer):
    对应: 传统可观测性
    关注: 机器资源、网络、服务健康
    指标: CPU, 内存, 延迟, 错误率
    工具: Prometheus, Grafana, Jaeger
  
  Agent 层 (Agent Layer):
    对应: AI 系统可观测性
    关注: AI 组件的行为和性能
    指标: 推理时间, token 消耗, 模型版本
    工具: LLM 可观测性平台
  
  意图层 (Intent Layer):
    对应: AI-Native 新维度
    关注: AI 的决策意图和推理过程
    指标: 意图清晰度, 推理链完整性, 决策依据
    工具: 意图追踪系统 (新兴)

什么是意图追踪

意图追踪(Intent Tracing)记录的是:

  1. 输入意图 — 用户或系统想要达成什么目标
  2. 推理过程 — AI 如何分解和解决这个意图
  3. 决策依据 — AI 为什么做出某个选择
  4. 上下文状态 — 决策时的完整上下文

意图追踪数据模型

# 意图追踪记录示例
intent_trace:
  trace_id: "trace-001"
  timestamp: "2026-03-14T10:30:00Z"
  
  # 输入意图
  input_intent:
    source: "user"  # user | system | agent
    raw_input: "帮我找一下上个月的销售报告"
    parsed_intent:
      action: "search"
      target: "sales_report"
      time_range: "last_month"
      format: null  # 未指定,使用默认
  
  # 推理过程
  reasoning_chain:
    - step: 1
      action: "identify_user"
      tool: "user_service"
      input: { user_id: "u123" }
      output: { department: "sales", role: "manager" }
      duration_ms: 45
      
    - step: 2
      action: "determine_permissions"
      logic: "用户是销售经理,可以访问销售报告"
      decision: "allow_access"
      
    - step: 3
      action: "query_data"
      tool: "report_service"
      query: "SELECT * FROM sales WHERE month = '2026-02'"
      context:
        model_version: "gpt-4-turbo"
        prompt_version: "v2.3"
        temperature: 0.2
      output_size: 1534
      duration_ms: 1234
      
    - step: 4
      action: "format_response"
      decision: "使用表格格式展示,因为用户是经理,需要概览"
      
  # 决策依据
  decision_basis:
    - decision: "使用表格格式"
      reason: "用户角色是 manager,历史偏好显示喜欢概览视图"
      confidence: 0.85
      alternatives_considered:
        - format: "chart"
          rejected_reason: "数据维度多,chart 不易阅读"
        - format: "raw_csv"
          rejected_reason: "用户未要求原始数据"
  
  # 输出结果
  output:
    content: "..."
    format: "table"
    satisfaction_prediction: 0.9
  
  # 元数据
  metadata:
    model: "gpt-4-turbo"
    prompt_version: "v2.3"
    context_window_used: 2341
    total_tokens: 4567

意图追踪 vs 传统追踪

维度 传统 Trace 意图 Trace
关注点 请求流转 决策过程
记录内容 服务调用 推理步骤
时间粒度 毫秒级 步骤级
可解释性
调试价值 定位性能问题 理解行为原因

实战:设计意图感知的可观测系统

第一步:在 AI 组件中埋点

// 意图追踪 SDK 示例
const { IntentTracer } = require('@observability/intent-tracer');

class RecommendationService {
  async getRecommendations(userId, context) {
    // 开始意图追踪
    const trace = IntentTracer.start({
      service: 'recommendation-service',
      operation: 'get_recommendations',
      input: { userId, context }
    });
    
    try {
      // 步骤 1: 获取用户画像
      const userProfile = await trace.step('fetch_user_profile', async () => {
        return await userService.getProfile(userId);
      });
      
      // 步骤 2: 构建 prompt
      const prompt = await trace.step('build_prompt', async (step) => {
        const prompt = promptBuilder.build({
          user: userProfile,
          context: context
        });
        
        // 记录关键上下文
        step.recordContext({
          prompt_version: prompt.version,
          template_used: prompt.template,
          variables: prompt.variables
        });
        
        return prompt;
      });
      
      // 步骤 3: 模型推理
      const result = await trace.step('model_inference', async (step) => {
        const inference = await modelService.infer({
          prompt: prompt.text,
          model: 'gpt-4-turbo',
          temperature: 0.7
        });
        
        // 记录模型决策依据
        step.recordDecisionBasis({
          model_version: inference.model_version,
          tokens_used: inference.tokens,
          reasoning: inference.reasoning_log  // 如果模型支持
        });
        
        return inference;
      });
      
      // 步骤 4: 后处理
      const recommendations = await trace.step('post_process', async () => {
        return postProcessor.process(result, {
          diversity_threshold: 0.3,
          freshness_boost: true
        });
      });
      
      // 记录最终输出
      trace.recordOutput({
        recommendations_count: recommendations.length,
        categories: recommendations.map(r => r.category),
        confidence_scores: recommendations.map(r => r.confidence)
      });
      
      return recommendations;
      
    } catch (error) {
      trace.recordError(error);
      throw error;
    } finally {
      trace.end();
    }
  }
}

第二步:建立意图追踪存储

# 意图追踪数据存储架构

存储分层:
  热数据 (最近 24 小时):
    存储: In-memory cache + SSD
    用途: 实时监控、告警
    保留: 1 天
    
  温数据 (最近 30 天):
    存储: Elasticsearch / ClickHouse
    用途: 查询分析、问题排查
    保留: 30 天
    
  冷数据 (历史):
    存储: Object Storage (S3)
    用途: 长期分析、模型训练
    保留: 1 年

数据索引:
  - trace_id (主键)
  - timestamp (时间范围查询)
  - user_id (用户维度分析)
  - intent_type (意图类型)
  - model_version (模型版本)
  - decision_outcome (决策结果)

第三步:构建意图分析仪表板

# 意图追踪仪表板

核心视图:
  
  实时意图流:
    显示: 当前系统的意图处理实况
    指标: QPS, 延迟, 成功率, 意图分布
    
  意图热力图:
    显示: 不同意图类型的处理情况
    维度: 时间、意图类型、用户群体
    
  决策归因分析:
    显示: AI 为什么会做出某个决策
    输入: 查询特定 trace_id
    输出: 完整的推理链可视化
    
  意图漂移检测:
    显示: 用户意图的变化趋势
    告警: 异常意图激增或下降
    
  模型决策分析:
    显示: 不同模型版本的决策差异
    分析: A/B 测试效果、决策质量

第四步:建立意图告警机制

# 意图感知告警规则

告警规则:
  
  意图失败率激增:
    condition: |
      rate(intent_failed[5m]) > 0.1
    severity: critical
    action: page_oncall
    
  推理链断裂:
    condition: |
      missing_reasoning_steps > 0
    severity: warning
    action: create_ticket
    
  意图漂移:
    condition: |
      kl_divergence(intent_distribution, baseline) > 0.5
    severity: info
    action: notify_product_team
    
  模型决策异常:
    condition: |
      avg(decision_confidence) < 0.6
    severity: warning
    action: review_model

从监控到理解:可解释性的崛起

可观测性的演进

阶段 1: 监控 (Monitoring)
问题: 系统是否正常运行?
能力: 检测异常、触发告警
局限: 只能回答"是否有问题"

阶段 2: 可观测性 (Observability)
问题: 系统内部发生了什么?
能力: 查询分析、定位根因
局限: 需要专家解读数据

阶段 3: 可解释性 (Explainability)
问题: 为什么系统会这样行为?
能力: 自动解释、决策可视化
优势: 人人可理解 AI 的决策

可解释性的实践

案例:推荐系统异常

传统可观测性:”推荐 API 延迟升高到 2s”

意图可观测性:

问题: 推荐质量下降
根因: 步骤 3 (模型推理) 使用了错误的 prompt 版本
详细: 
  - 期望: prompt-v2.3 (包含用户偏好)
  - 实际: prompt-v2.1 (缺少用户偏好)
  - 影响: 推荐结果与用户兴趣匹配度从 85% 降至 42%
建议: 回滚到 prompt-v2.3 或检查配置管理

反直觉洞察:少即是多

洞察 1:不是所有数据都值得追踪

反直觉:追踪所有意图会产生海量数据。

策略:

  • 只追踪关键决策点
  • 采样非关键路径
  • 聚合相似意图

洞察 2:意图的质量比数量更重要

详细的单个意图追踪胜过模糊的批量统计。

一个完整的意图 trace 比 1000 行无结构日志更有价值。


工具链与架构

推荐工具链 (2026)

层级 开源方案 商业方案
系统层 Prometheus + Grafana Datadog, New Relic
Agent 层 Langfuse, Helicone Weights & Biases
意图层 自研 / OpenTelemetry 扩展 新兴专用平台

架构建议

┌─────────────────────────────────────────┐
│           应用层 (AI Services)           │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐   │
│  │ 推荐服务 │ │ 客服Bot │ │ 代码助手 │   │
│  └────┬────┘ └────┬────┘ └────┬────┘   │
└───────┼───────────┼───────────┼─────────┘
        │           │           │
        └───────────┼───────────┘
                    │
        ┌───────────▼───────────┐
        │    Intent Tracer SDK   │
        └───────────┬───────────┘
                    │
        ┌───────────▼───────────┐
        │   意图追踪收集器        │
        └───────────┬───────────┘
                    │
        ┌───────────▼───────────┐
        │    存储层              │
        │  (Hot/Warm/Cold)      │
        └───────────┬───────────┘
                    │
        ┌───────────▼───────────┐
        │    分析与可视化        │
        │  (仪表板/告警/查询)    │
        └────────────────────────┘

结语:可观测性的终极目的

让我们回到那个根本问题:为什么需要可观测性?

不是为了收集数据。 不是为了漂亮的图表。 不是为了告警。

可观测性的终极目的是建立信任 ——

  • 信任 AI 系统按预期工作
  • 信任在出问题时能快速定位和修复
  • 信任系统的决策是可理解和可解释的

意图追踪让这种信任成为可能。


系列关联阅读

下一篇预告:#57 AI-Native 团队的化学反应:角色重构


AI-Native软件工程系列 #56

Published on 2026-03-14