Просмотр результатов трассировки для приложений ИИ с помощью SDK OpenAI (классический)

Применяется только к:Портал Foundry (классический). Эта статья недоступна для нового портала Foundry. Дополнительные сведения о новом портале.

Примечание

Содержание в новой документации Microsoft Foundry может открываться по ссылкам в этой статье вместо документации Foundry (классической версии), которую вы просматриваете сейчас.

Узнайте, как просматривать результаты трассировки, обеспечивающие видимость выполнения приложения ИИ. Используйте трассировки для диагностики неточных вызовов инструментов, вводящих в заблуждение подсказок, узких мест, вызывающих задержку, и оценок низкого качества.

В этой статье описано, как:

  • Включите трассировку для проекта.
  • Настройка пакета SDK OpenAI.
  • Запись содержимого сообщения (необязательно).
  • Просмотр временной шкалы трассировки и диапазонов.
  • Подключите трассировку к контурам оценки.

В этой статье объясняется, как просмотреть результаты трассировки для приложений ИИ с помощью пакета SDK OpenAI SDK с помощью OpenTelemetry в Microsoft Foundry.

Необходимые условия

Для выполнения этого руководства вам потребуется следующее:

  • Создан проект Foundry.

  • Приложение ИИ, использующее пакет SDK OpenAI для вызова моделей, размещенных в Foundry.

Включите трассировку в вашем проекте

Foundry хранит трассировки в приложение Azure Insights с помощью OpenTelemetry. Новые ресурсы не подготавливают Application Insights автоматически. Свяжите (или создайте) ресурс один раз для каждого ресурса Foundry.

Ниже показано, как настроить ресурс.

  1. Перейдите на портал Foundry и перейдите к проекту.

  2. На боковой панели навигации выберите "Трассировка".

  3. Если ресурс приложение Azure Insights не связан с ресурсом Foundry, свяжите его. Если у вас уже есть связанный ресурс Application Insights, вы не увидите показанную ниже страницу включения и можете пропустить этот шаг.

    Скриншот, показывающий, как настроить приложение Azure Insights для ресурса Foundry.

    1. Чтобы повторно использовать существующую службу приложение Azure Insights, используйте раскрывающийся список , чтобы найти ресурс и выбрать Connect.

      Совет

      Чтобы подключиться к существующему приложение Azure Insights, вам нужен по крайней мере доступ уровня участника к ресурсу Foundry (или Hub).

    2. Чтобы подключиться к новому ресурсу приложение Azure Insights, выберите параметр Create new.

      1. Используйте мастер конфигурации, чтобы настроить имя нового ресурса.

      2. По умолчанию новый ресурс создается в той же группе ресурсов, где был создан ресурс Foundry. Используйте параметр "Заранее" , чтобы настроить другую группу ресурсов или подписку.

        Совет

        Чтобы создать ресурс приложение Azure Insights, вам также нужна роль участника в выбранной группе ресурсов (или по умолчанию).

      3. Выберите "Создать ", чтобы создать ресурс и подключить его к ресурсу Foundry.

    3. После настройки подключения можно будет использовать трассировку в любом проекте в ресурсе.

    Совет

    Убедитесь, что в ресурсе Application Insights назначена роль Log Analytics Reader. Дополнительные сведения о назначении ролей см. в статье Назначение ролей Azure с помощью портала Azure. Используйте группы Microsoft Entra для упрощения управления доступом для пользователей.

  4. Перейдите на целевую страницу проекта и скопируйте URI конечной точки проекта. Вам потребуется позже.

    Снимок экрана: копирование URI конечной точки проекта.

    Важно

    Для использования конечной точки проекта требуется настройка Microsoft Entra ID в приложении. Если вы не настроили Entra ID, используйте строку подключения приложение Azure Insights, как показано на шаге 3 руководства.

Просмотр результатов трассировки на портале Foundry

