本站点文档内容均翻译自code.visualstudio.com,仅供个人学习,如有差异请以官网为准。

在AI工具包中的追踪

AI 工具包提供了跟踪功能,帮助您监控和分析 AI 应用程序的性能。您可以跟踪 AI 应用程序的执行情况,包括与生成型 AI 模型的交互,以了解其行为和性能。

AI Toolkit 建立一个本地的 HTTP 和 gRPC 服务器来收集跟踪数据。收集器服务器兼容 OTLP(OpenTelemetry 协议)和大多数语言模型 SDK,要么直接支持 OTLP,要么有非 Microsoft 仪器库来支持它。使用 AI Toolkit 来可视化收集到的仪器数据。

所有支持OTLP并且遵循生成式AI系统语义规范的框架或SDK都支持。下表包含经过兼容性测试的常用AI SDK。

Azure 人工智能推理 铸造厂代理服务 人类学 双子座 兰格链 OpenAI 软件开发工具包 3 OpenAI 代理 SDK
Python ✅ (traceloop, monocle) 1,2 ✅ (单镜片) ✅ (LangSmith, monocle) 1,2 ✅ (opentelemetry-python-contrib, monocle) 1 ✅ (Logfire, monocle) 1,2
TS/JS ✅ (traceloop) 1,2 ✅ (traceloop) 1,2 ✅ (traceloop) 1,2
  1. 括号中的 SDK 是非微软工具,因为官方 SDK 不支持 OTLP,所以它们添加了 OTLP 支持。
  2. 这些工具并未完全遵循OpenTelemetry规则用于生成型AI系统。
  3. 对于 OpenAI SDK,仅支持 聊天完成 API响应 API目前不支持。

如何开始跟踪

  1. 通过选择跟踪在树视图中打开跟踪网页视图。

  2. 选择启动收集器按钮以启动本地OTLP跟踪收集器服务器。

    截图显示在跟踪网页视图中按开始收集按钮。

  3. 使用代码片段启用仪器化。请参阅设置仪器化部分,了解不同语言和SDK的代码片段。

  4. 通过运行您的应用程序生成跟踪数据。

  5. 在跟踪网页视图中,选择刷新按钮以查看新的跟踪数据。

    截图显示了在跟踪网页视图中的跟踪列表。

设置仪器

在你的AI应用程序中设置跟踪以收集跟踪数据。以下代码片段展示了如何为不同的SDK和语言设置跟踪:

对于所有SDK,过程是类似的:

  • 为您的LLM或代理应用添加跟踪。
  • 设置OTLP跟踪导出器以使用AITK本地收集器。
Azure AI 推理 SDK - Python

安装:

pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http azure-ai-inference[opentelemetry]

Setup:

import os
os.environ["AZURE_TRACING_GEN_AI_CONTENT_RECORDING_ENABLED"] = "true"
os.environ["AZURE_SDK_TRACING_IMPLEMENTATION"] = "opentelemetry"

from opentelemetry import trace, _events
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk._logs import LoggerProvider
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk._events import EventLoggerProvider
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter

resource = Resource(attributes={
    "service.name": "opentelemetry-instrumentation-azure-ai-agents"
})
provider = TracerProvider(resource=resource)
otlp_exporter = OTLPSpanExporter(
    endpoint="http://localhost:4318/v1/traces",
)
processor = BatchSpanProcessor(otlp_exporter)
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)

logger_provider = LoggerProvider(resource=resource)
logger_provider.add_log_record_processor(
    BatchLogRecordProcessor(OTLPLogExporter(endpoint="http://localhost:4318/v1/logs"))
)
_events.set_event_logger_provider(EventLoggerProvider(logger_provider))

 azure.ai.inference.tracing 导入 AIInferenceInstrumentor
AIInferenceInstrumentor().instrument(True)
Azure AI 推理 SDK - TypeScript/JavaScript

安装:

npm install @azure/opentelemetry-instrumentation-azure-sdk @opentelemetry/api @opentelemetry/exporter-trace-otlp-proto @opentelemetry/instrumentation @opentelemetry/resources @opentelemetry/sdk-trace-node

Setup:

const { context } = require('@opentelemetry/api');
const { resourceFromAttributes } = require('@opentelemetry/resources');
const {
  NodeTracerProvider,
  SimpleSpanProcessor
} = require('@opentelemetry/sdk-trace-node');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-proto');

