Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве вы развернете многоагентное приложение для планирования путешествий в Служба приложений Azure, настроите его инструментирование с помощью OpenTelemetry и семантических соглашений OpenTelemetry для генеративного ИИ, а затем будете использовать панель AI (предварительная версия) в App Service, а также представление Agents (предварительная версия) в Application Insights для мониторинга метрик по каждому агенту.
Пример построен с помощью Microsoft Agent Framework и использует Azure OpenAI в качестве серверной части модели. Агент-координатор делегирует пять специалистов (погода, валюта, бюджет, местные знания и маршрут). После развертывания и запуска приложения данные телеметрии по каждому агенту автоматически агрегируются в портале:
В этом руководстве вы узнаете, как:
- Разверните многоагентное приложение ASP.NET Core вместе с ресурсом Application Insights и развертыванием Azure OpenAI.
- Настройте дистрибутив OpenTelemetry для Azure Monitor в своем приложении.
- Включите семантические соглашения OpenTelemetry GenAI в Microsoft Agent Framework, чтобы передавались атрибуты каждого агента.
- Просматривайте метрики для каждого агента на вкладке AI службы приложений (предварительная версия) → Агенты.
- Перейдите к представлению Agents (preview) в Application Insights, чтобы просматривать вызовы инструментов, потребление токенов и трассировки.
- Устранение распространенных причин, по которым вкладка "Агенты" пуста.
Необходимые условия
- Подписка Azure с разрешениями на создание ресурсов Службы приложений, Application Insights и Azure OpenAI. Создайте учетную запись бесплатно.
- Квота для модели
gpt-4oв выбранном регионе Azure. См. квоты и ограничения Azure OpenAI. - .NET 9 SDK.
- Azure Developer CLI (azd) версии 1.10 или более поздней версии.
- (Необязательно) Azure CLI для проверки ресурсов.
1. Получение примера
git clone https://github.com/Azure-Samples/multi-agent-travel-planner-dotnet.git
cd multi-agent-travel-planner-dotnet
Репозиторий организован так, что интеграцию OpenTelemetry и определения агентов легко найти:
.
├── azure.yaml # azd config (App Service host)
├── infra/ # Bicep: App Service plan, Web App, App Insights, Azure OpenAI
└── src/MultiAgentTravelPlanner/
├── Program.cs # OpenTelemetry distro + agent registration
├── Agents/AgentCatalog.cs # Coordinator + 5 specialist agents
├── Tools/TravelTools.cs # Function tools the agents call
└── wwwroot/index.html # Minimal chat UI
2. Развертывание с помощью azd
azd auth login
azd up
azd up запрашивает имя среды, подписку Azure и регион. Затем он подготавливает:
- План службы приложений Linux (P0v3) и веб-приложение .NET 9 с управляемой идентификацией, назначаемой системой.
- Рабочая область Log Analytics и ресурс Application Insights на основе рабочей области. Строка подключения задается в веб-приложении как
APPLICATIONINSIGHTS_CONNECTION_STRING. - Учетная запись Azure OpenAI с развертыванием
gpt-4o. Управляемое удостоверение веб-приложения предоставляется пользователю OpenAI Cognitive Services в учетной записи, чтобы приложение может вызывать модель без ключей.
После завершения azd развертывания выводит URL-адрес веб-приложения. Откройте его и отправьте 3–5 сообщений, чтобы просмотреть данные телеметрии. Рассмотрим пример.
Запланируйте 4-дневную поездку в Лиссабон в июле для двух человек в среднем бюджете. Включите сведения о погоде и курсах валют.
3. Посмотрите на проводку OpenTelemetry
В этом примере связываются три компонента, чтобы вкладка «Агенты» работала:
a. Оберните каждый агент с UseOpenTelemetry.
Microsoft Agent Framework создаёт интервалы gen_ai.* только когда вы оборачиваете агент в оболочку делегирования OpenTelemetryAgent. Самый простой способ — через AsBuilder().UseOpenTelemetry(sourceName). См. Agents/AgentCatalog.cs:
private static AIAgent WithTelemetry(AIAgent agent) =>
agent.AsBuilder()
.UseOpenTelemetry(TelemetrySourceName, otel => otel.EnableSensitiveData = true)
.Build();
AIAgent weather = WithTelemetry(chat.AsAIAgent(
instructions: "...",
name: "WeatherAdvisor",
description: "...",
tools: [AIFunctionFactory.Create(tools.GetWeatherForecast)]));
Значение агента name попадает в атрибут gen_ai.agent.name , и именно по нему выполняется группировка на вкладке Agents.
EnableSensitiveData = true включает добавление содержимого сообщений в спаны (по умолчанию отключено — установите false в рабочей среде или управляйте этим с помощью переменной среды OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT).
б. Отправьте все в Application Insights с помощью дистрибутива Azure Monitor и подпишитесь на источник событий активности агента.
builder.Services.AddOpenTelemetry()
.UseAzureMonitor()
.ConfigureResource(r => r.AddService(serviceName: "multi-agent-travel-planner"))
.WithTracing(t => t
.AddSource(AgentCatalog.TelemetrySourceName)
.AddSource("Microsoft.Extensions.AI*")
.AddSource("OpenAI*")
.AddSource("Experimental.OpenAI*")
.AddSource("Azure.AI.OpenAI*"))
.WithMetrics(m => m
.AddMeter(AgentCatalog.TelemetrySourceName)
.AddMeter("Microsoft.Extensions.AI*")
.AddMeter("OpenAI*"));
UseAzureMonitor() автоматически считывается APPLICATIONINSIGHTS_CONNECTION_STRING из конфигурации и проводных трассировок, журналов и метрик в Application Insights. Вызовы AddSource и AddMeter регистрируют источники активности и измерители, через которые Microsoft Agent Framework и базовый SDK OpenAI публикуют телеметрию.
Вот и все. Имя и идентификатор каждого агента передаются в каждом спане как gen_ai.agent.name / gen_ai.agent.id, данные об использовании токенов проходят через gen_ai.usage.input_tokens и gen_ai.usage.output_tokens, а вызовы инструментов и модели отображаются как execute_tool и дочерние спаны завершения чата.
Important
Шаблон Bicep в этом примере задаёт ApplicationInsightsAgent_EXTENSION_VERSION=disabled для веб-приложения. Это отключает бескодовое подключение к App Service для .NET, чтобы внутрипроцессный дистрибутив OpenTelemetry для Azure Monitor не конкурировал за одни и те же источники Activity. При инструментировании приложения в коде всегда отключайте агент без кода.
4. Просмотр метрик для каждого агента в Службе приложений
- На портале Azure откройте веб-приложение.
- В области навигации слева выберите ИИ (предварительная версия).
- Перейдите на вкладку "Агенты ".
Вы должны увидеть по одной строке для каждого зарегистрированного агента (Coordinator, WeatherAdvisor, CurrencyConverter, BudgetOptimizer, LocalKnowledge, ItineraryPlanner) с количеством вызовов, токенов и уровнем ошибок за выбранный диапазон дат. Используйте поле поиска, имя агента и фильтры идентификатора агента, чтобы сузить список. Выберите Просмотреть журналы в любой строке, чтобы открыть Application Insights с запросом, ограниченным этим агентом.
5. Подробнее о Application Insights
Выберите "Вид" в Application Insights в верхней части вкладки "Агенты ". Откроется представление агентов (предварительная версия) в ресурсе Application Insights, подключенном к веб-приложению:
Здесь вы сможете:
- Сравните запуски агентов за период времени и посмотрите, у какого агента самый высокий уровень ошибок.
- Просмотр количества вызовов для каждого инструмента и средних продолжительности вызовов.
- Разбивка потребления токенов по моделям и по входным и выходным данным.
- Используйте Просмотреть трассировки с запусками агента или Просмотреть трассировки с ошибками генеративного ИИ, чтобы перейти к соответствующим распределённым трассировкам.
Дополнительные сведения об этом представлении см. в разделе "Агенты" (предварительная версия) в Application Insights.
6. Устранение неполадок
Если вкладка "Агенты " пуста или не завершена, проверьте следующее.
Агенты вообще не указаны.
- Убедитесь, что ресурс Application Insights веб-приложения подключен. Откройте колонку Application Insights веб-приложения (в разделе "Параметры") и проверьте подключение.
- Убедитесь, что
APPLICATIONINSIGHTS_CONNECTION_STRINGприсутствует в качестве параметра приложения App Service. Шаблонazdзадаёт его автоматически; если вы адаптировали шаблон Bicep, ещё раз проверьте. - В приложении убедитесь, что вы вызываете
.UseAzureMonitor()и.AddSource("Microsoft.Agents.AI")(а также источникиMicrosoft.Extensions.AI). Если одно из этих вариантов отсутствует, диапазоны агентов не будут экспортированы.
Агенты отображаются, но токены или вызовы равны нулю.
Убедитесь, что каждый агент обёрнут в
UseOpenTelemetryв его конструкторе:AIAgent agent = chat.AsAIAgent(...) .AsBuilder() .UseOpenTelemetry("MyAgentSource", o => o.EnableSensitiveData = true) .Build();И что то же имя источника зарегистрировано в конвейере OpenTelemetry с помощью
.WithTracing(t => t.AddSource("MyAgentSource")).Вкладка "Агенты" использует атрибуты
gen_ai.usage.input_tokensиgen_ai.usage.output_tokens. Проверьте это, выполнив этот запрос в Logs:dependencies | where timestamp > ago(1h) | where customDimensions has "gen_ai.agent.name" | project timestamp, name, customDimensions | take 20Вы должны увидеть ключи
gen_ai.agent.name,gen_ai.agent.idиgen_ai.usage.*вcustomDimensions.
Ошибки указывают AuthenticationFailed на Azure OpenAI.
- Управляемое удостоверение веб-приложения, назначаемое системой, требует роли Cognitive Services OpenAI User в учетной записи Azure OpenAI. Bicep в
infra/modules/roles.bicepназначает его. Если вы развернули в другом месте, назначьте роль вручную.
Дискретизация приводит к потере данных.
- Дистрибутив OpenTelemetry для Azure Monitor по умолчанию применяет адаптивную выборку. Если вы тестируете при низком объёме данных и строки отсутствуют, установите
o.SamplingRatio = 1.0fвUseAzureMonitorна время теста.
7. Очистка ресурсов
azd down --purge
Это удаляет группу ресурсов, ресурс App Service, ресурс Application Insights и учётную запись Azure OpenAI, включая ресурсы Azure OpenAI, помеченные как удалённые, поэтому рекомендуется --purge.