系统学习 AI 学习路径:从 GPU 运行时到推理、微调与 RAG 评估

agent-observability

Agent 可观测性:用 trace/span 记录每一步、工具调用、token 和成本

补充说明

Agent 的一次运行包含多次模型调用、工具调用、检索和状态转换,传统日志很难还原。可观测性要把一次运行串成 trace,每个步骤是一个 span,记录输入、输出、耗时、token、成本、错误和关键属性(用户、会话、工具名、模型版本)。OpenTelemetry 的 GenAI 语义约定正在成为通用标准。

可观测性不仅用于排障,也用于评估和成本治理:找出哪一步最慢、哪个工具最贵、哪类请求失败率最高。记录时要脱敏,避免把 prompt 中的个人信息、密钥和业务数据写进日志。

常用示例

# 伪代码:一次 Agent 运行的 trace 结构
with tracer.start_as_current_span("agent.run") as run:
    run.set_attribute("agent.name", "support")
    run.set_attribute("user.id_hash", hash_user(user.id))

    with tracer.start_as_current_span("llm.chat") as span:
        span.set_attribute("gen_ai.request.model", "gpt-4o-mini")
        span.set_attribute("gen_ai.usage.input_tokens", resp.usage.prompt_tokens)
        span.set_attribute("gen_ai.usage.output_tokens", resp.usage.completion_tokens)

    with tracer.start_as_current_span("tool.search_docs") as span:
        span.set_attribute("tool.name", "search_docs")
        span.set_attribute("tool.args.query", redact(query))
        span.set_attribute("tool.result.count", len(results))
# Langfuse:记录生成、工具和评分
from langfuse import Langfuse
langfuse = Langfuse()

trace = langfuse.trace(name="support-agent", user_id=user.id)
generation = trace.generation(
    name="answer", model="gpt-4o-mini",
    input=messages, output=answer,
    usage={"input": 1200, "output": 300},
)
trace.score(name="user_feedback", value=1)
必须记录的字段:
- trace_id / session_id / user_id(脱敏/哈希)
- 每步类型(llm/tool/retrieval)、耗时、状态、错误
- 模型名/版本、token、成本
- 工具名、参数摘要(脱敏)、结果条数
- 检索命中的文档 ID/分数(不记录全文)
- 评估分数、人工反馈、是否触发审批

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. trace 和 span 的关系是什么?
  2. Agent 可观测性必须记录哪些关键字段?
  3. 为什么不能把完整 prompt 直接写进日志?
答案
  1. trace 表示一次完整运行,span 表示其中的一个步骤(模型调用、工具调用、检索等),span 挂在 trace 下形成调用链。
  2. trace/session/user(脱敏)、步骤类型、耗时、状态/错误、模型/版本、token/成本、工具名/参数摘要、检索结果 ID、评估/反馈。
  3. prompt 可能包含个人信息、密钥和业务敏感数据;日志会被多人/系统访问,必须脱敏、截断和访问控制。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令