const exporter = new OTLPTraceExporter({
  url: 'http://localhost:4318/v1/traces'
});
const provider = new NodeTracerProvider({
  resource: resourceFromAttributes({
    'service.name': 'opentelemetry-instrumentation-azure-ai-inference'
  }),
  spanProcessors: [new SimpleSpanProcessor(exporter)]
});
provider.register();

```plaintext
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
const { createAzureSdkInstrumentation } = require('@azure/opentelemetry-instrumentation-azure-sdk');
```




注册仪器({
  仪器: [创建AzureSdk仪器()]
});
铸造代理服务 - Python

安装:

pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http azure-ai-inference[opentelemetry]

设置:

import os
os.environ["AZURE_TRACING_GEN_AI_CONTENT_RECORDING_ENABLED"] = "true"
os.environ["AZURE_SDK_TRACING_IMPLEMENTATION"] = "opentelemetry"

from opentelemetry import trace, _events
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk._logs import LoggerProvider
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk._events import EventLoggerProvider
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter

resource = Resource(attributes={
    "service.name": "opentelemetry-instrumentation-azure-ai-agents"
})
provider = TracerProvider(resource=resource)
otlp_exporter = OTLPSpanExporter(
    endpoint="http://localhost:4318/v1/traces",
)
processor = BatchSpanProcessor(otlp_exporter)
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)

logger_provider = LoggerProvider(resource=resource)
logger_provider.add_log_record_processor(
    BatchLogRecordProcessor(OTLPLogExporter(endpoint="http://localhost:4318/v1/logs"))
)
_events.set_event_logger_provider(EventLoggerProvider(logger_provider))

 azure.ai.agents.telemetry 导入 AIAgentsInstrumentor
AIAgentsInstrumentor().instrument(True)
铸造代理服务 - TypeScript/JavaScript

安装:

npm install @azure/opentelemetry-instrumentation-azure-sdk @opentelemetry/api @opentelemetry/exporter-trace-otlp-proto @opentelemetry/instrumentation @opentelemetry/resources @opentelemetry/sdk-trace-node

Setup:

const { context } = require('@opentelemetry/api');
const { resourceFromAttributes } = require('@opentelemetry/resources');
const {
  NodeTracerProvider,
  SimpleSpanProcessor
} = require('@opentelemetry/sdk-trace-node');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-proto');

const exporter = new OTLPTraceExporter({
  url: 'http://localhost:4318/v1/traces'
});
const provider = new NodeTracerProvider({
  resource: resourceFromAttributes({
    'service.name': 'opentelemetry-instrumentation-azure-ai-inference'
  }),
  spanProcessors: [new SimpleSpanProcessor(exporter)]
});
provider.register();

```plaintext
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
const { createAzureSdkInstrumentation } = require('@azure/opentelemetry-instrumentation-azure-sdk');
```




注册仪器({
  仪器: [创建AzureSdk仪器()]
});
人类学 - Python

开放可观测性

安装:

pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http opentelemetry-instrumentation-anthropic

设置:

from opentelemetry import trace, _events
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk._logs import LoggerProvider
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk._events import EventLoggerProvider
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter

resource = Resource(attributes={
    "service.name": "opentelemetry-instrumentation-anthropic-traceloop"
})
provider = TracerProvider(resource=resource)
otlp_exporter = OTLPSpanExporter(
    endpoint="http://localhost:4318/v1/traces",
)
processor = BatchSpanProcessor(otlp_exporter)
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)

logger_provider = LoggerProvider(resource=resource)
logger_provider.add_log_record_processor(
    BatchLogRecordProcessor(OTLPLogExporter(endpoint="http://localhost:4318/v1/logs"))
)
_events.set_event_logger_provider(EventLoggerProvider(logger_provider))

from opentelemetry.instrumentation.anthropic import AnthropicInstrumentor
AnthropicInstrumentor().instrument()

Monocle

Installation:

pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http monocle_apptrace

Setup:

from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter

# Import monocle_apptrace
from monocle_apptrace import setup_monocle_telemetry

# Setup Monocle telemetry with OTLP span exporter for traces
setup_monocle_telemetry(
    workflow_name="opentelemetry-instrumentation-anthropic",
    span_processors=[
        BatchSpanProcessor(
            OTLPSpanExporter(endpoint="http://localhost:4318/v1/traces")
        )
    ]
)
人类 - TypeScript/JavaScript

安装:

npm install @traceloop/node-server-sdk

设置:

