概览
Langfuse 是一个开源的 LLM 工程平台,提供 Trace、Token 与成本分析、提示词管理和评估(eval)功能。它可以通过两种互补的方式与 GoModel 搭配使用:- 网关 Trace。 GoModel 的 OpenTelemetry 导出器会为每个请求向 Langfuse 的 OTLP 端点发送一个 Trace。网关的所有客户端都会被覆盖,无需修改应用代码;每个 Trace 都会显示模型、实际提供服务的提供商、延迟、Token 用量和成本、状态,以及每一次重试或故障转移。只有在您开启内容采集后,才会附加提示词和补全内容。
- 应用 Trace。 使用 Langfuse SDK 的 OpenAI 即插即用封装,并将其 Base URL 指向 GoModel。Langfuse 记录完整的提示词、补全内容和 Token 用量;GoModel 在底层提供路由、故障转移、缓存,以及其自身的审计日志和成本追踪。
App (Langfuse SDK) -> GoModel -> OpenAI/Anthropic/Gemini/...,两跳的 Trace 都会到达 Langfuse。
1. 将网关 Trace 发送到 Langfuse
Langfuse 在/api/public/otel 接收 OTLP Trace,并使用项目的 API 密钥对进行认证。先对密钥进行 Base64 编码:
.env 文件中请去掉引号,否则引号会成为值的一部分。
请保持默认的
http/protobuf 协议:Langfuse 的 OTLP 端点不支持 gRPC。API 密钥可在 Langfuse 的 Project Settings -> API Keys 中获取;自托管部署也可以通过 LANGFUSE_INIT_* 变量预先配置。如需自行运行 Langfuse,请参阅其 docker compose 快速开始:执行 git clone https://github.com/langfuse/langfuse.git && cd langfuse && docker compose up,UI 位于 3000 端口。
Langfuse 中显示的内容
每个网关请求对应一个 Trace:一个POST /v1/chat/completions Span,其中为每次提供商调用嵌套一个 generation,以操作和模型命名(chat gpt-5-mini)。generation 包含提供商实际响应的模型、输入和输出 Token 数,以及结束原因,因此 Langfuse 会根据其模型目录为其定价,并填充成本和 Token 看板。其元数据中还包含 gen_ai.provider.name 和 gomodel.provider.name(即您配置中的确切提供商),因此发生故障转移的请求会为每次尝试显示一个 generation:哪个提供商失败了、属于哪类错误、最终由哪个提供商响应,用量记录在成功响应的那次尝试上。
流式 Chat Completions、Responses API 以及经过转换的 /v1/messages 调用,会生成一个持续到流结束的 generation,用量信息相同。GoModel 原生转发给 Anthropic 提供商的 /v1/messages 请求不会显示用量。
Langfuse 根据其自身的价格表计算成本。GoModel 的成本追踪会应用您的定价覆盖和缓存费率,因此两者的总额可能不同。
采集提示词和补全内容
除非开启内容采集,否则提示词和补全内容不会进入遥测数据:2. 使用 Langfuse SDK 从应用侧追踪
如果您希望改为从应用侧追踪(例如将调用归入您自己的 Span,或关联 Langfuse 提示词版本),请使用 Langfuse 的 OpenAI 封装进行埋点,并将其指向 GoModel。对于现有的 OpenAI SDK 应用,只需修改两行代码:openai/gpt-5-mini、gemini/gemini-2.5-flash、虚拟模型)访问所有已配置的提供商,且每次调用仍可享受 GoModel 的故障转移、缓存、预算和审计记录。JS/TS 封装的用法相同。
3. 端到端单一 Trace
同时启用两种方式时,一次 LLM 调用会产生两个独立的 Langfuse Trace:一个来自 SDK,一个来自网关。传播 W3C Trace 上下文即可将它们合并:在请求中发送traceparent 请求头,GoModel 就会将其 Span 挂在调用方的 Trace 之下。
已使用 Langfuse v4.27.0(通过 docker compose 自托管)和 Langfuse Python SDK 4.15.1 验证:覆盖 OpenAI、Anthropic 和 Gemini 的缓冲式及流式 Chat 网关 OTLP Trace、故障转移 Span、经由 GoModel 的 SDK 提示词采集,以及合并两者的 Trace 上下文传播。
故障排查
说明
- 高流量网关可以对网关 Trace 进行采样(
OTEL_TRACES_SAMPLER=parentbased_traceidratio、OTEL_TRACES_SAMPLER_ARG=0.1)。使用parentbased_*时,调用方已采样其 Trace 的请求会保留网关 Span,因此传播的 Trace 仍然完整。 - 完整的导出器参考(YAML 配置、按信号类型的端点、采样器、重新加载行为)请参阅 OpenTelemetry 指南。其中所有内容均适用,Langfuse 只是 OTLP 后端。
- 如需基于请求速率和延迟指标的看板,请搭配 Prometheus 指标使用:Langfuse 存储 Trace,Prometheus 存储指标。