OpenTelemetry将 Agent 集成数据上报到 Langfuse

一、OpenTelemetry 功能概述

OpenTelemetry(简称 OTel)是一个开源的可观测性框架,由云原生计算基金会(CNCF)维护,已成为云原生环境下遥测数据收集的事实标准。

核心功能

1. 统一的可观测性信号采集

OpenTelemetry 支持采集三类核心遥测数据:

  • 链路(Traces):记录请求在分布式系统中的完整调用路径,由多个跨度(Span)组成,用于发现性能瓶颈
  • 指标(Metrics):长期的数值测量结果(如CPU利用率、请求速率),适合实时监控和告警
  • 日志(Logs):特定时间点的离散事件记录,适合故障排查和调试

三者通过共享的上下文传播机制相互关联,提供完整的应用行为视图。

2. 厂商中立、可插拔架构

使用 OpenTelemetry API 完成一次代码插桩,即可将遥测数据导出到任意可观测性后端(Jaeger、Prometheus、商业产品等),切换后端无需修改应用代码。

3. 零代码(自动)插桩

支持无需修改源代码即可为流行的库和框架自动生成遥测数据,大幅降低接入成本。

4. OpenTelemetry Collector

提供可部署为代理(Agent)或网关(Gateway)的收集器服务,支持对遥测数据进行接收、处理、过滤和路由,拥有200+ 组件。

5. 多语言支持

提供 12+ 种语言的原生 SDK,包括 Java、Python、Go、JavaScript、.NET、Ruby、C++ 等。

6. 上下文传播

自动在服务边界间关联分布式追踪,使分布式上下文贯穿整个请求路径。

二、将 Agent 集成数据上报到 Langfuse

Langfuse 本身是一个 OpenTelemetry 后端,任何支持 OpenTelemetry SDK 的语言都可以通过 OTLP(OpenTelemetry Protocol)协议将追踪数据发送到 Langfuse。

核心原理

Langfuse 接收符合 OTLP 规范的遥测数据,通过标准 HTTP 协议(暂不支持 gRPC)将数据发送到 Langfuse 的 OTLP 端点:

复制代码
https://cloud.langfuse.com/api/public/otel

认证方式为 Basic Auth,使用项目的 Public Key 和 Secret Key 构建认证头。

两种主要集成方式

方式一:应用内直接集成(SDK 方式)

适用于大多数场景,在 Agent 应用中直接配置 OpenTelemetry SDK 导出到 Langfuse。

通用配置步骤

  1. 获取 Langfuse 凭证:在 Langfuse 项目中获取 Public Key 和 Secret Key

  2. 配置环境变量(所有语言的 OTel SDK 都支持):

bash 复制代码
OTEL_EXPORTER_OTLP_ENDPOINT="https://cloud.langfuse.com/api/public/otel"
OTEL_EXPORTER_OTLP_HEADERS="Authorization=Basic <base64编码的凭证>"
  1. 在 Agent 执行时创建 Span :对于 LLM 调用,在 Span 上设置 gen_ai.* 属性(遵循 GenAI 语义约定),Langfuse 会自动将其识别为 Generation 类型,并提取模型名称、Token 用量和成本信息

各语言示例

语言 集成方式
Java 使用 OpenTelemetry Java Agent 零代码插桩,通过环境变量配置即可;LLM 调用可配合 OpenLLMetry 实现自动插桩
Go 使用标准 OTel Go SDK,在 LLM 调用 Span 上设置 gen_ai.* 属性,或使用 OpenLIT 实现自动插桩
Python 使用 OpenTelemetry Python SDK,或通过 OpenLIT 等工具自动捕获 Agent 框架的操作
C#/.NET 使用 OTel .NET SDK,在 Activity 上设置 gen_ai.* 标签

示例:Python + AutoGen 集成

python 复制代码
# 1. 安装依赖
# pip install langfuse openlit autogen-agentchat autogen-ext[openai]

# 2. 配置环境变量
os.environ["LANGFUSE_PUBLIC_KEY"] = "pk-lf-..."
os.environ["LANGFUSE_SECRET_KEY"] = "sk-lf-..."
os.environ["LANGFUSE_BASE_URL"] = "https://cloud.langfuse.com"

# 3. 初始化 OpenLIT 自动插桩
import openlit
openlit.init(tracer=langfuse._otel_tracer, disable_batch=True)
方式二:通过 OpenTelemetry Collector 中转

若需要对遥测数据进行过滤、增强或路由到多个后端,可在应用与 Langfuse 之间部署 OpenTelemetry Collector 作为中间层。Collector 配置 Langfuse Exporter 后将数据转发至 Langfuse。

关键配置要点

  1. 端点地址 :Langfuse OTLP 端点为 /api/public/otel,追踪路径为 /api/public/otel/v1/traces
  2. 协议:必须使用 OTLP over HTTP(protobuf 或 JSON),不支持 gRPC
  3. GenAI 语义约定 :带有 gen_ai.* 属性的 Span 在 Langfuse 中渲染为 Generation;其他 Span 作为普通 Observation
  4. 用户/会话上下文 :在 Span 上设置 user.idsession.id 属性可关联用户和会话

在 Langfuse 中查看数据

数据上报成功后,可在 Langfuse 控制台查看:

  • Trace 列表:所有 Agent 执行记录(时间戳、延迟、Token 用量)
  • Trace 时间线:完整的 Span 层次结构(Agent 动作、LLM 调用、工具调用、规划步骤)
  • 输入/输出详情:Prompt 和模型返回内容
  • 分析仪表板:成本、延迟、使用趋势

总结

OpenTelemetry 提供了标准化的可观测性数据采集能力,而 Langfuse 作为 OTel 后端,使得任何支持 OTel 的 Agent 框架(无论是 Java、Python、Go 还是其他语言)都可以通过简单的环境变量配置或少量代码改动,将完整的 Agent 执行链路(LLM 调用、工具调用、规划步骤等)上报到 Langfuse 进行统一的可视化追踪和分析。

相关推荐
樊小肆2 小时前
DeepSeeker-Code源码导读01-agentNudges
人工智能·agent
JaydenAI3 小时前
[基于OpenEvals的自动化评估-16]自动模拟多轮对话实施评估
ai·langchain·agent·evaluation·openevals
jsl_jsl_jsl3 小时前
claudecode学习 第 17 章 · Agent SDK 与 Headless 模式
agent
武子康4 小时前
实现 GPT-Live-like:两条路线、一个控制面和六阶段验收
人工智能·chatgpt·agent
安逸sgr5 小时前
激活函数有什么用?Sigmoid、Tanh、ReLU 到底怎么选?
人工智能·ai·大模型·agent·智能体
AINative软件工程5 小时前
Multi-Agent Handoff 合同工程:别让 Agent 交接变成甩锅现场
agent
苏灿烤鱼6 小时前
14MB 模型,凭什么跟 270M 对打?
javascript·python·agent