常量 { 初始化 } = 需要('@traceloop/node-server-sdk');
常量 { 跟踪 } = 需要('@opentelemetry/api');

初始化({
  应用名称: 'opentelemetry-instrumentation-anthropic-traceloop',
  基础URL: 'http://localhost:4318',
  禁用批量: true
});
谷歌双子座 - Python

开放可观测性

安装:

pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http opentelemetry-instrumentation-google-genai

Setup:

from opentelemetry import trace, _events
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk._logs import LoggerProvider
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk._events import EventLoggerProvider
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter

resource = Resource(attributes={
    "service.name": "opentelemetry-instrumentation-google-genai"
})
provider = TracerProvider(resource=resource)
otlp_exporter = OTLPSpanExporter(
    endpoint="http://localhost:4318/v1/traces",
)
processor = BatchSpanProcessor(otlp_exporter)
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)

logger_provider = LoggerProvider(resource=resource)
logger_provider.add_log_record_processor(
    BatchLogRecordProcessor(OTLPLogExporter(endpoint="http://localhost:4318/v1/logs"))
)
_events.set_event_logger_provider(EventLoggerProvider(logger_provider))

from opentelemetry.instrumentation.google_genai import GoogleGenAiSdkInstrumentor
GoogleGenAiSdkInstrumentor().instrument(enable_content_recording=True)

Monocle

Installation:

pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http monocle_apptrace

Setup:

from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter

# Import monocle_apptrace
from monocle_apptrace import setup_monocle_telemetry

# Setup Monocle telemetry with OTLP span exporter for traces
setup_monocle_telemetry(
    workflow_name="opentelemetry-instrumentation-google-genai",
    span_processors=[
        BatchSpanProcessor(
            OTLPSpanExporter(endpoint="http://localhost:4318/v1/traces")
        )
    ]
)
LangChain - Python

兰格·史密斯

安装:

pip 安装 langsmith[otel]

设置:

导入 os
os.environ["LANGSMITH_OTEL_ENABLED"] = "true"
os.environ["LANGSMITH_TRACING"] = "true"
os.environ["OTEL_EXPORTER_OTLP_ENDPOINT"] = "http://localhost:4318"

单眼镜

安装:

pip 安装 opentelemetry-sdk opentelemetry-exporter-otlp-proto-http monocle_apptrace

设置:

from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter

# Import monocle_apptrace
from monocle_apptrace import setup_monocle_telemetry

# Setup Monocle telemetry with OTLP span exporter for traces
setup_monocle_telemetry(
    workflow_name="opentelemetry-instrumentation-langchain",
    span_processors=[
        BatchSpanProcessor(
            OTLPSpanExporter(endpoint="http://localhost:4318/v1/traces")
        )
    ]
)
LangChain - TypeScript/JavaScript

安装:

npm install @traceloop/node-server-sdk

设置:

常量 { 初始化 } = 需要('@traceloop/node-server-sdk');
初始化({
  应用名称:'opentelemetry-instrumentation-langchain-traceloop',
  基础URL:'http://localhost:4318',
  禁用批量: true
});
OpenAI - Python

开放可观测性

安装:

pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http opentelemetry-instrumentation-openai-v2

设置:

from opentelemetry import trace, _events
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk._logs import LoggerProvider
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk._events import EventLoggerProvider
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
from opentelemetry.instrumentation.openai_v2 import OpenAIInstrumentor
import os

os.environ["OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT"] = "true"

# Set up resource
resource = Resource(attributes={
    "service.name": "opentelemetry-instrumentation-openai"
})

# Create tracer provider
trace.set_tracer_provider(TracerProvider(resource=resource))

# Configure OTLP exporter
otlp_exporter = OTLPSpanExporter(
    endpoint="http://localhost:4318/v1/traces"
)

# Add span processor
trace.get_tracer_provider().add_span_processor(
    BatchSpanProcessor(otlp_exporter)
)

# Set up logger provider
logger_provider = LoggerProvider(resource=resource)
logger_provider.add_log_record_processor(
    BatchLogRecordProcessor(OTLPLogExporter(endpoint="http://localhost:4318/v1/logs"))
)
_events.set_event_logger_provider(EventLoggerProvider(logger_provider))

# Enable OpenAI instrumentation
OpenAIInstrumentor().instrument()

Monocle

Installation:

pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http monocle_apptrace

Setup:

from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter

# Import monocle_apptrace
from monocle_apptrace import setup_monocle_telemetry

