LLM 与 Agent 失败的尾部采样:在结果已知后保留关键 Trace
头部随机采样容易丢掉低频模型失败和长链 Agent 异常。本文设计 Trace 汇聚、尾部判定策略、Collector 容量估算、采样验收与过载回滚流程。
本文要点
- 主题聚焦:大模型、AI Agent、DevOps
- 适合人群:独立开发者、全栈工程师、AI 应用开发者
- 核心价值:快速理解背景、实践路径、常见误区和工程建议
固定 1% 头部采样不适合独自承担 AI 取证。空响应、结构化失败和工具循环在根 span 创建时尚未表现为错误;入口若已丢弃,任务结束后无法恢复模型、检索和工具 span。
分布式追踪 解释上下文传播,AI Agent 可观测性 定义任务步骤。本篇聚焦先暂存完整 Trace,等结果出现后再决定是否导出。
先保证同一 Trace 到达同一判定器
尾采样器必须看到完整 Trace。生产通常由无状态接收层按 trace_id 一致性哈希,将同一 Trace 路由到一个采样实例;否则各实例只见残片,既会误判也可能导出不完整数据。
目标服务使用 AlwaysOn 或传播 sampled 标志,不能先被低比例 head sampler 丢弃。静态资源和健康检查可提前排除,只让 AI 请求进入专用管线。
把技术错误和语义失败同时编码
策略保留 ERROR、慢 Trace 和少量成功基线。根 span 再写入有限枚举 ai.outcome=schema_invalid|tool_loop|grounding_failed|policy_blocked;不要让采样器解析自然语言。
processors:
tail_sampling/ai:
sampling_strategy: trace-complete
# 示例值须由 Trace 时长和导出延迟分布确定。
decision_wait: 90s
# 根 span 到最后一批子 span 的 p99 到达偏差加余量。
decision_wait_after_root_received: 5s
num_traces: 180000
expected_new_traces_per_sec: 1500
decision_cache:
sampled_cache_size: 1000000
non_sampled_cache_size: 1000000
policies:
- name: technical-errors
type: status_code
status_code:
status_codes: [ERROR]
- name: slow-runs
type: latency
latency:
threshold_ms: 12000
- name: semantic-failures
type: string_attribute
string_attribute:
key: ai.outcome
values: [schema_invalid, tool_loop, grounding_failed]
- name: success-baseline
type: probabilistic
probabilistic:
sampling_percentage: 2
“任一命中即保留”时要测量策略重叠。高价值租户使用有限风险等级,不能把无限租户 ID 写进 policy。工具失败分类可复用 Tool Calling 失败分类。
容量由等待窗口和 Trace 大小决定
固定二十秒可能早于长 Agent 的根 span 和 ai.outcome。用首个 span 到根 span 的时长、批量导出延迟和子 span 到达偏差的 p99 加余量确定 decision_wait,九十秒仅为示例。trace-complete 等待整条 Trace;decision_wait_after_root_received 在根 span 到达后保留实测迟到窗口,也让短 Trace 提前判定。
并发 Trace 约等于每秒新 Trace 数乘驻留秒数,再加突发余量。示例可达 135,000 条,num_traces 还要覆盖峰值和路由偏斜。内存还取决于 span 数、事件和属性大小。decision_cache 应明显大于 num_traces,让迟到 span 继承原决定;迟到数据不能改变既有决定,扩大缓存也不能弥补过短等待窗。
回放生产分布后设置内存、memory_limiter 和扩容阈值。监控 sampling_trace_dropped_too_early、sampling_trace_removal_age、sampling_late_span_age、判定延迟、队列、拒绝、decision cache 驱逐和 RSS;全名以部署版本为准。哈希环扩容会拆分在途 Trace,须缓慢执行并观察两个等待窗口。
用带真值的数据验收
构造成功、ERROR、慢请求、语义失败和晚到子 span,为每条写测试 ID,在后端核对保留集合、完整度和判定延迟。回放脱敏流量并计算分类 recall;目标可设严重错误 100%、语义失败大于 99%、成功基线约 2%、Collector 拒绝为零。
尾采样 Trace 可按 Agent 回放评测 进入案例库,但采样属性只负责选择,不能把完整 Prompt 写入标签;内容留存受独立隐私策略控制。
按 5%、25%、100% 上线,每阶段覆盖一个 decision_wait 加最大任务时长,并比较错误发现率、写入量和内存。告警应带保留原因。
过载时回退到可预测的采样
内存超过 80%、驱逐增长或队列将满时,停止放量,把受保护容量留给最小尾采样通道。它仍接收目标 AI Trace 的完整 span,只保留 ERROR 和有限 ai.outcome;可缩到关键服务或风险等级,但须记录范围外覆盖下降。恢复旧策略、移除慢 Trace 或排除非关键业务,不能无限增大 num_traces 或把等待窗缩到结果之前。
成功基线可走独立、限额的父级比例采样路径,在结果未知时随机保留 1%。它不能保证 ERROR,因为 head sampler 看不到最终状态。最小尾采样仍不稳时只能缩小保护范围并记录缺口,不能把头部采样称作等价替代。
回滚时保持哈希拓扑稳定,旧实例完成一个判定窗口再退出。RSS 回落、拒绝停止、核心错误可查且写入回到预算内才算成功;事后按实际 Trace 大小修订容量模型。
尾采样用同一存储预算提高关键失败可见率。路由完整、结果稳定、容量经过回放且降级可预测时,它才会留下可靠证据。
延伸阅读
Related