面向生成式AI的OpenTelemetry

博客文章在发布后不会更新。这篇文章已经发布一年多了,其内容可能已过时,部分链接可能无效。在依赖任何信息之前,请务必核实。

随着组织越来越多地采用大型语言模型 (LLM) 和其他生成式 AI 技术,确保可靠的性能、效率和安全性对于满足用户期望、优化资源成本和防范意外输出至关重要。有效的 AI 操作、行为和结果可观察性有助于实现这些目标。OpenTelemetry 正在进行增强,以专门支持生成式 AI 的这些需求。

目前正在开发两个主要资产来实现这一目标:**语义约定**和**仪器库**。第一个仪器库的目标是 OpenAI Python API 库

**语义约定** 建立了跨平台遥测数据结构化和收集的标准化指南,定义了输入、输出和操作详细信息。对于生成式 AI,这些约定通过标准化模型参数、响应元数据和 token 使用量等属性,简化了 AI 模型的监控、故障排除和优化。这种一致性支持跨工具、环境和 API 更好的可观察性,帮助组织轻松跟踪性能、成本和安全性。

**仪器库**正在 OpenTelemetry Python Contrib 下的 instrumentation-genai 项目中开发,以自动化生成式 AI 应用程序的遥测收集。第一个版本是用于仪器化 OpenAI 客户端调用的 Python 库。该库捕获 spans 和事件,以结构化格式收集模型输入、响应元数据和 token 使用量等基本数据。

生成式 AI 的关键信号

生成式 AI 语义约定》侧重于通过三种主要信号来捕获对 AI 模型行为的洞察:跟踪指标事件

这些信号共同提供了一个全面的监控框架,能够更好地进行成本管理、性能调优和请求跟踪。

跟踪:跟踪模型交互

跟踪记录每个模型交互的生命周期,包括输入参数(例如,temperature、top_p)和响应详细信息,如 token 计数或错误。它们提供了对每个请求的可见性,有助于识别瓶颈并分析设置对模型输出的影响。

指标:监控使用和性能

指标聚合了请求量、延迟和 token 计数等高级指标,这些指标对于管理成本和性能至关重要。对于具有速率限制和成本考虑的 API 依赖型 AI 应用程序,此数据尤为关键。

事件:捕获详细交互

事件记录模型执行过程中的详细时刻,例如用户提示和模型响应,从而提供模型交互的粒度视图。这些洞察对于调试和优化 AI 应用程序(其中可能出现意外行为)非常宝贵。

通过供应商特定的属性扩展可观察性

语义约定还定义了特定于供应商的属性,用于 OpenAI 和 Azure Inference API 等平台,确保遥测捕获通用和提供商特定的详细信息。这种增加的灵活性支持多平台监控和深入洞察。

构建 OpenAI 的 Python 仪器库

这个基于 Python 的 OpenTelemetry 库捕获 OpenAI 模型的重要遥测信号,为开发人员提供了一个针对 AI 工作负载量身定制的开箱即用可观察性解决方案。该库 托管在 OpenTelemetry Python Contrib 仓库中,可自动从 OpenAI 模型交互中收集遥测数据,包括请求和响应元数据以及 token 使用量。

随着生成式 AI 应用程序的增长,将会有更多针对其他语言的仪器库出现,从而将 OpenTelemetry 支持扩展到更多的工具和环境。该库目前专注于 OpenAI,凸显了其在 AI 开发中的受欢迎程度和需求,使其成为一个有价值的初步实现。

示例用法

以下是使用 OpenTelemetry Python 库通过 OpenAI 客户端监控生成式 AI 应用程序的示例。

安装 OpenTelemetry 依赖项

pip install opentelemetry-distro
opentelemetry-bootstrap -a install

设置以下环境变量,并根据需要更新端点和协议

OPENAI_API_KEY=<replace_with_your_openai_api_key>

OTEL_EXPORTER_OTLP_ENDPOINT=https://:4318
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
OTEL_SERVICE_NAME=python-opentelemetry-openai
OTEL_LOGS_EXPORTER=otlp_proto_http
OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED=true
# Set to false or remove to disable log events
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true

然后,在您的 Python 应用程序中包含以下代码

import os
from openai import OpenAI

client = OpenAI()
chat_completion = client.chat.completions.create(
    model=os.getenv("CHAT_MODEL", "gpt-4o-mini"),
    messages=[
        {
            "role": "user",
            "content": "Write a short poem on OpenTelemetry.",
        },
    ],
)
print(chat_completion.choices[0].message.content)

然后使用 opentelemetry-instrument 运行示例

opentelemetry-instrument python main.py

如果您没有运行服务来收集遥测数据,可以使用以下命令导出到控制台

opentelemetry-instrument --traces_exporter console --metrics_exporter console python main.py

此处提供了完整的示例

通过这种简单的仪器化,开发人员可以开始捕获其生成式 AI 应用程序的跟踪。以下是用于本地调试的 Aspire Dashboard 的示例。

要启动 Jaeger,请运行以下 docker 命令,并在浏览器中打开 localhost:18888

docker run --rm -it -d -p 18888:18888 -p 4317:18889 -p 4318:18890 --name aspire-dashboard mcr.microsoft.com/dotnet/aspire-dashboard:9.0
Chat trace in Aspire Dashboard

以下是在 Jaeger 中捕获的类似跟踪。

要启动 Jaeger,请运行以下 docker 命令,并在浏览器中打开 localhost:16686

docker run --rm -it -d -p 16686:16686 -p 4317:4317 -p 4318:4318 --name jaeger jaegertracing/all-in-one:latest
Chat trace in Jaeger

同样,可以轻松捕获聊天内容历史记录,以调试和改进您的应用程序。只需将环境变量 OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT 设置如下

export OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=True

这将启用内容捕获,该捕获会收集包含载荷的 OpenTelemetry 事件

Content Capture Aspire Dashboard

加入我们,共同塑造生成式 AI 可观察性的未来

社区协作是 OpenTelemetry 成功的关键。我们邀请开发人员、AI 从业人员和组织参与贡献、分享反馈或参与讨论。探索 OpenTelemetry Python Contrib 项目,贡献代码,或在 AI 可观察性不断发展的过程中帮助塑造其未来。

我们现在有来自 AmazonElasticGoogleIBMLangtraceMicrosoftOpenLITScorecardTraceloop 等贡献者!

欢迎加入社区!更多信息可在 生成式 AI 可观察性项目页面找到。

本文的一个版本也出现在 CNCF 博客上

最后修改于 2025 年 6 月 11 日: 警报清理 (#7090) (c392c714)