# 使用OTLP span导出器为跟踪设置Monocle遥测
setup_monocle_telemetry(
    workflow_name="opentelemetry-instrumentation-openai",
    span_processors=[
        BatchSpanProcessor(
            OTLPSpanExporter(endpoint="http://localhost:4318/v1/traces")
        )
    ]
)
OpenAI - TypeScript/JavaScript

安装:

npm install @traceloop/instrumentation-openai @traceloop/node-server-sdk

设置:

常量 { 初始化 } = 需要('@traceloop/node-server-sdk');
初始化({
  应用名称:'opentelemetry-instrumentation-openai-traceloop',
  基础URL:'http://localhost:4318',
  禁用批量: true
});
OpenAI Agents SDK - Python

日志火焰

安装:

pip 安装 logfire

设置:

导入 日志火
导入 操作系统

os.environ['OTEL_EXPORTER_OTLP_TRACES_ENDPOINT'] = 'http://localhost:4318/v1/traces'

logfire.configure(
    service_name="opentelemetry-instrumentation-openai-agents-logfire",
    send_to_logfire=False,
)
logfire.instrument_openai_agents()

Monocle

Installation:

pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http monocle_apptrace

Setup:

from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter

# Import monocle_apptrace
from monocle_apptrace import setup_monocle_telemetry

# 使用OTLP span导出器为跟踪设置Monocle遥测
setup_monocle_telemetry(
    workflow_name="opentelemetry-instrumentation-openai-agents",
    span_processors=[
        BatchSpanProcessor(
            OTLPSpanExporter(endpoint="http://localhost:4318/v1/traces")
        )
    ]
)

示例 1:使用 OpenTelemetry 通过 Azure AI 推理 SDK 设置跟踪

以下端到端示例使用了Python中的Azure AI推理SDK,并展示了如何设置跟踪提供程序和仪器。

先决条件

要运行此示例,您需要以下前提条件:

设置开发环境

请按照以下说明部署包含所有运行此示例所需依赖项的预配置开发环境。

  1. 设置 GitHub 个人访问令牌

    使用免费的GitHub 模型作为示例模型。

    打开 GitHub 开发者设置 并选择 生成新令牌.

    重要

    模型:读取需要权限,否则将返回未经授权。令牌将发送到Microsoft服务。

  2. 创建环境变量

    创建一个环境变量来设置您的令牌作为客户端代码的密钥,使用以下代码片段之一。替换<你的GitHub令牌放在这里>使用您的实际 GitHub 令牌。

    bash:

    导出 GITHUB_TOKEN="<你的-github-token-放在这里>"
    

    PowerShell:

    $Env:GITHUB_TOKEN="<你的-github-token-放在这里>"
    

    Windows 命令提示符:

    设置 GITHUB_TOKEN=<你的-github-令牌-放置-这里>
    
  3. 安装Python包

    以下命令使用 Azure AI 推理 SDK 安装用于跟踪所需的 Python 包:

    pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http azure-ai-inference[opentelemetry]
    
  4. 设置跟踪

    1. 在你的电脑上为项目创建一个新的本地目录。

      创建目录 my-tracing-app
      
    2. 导航到你创建的目录。

      cd 我的追踪应用
      
    3. 在该目录中打开Visual Studio Code:

      代码 .
      
  5. 创建Python文件

    1. 我的追踪应用程序目录,创建一个名为的Python文件main.py输入:.

      您将添加代码以设置跟踪并与 Azure AI 推理 SDK 进行交互。

    2. 将以下代码添加到main.py并保存文件:

      导入 os
      
      ### 设置 OpenTelemetry 用于跟踪 ###
      os.environ["AZURE_TRACING_GEN_AI_CONTENT_RECORDING_ENABLED"] = "true"
      os.environ["AZURE_SDK_TRACING_IMPLEMENTATION"] = "opentelemetry"
      
      from opentelemetry import trace, _events
      from opentelemetry.sdk.resources import Resource
      from opentelemetry.sdk.trace import TracerProvider
      from opentelemetry.sdk.trace.export import BatchSpanProcessor
      from opentelemetry.sdk._logs import LoggerProvider
      from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
      from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
      from opentelemetry.sdk._events import EventLoggerProvider
      from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
      
      github_token = os.environ["GITHUB_TOKEN"]
      
      resource = Resource(attributes={
          "service.name": "opentelemetry-instrumentation-azure-ai-inference"
      })
      provider = TracerProvider(resource=resource)
      otlp_exporter = OTLPSpanExporter(
          endpoint="http://localhost:4318/v1/traces",
      )
      processor = BatchSpanProcessor(otlp_exporter)
      provider.add_span_processor(processor)
      trace.set_tracer_provider(provider)
      
      logger_provider = LoggerProvider(resource=resource)
      logger_provider.add_log_record_processor(
          BatchLogRecordProcessor(OTLPLogExporter(endpoint="http://localhost:4318/v1/logs"))
      )
      _events.set_event_logger_provider(EventLoggerProvider(logger_provider))
      
      from azure.ai.inference.tracing import AIInferenceInstrumentor
      AIInferenceInstrumentor().instrument()
      ### Set up for OpenTelemetry tracing ###
      
      from azure.ai.inference import ChatCompletionsClient
      from azure.ai.inference.models import UserMessage
      from azure.ai.inference.models import TextContentItem
      from azure.core.credentials import AzureKeyCredential
      
      client = ChatCompletionsClient(
          endpoint = "https://models.inference.ai.azure.com",
          credential = AzureKeyCredential(github_token),
          api_version = "2024-08-01-preview",
      )
      
      response = client.complete(
          messages = [
              UserMessage(content = [
                  TextContentItem(text = "hi"),
              ]),
          ],
          model = "gpt-4.1",
          tools = [],
          response_format = "text",
          temperature = 1,
          top_p = 1,
      )
      
      打印(响应.choices[0].message.content)
      
  6. 运行代码

    1. 在Visual Studio Code中打开一个新的终端。

    2. 在终端中,使用命令运行代码python main.py输入:.

  7. 检查AI工具包中的跟踪数据

    运行代码并刷新跟踪网页视图后,列表中会有一个新的跟踪记录。

    选择跟踪以打开跟踪详细信息网页视图。

    截图显示在跟踪网页视图的跟踪列表中选择跟踪。

    在左侧的跨度树视图中查看您的应用程序的完整执行流程。

    在右侧跨度详细信息视图中选择一个跨度,以在输入 + 输出标签中查看生成式AI消息。

    选择元数据标签以查看原始元数据。

    截图显示在跟踪网页视图中的跟踪详细信息视图。