После настройки трассировки и инструментирования приложения можно просмотреть результаты трассировки на портале Foundry:

  1. Перейдите на портал Foundry и перейдите к проекту.

  2. На боковой панели навигации выберите "Трассировка".

  3. Вы увидите список результатов трассировки из инструментированных приложений. Каждая трассировка показывает:

    • Идентификатор трассы: уникальный идентификатор трассы
    • Время начала трассировки: когда началась трассировка
    • Длительность: продолжительность операции
    • Статус: успешный или сбойный
    • Операции: количество диапазонов в трассировке
  4. Выберите любую трассировку для просмотра подробных результатов трассировки, включая:

    • Полная временная шкала выполнения
    • Входные и выходные данные для каждой операции
    • Метрики производительности и время
    • Сведения об ошибке при возникновении каких-либо ошибок
    • Пользовательские атрибуты и метаданные

Реализуйте SDK OpenAI

При разработке с помощью пакета SDK OpenAI можно инструментировать код, чтобы трассировки отправлялись в Foundry. Выполните следующие действия, чтобы инструментировать код:

  1. Установка пакетов:

    pip install azure-ai-projects azure-monitor-opentelemetry opentelemetry-instrumentation-openai-v2
    
  2. (Необязательно) Запись содержимого сообщения:

    • Powershell: setx OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT true
    • Bash: export OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true
  3. Получите строку подключения для связанного ресурса Application Insights (Проект > Трассировка > Управление источником данных > Строка подключения):

    from azure.ai.projects import AIProjectClient
    from azure.identity import DefaultAzureCredential
    
    project_client = AIProjectClient(
         credential=DefaultAzureCredential(),
         endpoint="https://<your-resource>.services.ai.azure.com/api/projects/<your-project>",
    )
    connection_string = project_client.telemetry.get_application_insights_connection_string()
    
  4. Настройте Azure Monitor и инструмент openAI SDK:

    from azure.monitor.opentelemetry import configure_azure_monitor
    from opentelemetry.instrumentation.openai_v2 import OpenAIInstrumentor
    
    configure_azure_monitor(connection_string=connection_string)
    OpenAIInstrumentor().instrument()
    
  5. Отправьте запрос:

    client = project_client.get_openai_client()
    response = client.chat.completions.create(
         model="gpt-4o-mini", 
         messages=[{"role": "user", "content": "Write a short poem on open telemetry."}],
    )
    print(response.choices[0].message.content)
    
  6. Вернитесь к трассировке на портале, чтобы просмотреть новые трассировки.

    Снимок экрана: представление трассировки запроса завершения чата с интервалами и задержками.

  7. Это может быть полезно для записи разделов кода, которые смешивают бизнес-логику с моделями при разработке сложных приложений. OpenTelemetry использует концепцию диапазонов для отслеживания интересующих вас разделов. Чтобы начать генерацию собственных диапазонов, получите экземпляр текущего объекта трассировщика.

    from opentelemetry import trace
    
    tracer = trace.get_tracer(__name__)
    
  8. Затем используйте декораторы в вашем методе для захвата конкретных сценариев в коде, представляющем для вас интерес. Эти декораторы автоматически создают диапазоны. В следующем примере кода используется метод, называемый assess_claims_with_context, который итерирует список утверждений и проверяет, соответствует ли утверждение контексту с помощью LLM. Все вызовы, выполненные в этом методе, фиксируются в одном диапазоне:

    def build_prompt_with_context(claim: str, context: str) -> str:
        return [{'role': 'system', 'content': "I will ask you to assess whether a particular scientific claim, based on evidence provided. Output only the text 'True' if the claim is true, 'False' if the claim is false, or 'NEE' if there's not enough evidence."},
                {'role': 'user', 'content': f"""
                    The evidence is the following: {context}
    
                    Assess the following claim on the basis of the evidence. Output only the text 'True' if the claim is true, 'False' if the claim is false, or 'NEE' if there's not enough evidence. Do not output any other text.
    
                    Claim:
                    {claim}
    
                    Assessment:
                """}]
    
    @tracer.start_as_current_span("assess_claims_with_context")
    def assess_claims_with_context(claims, contexts):
        responses = []
        for claim, context in zip(claims, contexts):
            response = client.chat.completions.create(
                model="gpt-4.1",
                messages=build_prompt_with_context(claim=claim, context=context),
            )
            responses.append(response.choices[0].message.content.strip('., '))
    
        return responses
    
  9. Результаты трассировки выглядят следующим образом:

    Снимок экрана, показывающий, как метод, использующий декоратор, отображается в трассировке.

  10. Вы также можете добавить дополнительные сведения в текущий диапазон. OpenTelemetry использует концепцию атрибутов для этого. trace Используйте объект для доступа к ним и включения дополнительных сведений. Узнайте, как assess_claims_with_context метод был изменен для включения атрибута:

    @tracer.start_as_current_span("assess_claims_with_context")
    def assess_claims_with_context(claims, contexts):
        responses = []
        current_span = trace.get_current_span()
    
        current_span.set_attribute("operation.claims_count", len(claims))
    
        for claim, context in zip(claims, contexts):
            response = client.chat.completions.create(
                model="gpt-4.1",
                messages=build_prompt_with_context(claim=claim, context=context),
            )
            responses.append(response.choices[0].message.content.strip('., '))
    
        return responses
    

