跳转到主要内容

OpenAI 仪器化包

项目描述

OpenTelemetry 为 OpenAI 提供的仪器化

openai 客户端库提供的 OpenTelemetry 仪器化。

此仪器化目前仅支持对聊天完成 API 进行仪器化。

我们目前支持以下功能

  • 同步和异步聊天完成
  • 流支持
  • 使用工具调用函数
  • 客户端指标
  • 遵循 1.27.0 Gen AI 语义约定

安装

pip install elastic-opentelemetry-instrumentation-openai

用法

此仪器化支持 0-code / auto 仪器化

opentelemetry-instrument python use_openai.py

或手动仪器化

import openai
from opentelemetry.instrumentation.openai import OpenAIInstrumentor

OpenAIInstrumentor().instrument()

# assumes at least the OPENAI_API_KEY environment variable set
client = openai.Client()

messages = [
    {
        "role": "user",
        "content": "Answer in up to 3 words: Which ocean contains the canarian islands?",
    }
]

chat_completion = client.chat.completions.create(model="gpt-4o-mini", messages=messages)

仪器化特定的环境变量配置

  • ELASTIC_OTEL_GENAI_CAPTURE_CONTENT (默认: false): 当设置为 true 时,通过启用内容捕获来收集关于提示和响应的更多信息

开发

我们使用 pytest 来执行使用标准库 unittest 框架编写的测试。

在运行之前需要安装测试依赖项。

python3 -m venv .venv
source .venv/bin/activate
pip install -r dev-requirements.txt

pytest

刷新 HTTP 有效负载

我们使用 VCR.py 自动记录来自 LLM 的 HTTP 响应,以便在测试中重用而不运行 LLM。在这些情况下可能需要刷新 HTTP 有效负载。

  • 添加新的单元测试
  • 扩展单元测试以添加需要最新的 HTTP 响应的功能

集成测试默认使用 ollama,以避免成本和泄露敏感信息。但是,单元测试记录应使用权威的 OpenAI 平台,除非测试是关于特定的可移植性边缘情况。

要刷新测试,请删除 tests/cassettes 中的 cassette 文件,并确保您已设置以下环境变量

如果您正在编写新的测试,请从没有断言的测试逻辑开始。如果您扩展现有的单元测试而不是编写新的测试,请从 cassettes 中删除相应的记录响应。

然后,像往常一样运行 pytest。它将对 LLM 执行请求并记录它。更新测试直到通过正确的断言。随后的 pytest 执行将使用记录的响应而不查询 LLM。

许可

本软件根据 Apache License 版本 2 ("Apache-2.0") 许可。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分发

构建分发

由以下机构支持