示例 2:使用 Monocle 通过 OpenAI Agents SDK 设置跟踪

以下端到端示例使用Python中的OpenAI Agents SDK与Monocle一起,展示了如何为多智能体旅行预订系统设置跟踪。

先决条件

要运行此示例,您需要以下前提条件:

设置开发环境

请按照以下说明部署包含所有运行此示例所需依赖项的预配置开发环境。

  1. 创建环境变量

    使用以下代码片段之一为您的 OpenAI API 密钥创建一个环境变量。替换<你的OpenAI API密钥>使用您的实际 OpenAI API 密钥。

    bash:

    导出 OPENAI_API_KEY="<你的-openai-api-key>"
    

    PowerShell:

    $Env:OPENAI_API_KEY="<你的-openai-api-key>"
    

    Windows 命令提示符:

    设置 OPENAI_API_KEY=<你的-openai-api-key>
    

    或者,创建一个环境变量文件在你的项目目录中创建文件:

    OPENAI_API_KEY=<你的-openai-api-key>
    
  2. 安装Python包

    创建一个要求.txt文件包含以下内容:

    opentelemetry-sdk
    opentelemetry-exporter-otlp-proto-http
    单眼应用跟踪
    openai-agents
    python-dotenv
    

    使用以下命令安装软件包:

    pip install -r requirements.txt
    
  3. 设置跟踪

    1. 在你的电脑上为项目创建一个新的本地目录。

      创建目录 my-agents-tracing-app
      
    2. 导航到你创建的目录。

      cd 我的代理追踪应用程序
      
    3. 在该目录中打开Visual Studio Code:

      代码 .
      
  4. 创建Python文件

    1. 我的代理追踪应用程序目录,创建一个名为的Python文件main.py输入:.

      您将添加代码以通过Monocle设置跟踪,并与OpenAI Agents SDK进行交互。

    2. 将以下代码添加到main.py并保存文件:

      导入 os
      
       dotenv 导入 load_dotenv
      
      # 从 .env 文件加载环境变量
      load_dotenv()
      
       opentelemetry.sdk.trace.export 导入 BatchSpanProcessor
       opentelemetry.exporter.otlp.proto.http.trace_exporter 导入 OTLPSpanExporter
      
      # 导入monocle_apptrace
       monocle_apptrace 导入 setup_monocle_telemetry
      
      # Setup Monocle telemetry with OTLP span exporter for traces
      setup_monocle_telemetry(
          workflow_name="opentelemetry-instrumentation-openai-agents",
          span_processors=[
              BatchSpanProcessor(
                  OTLPSpanExporter(endpoint="http://localhost:4318/v1/traces")
              )
          ]
      )
      
      from agents import Agent, Runner, function_tool
      
      # Define tool functions
      @function_tool
      def book_flight(from_airport: str, to_airport: str) -> str:
          """Book a flight between airports."""
          return f"Successfully booked a flight from {from_airport} to {to_airport} for 100 USD."
      
      @function_tool
      def book_hotel(hotel_name: str, city: str) -> str:
          """Book a hotel reservation."""
          return f"Successfully booked a stay at {hotel_name} in {city} for 50 USD."
      
      @function_tool
      def get_weather(city: str) -> str:
          """Get weather information for a city."""
          return f"The weather in {city} is sunny and 75°F."
      
      # Create specialized agents
      flight_agent = Agent(
          name="Flight Agent",
          instructions="You are a flight booking specialist. Use the book_flight tool to book flights.",
          tools=[book_flight],
      )
      
      hotel_agent = Agent(
          name="Hotel Agent",
          instructions="You are a hotel booking specialist. Use the book_hotel tool to book hotels.",
          tools=[book_hotel],
      )
      
      weather_agent = Agent(
          name="Weather Agent",
          instructions="You are a weather information specialist. Use the get_weather tool to provide weather information.",
          tools=[get_weather],
      )
      
      # Create a coordinator agent with tools
      coordinator = Agent(
          name="Travel Coordinator",
          instructions="You are a travel coordinator. Delegate flight bookings to the Flight Agent, hotel bookings to the Hotel Agent, and weather queries to the Weather Agent.",
          tools=[
              flight_agent.as_tool(
                  tool_name="flight_expert",
                  tool_description="Handles flight booking questions and requests.",
              ),
              hotel_agent.as_tool(
                  tool_name="hotel_expert",
                  tool_description="Handles hotel booking questions and requests.",
              ),
              weather_agent.as_tool(
                  tool_name="weather_expert",
                  tool_description="Handles weather information questions and requests.",
              ),
          ],
      )
      
      # Run the multi-agent workflow
      if __name__ == "__main__":
          import asyncio
      
          result = asyncio.run(
              Runner.run(
                  coordinator,
                  "为我预订今天从SEA到SFO的航班,然后预订那里的最佳酒店并告诉我天气情况。",
              )
          )
          print(result.final_output)
      
  5. 运行代码

    1. 在Visual Studio Code中打开一个新的终端。

    2. 在终端中,使用命令运行代码python main.py输入:.

  6. 检查AI工具包中的跟踪数据

    运行代码并刷新跟踪网页视图后,列表中会有一个新的跟踪记录。

    选择跟踪以打开跟踪详细信息网页视图。

    截图显示在跟踪网页视图的跟踪列表中选择跟踪。

    在左侧面板树视图中查看您的应用程序的完整执行流程,包括代理调用、工具调用和代理委托。

    在右侧跨度详细信息视图中选择一个跨度,以在输入 + 输出标签中查看生成式AI消息。

    选择元数据标签以查看原始元数据。

    截图显示在跟踪网页视图中的跟踪详细信息视图。

你所学到的

在本文中,您将学习如何:

  • 使用 Azure AI 推理 SDK 和 OpenTelemetry 在你的 AI 应用程序中设置跟踪。
  • 配置OTLP跟踪导出器将跟踪数据发送到本地收集服务器。
  • 运行您的应用程序以生成跟踪数据,并在AI Toolkit网页视图中查看跟踪数据。
  • 使用带有多个 SDK 和语言(包括 Python 和 TypeScript/JavaScript)以及通过 OTLP 使用非 Microsoft 工具的跟踪功能。
  • 使用提供的代码片段,测试各种AI框架(Anthropic、Gemini、LangChain、OpenAI等)。
  • 使用跟踪网页视图界面,包括启动收集器刷新按钮来管理跟踪数据。
  • 设置开发环境,包括环境变量和包安装,以启用跟踪。
  • 使用生成树和详细视图分析你的应用执行流程,包括生成式AI消息流和元数据。