Трассировка в консоль

Это также может быть полезно для отслеживания выполнения вашего приложения и отправки данных в локальную консоль. Этот подход может оказаться полезным при выполнении модульных тестов или тестов интеграции в приложении с помощью автоматизированного конвейера CI/CD. Трассировки можно отправлять в консоль и записывать с помощью средства CI/CD для дальнейшего анализа.

Настройте трассировку следующим образом:

  1. Настройка SDK OpenAI как обычно:

    from opentelemetry.instrumentation.openai_v2 import OpenAIInstrumentor
    
    OpenAIInstrumentor().instrument()
    
  2. Настройте OpenTelemetry для отправки трассировок в консоль:

    from opentelemetry import trace
    from opentelemetry.sdk.trace import TracerProvider
    from opentelemetry.sdk.trace.export import SimpleSpanProcessor, ConsoleSpanExporter
    
    span_exporter = ConsoleSpanExporter()
    tracer_provider = TracerProvider()
    tracer_provider.add_span_processor(SimpleSpanProcessor(span_exporter))
    trace.set_tracer_provider(tracer_provider)
    
  3. Используйте пакет SDK OpenAI как обычно:

    response = client.chat.completions.create(
        model="deepseek-v3-0324",
        messages=[
            {"role": "user", "content": "Write a short poem on open telemetry."},
        ],
    )
    
    {
        "name": "chat deepseek-v3-0324",
        "context": {
            "trace_id": "0xaaaa0a0abb1bcc2cdd3d",
            "span_id": "0xaaaa0a0abb1bcc2cdd3d",
            "trace_state": "[]"
        },
        "kind": "SpanKind.CLIENT",
        "parent_id": null,
        "start_time": "2025-06-13T00:02:04.271337Z",
        "end_time": "2025-06-13T00:02:06.537220Z",
        "status": {
            "status_code": "UNSET"
        },
        "attributes": {
            "gen_ai.operation.name": "chat",
            "gen_ai.system": "openai",
            "gen_ai.request.model": "deepseek-v3-0324",
            "server.address": "my-project.services.ai.azure.com",
            "gen_ai.response.model": "DeepSeek-V3-0324",
            "gen_ai.response.finish_reasons": [
                "stop"
            ],
            "gen_ai.response.id": "aaaa0a0abb1bcc2cdd3d",
            "gen_ai.usage.input_tokens": 14,
            "gen_ai.usage.output_tokens": 91
        },
        "events": [],
        "links": [],
        "resource": {
            "attributes": {
                "telemetry.sdk.language": "python",
                "telemetry.sdk.name": "opentelemetry",
                "telemetry.sdk.version": "1.31.1",
                "service.name": "unknown_service"
            },
            "schema_url": ""
        }
    }
    

Локальная трассировка с использованием инструментов ИИ

AI Toolkit предлагает простой способ локальной трассировки в VS Code. Он использует локальный сборщик, совместимый с OTLP, что делает его идеальным для разработки и отладки без необходимости доступа к облаку.

Набор средств поддерживает пакет SDK OpenAI и другие платформы ИИ с помощью OpenTelemetry. Вы можете увидеть трейсы мгновенно в вашей среде разработки.

Для получения подробных инструкций по настройке и примеров кода, относящихся к SDK, см. Tracing in AI Toolkit.

  • Отслеживание агентов с помощью пакета SDK Microsoft Foundry