Бөлісу құралы:


Наблюдаемость агента

Это важно

Чтобы получить ранний доступ для Майкрософт Агента 365, вам нужно попасть в программу предварительного просмотра Frontier<> Frontier напрямую связывает вас с последними инновациями Майкрософт в области искусственного интеллекта. Предпросмотры Frontier подчиняются существующим условиям предварительного просмотра в рамках ваших клиентских соглашений. Так как эти функции еще находятся в разработке, их доступность и возможности могут со временем меняться.

Чтобы участвовать в экосистеме Agent 365, добавьте возможности наблюдаемости Agent 365 к вашему агенту. Agent 365 Observability основан на OpenTelemetry (OTel ) и предоставляет единую структуру для последовательного и безопасного захвата телеметрии на всех платформах агентов. Реализуя этот необходимый компонент, вы даёте ИТ-администраторам возможность отслеживать активность вашего агента в административном центре Майкрософт и позволяете командам безопасности использовать Defender и Purview для соблюдения требований и обнаружения угроз.

Ключевые преимущества

  • Сквозная видимость: Захватывайте подробную телеметрию для каждого вызова агента, включая сессии, вызовы инструментов и исключения, обеспечивая полную отслеживаемость между платформами.
  • Security and compliance enablement: Вводите унифицированные журналы аудита в Defender и Purview, позволяя создавать продвинутые сценарии безопасности и отчётность по соблюдению требований для вашего агента.
  • Кроссплатформенная гибкость: Строить на стандартах OTel и поддерживать разнообразные runtime и платформы, такие как Copilot Studio, Foundry и фреймворки будущих агентов.
  • Операционная эффективность для администраторов: Обеспечьте централизованную наблюдаемость в Центр администрирования Microsoft 365, сокращая время устранения неполадок и улучшая управление с помощью ролевых контролей доступа для ИТ-команд, управляющих вашим агентом.

Installation

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

Установите пакеты для наблюдения ядра и runtime. Все агенты, использующие Agent 365 Observability, нуждаются в таких пакетах.

pip install microsoft-agents-a365-observability-core
pip install microsoft-agents-a365-runtime

Если ваш агент использует пакет Майкрософт Agents Hosting, установите пакет интеграции хостинга. Он предоставляет промежуточное ПО, которое автоматически заполняет багаж и области из TurnContext, а также включает кэш токенов для экспортера наблюдаемости.

pip install microsoft-agents-a365-observability-hosting

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

# For Semantic Kernel
pip install microsoft-agents-a365-observability-extensions-semantic-kernel

# For OpenAI Agents SDK
pip install microsoft-agents-a365-observability-extensions-openai

# For Microsoft Agent Framework
pip install microsoft-agents-a365-observability-extensions-agent-framework

# For LangChain
pip install microsoft-agents-a365-observability-extensions-langchain

Конфигурация

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

Установите ENABLE_A365_OBSERVABILITY_EXPORTER переменную среды на true для наблюдаемости. Эта настройка экспортирует логи в сервис и требует предоставления .token_resolver В противном случае используется консольный экспортер.

from microsoft_agents_a365.observability.core import configure

def token_resolver(agent_id: str, tenant_id: str) -> str | None:
    # Implement secure token retrieval here
    return "Bearer <token>"

configure(
    service_name="my-agent-service",
    service_namespace="my.namespace",
    token_resolver=token_resolver,
)

Резольвер токенов исключён из входа в консоль.

Вы можете настроить поведение экспортера, передав Agent365ExporterOptions экземпляр в exporter_options. Когда exporter_options предоставлена, она имеет приоритет над token_resolver параметрами и (and cluster_category ).

from microsoft_agents_a365.observability.core import configure, Agent365ExporterOptions

configure(
    service_name="my-agent-service",
    service_namespace="my.namespace",
    exporter_options=Agent365ExporterOptions(
        cluster_category="prod",
        token_resolver=token_resolver,
    ),
    suppress_invoke_agent_input=True,
)

Следующая таблица описывает необязательные параметры для configure().

Параметр Description По умолчанию
logger_name Название логгера Python, используемого для отладки и вывода консольных логов. microsoft_agents_a365.observability.core
exporter_options Экземпляр Agent365ExporterOptions , который настраивает токен-резолвер и категорию кластера вместе. None
suppress_invoke_agent_input Когда True, подавляет входящие сообщения на InvokeAgent пролётах. False

Следующая таблица описывает необязательные свойства для Agent365ExporterOptions.

Недвижимость Description По умолчанию
use_s2s_endpoint Когда True, использует путь от сервиса к конечной точке. False
max_queue_size Максимальный размер очереди для пакетного процессора. 2048
scheduled_delay_ms Задержка в миллисекундах между экспортными партиями. 5000
exporter_timeout_ms Тайм-аут в миллисекундах для операции экспорта. 30000
max_export_batch_size Максимальный размер партии для экспортных операций. 512

Атрибуты багажа

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

from microsoft_agents_a365.observability.core import BaggageBuilder

with (
    BaggageBuilder()
    .tenant_id("tenant-123")
    .agent_id("agent-456")
    .conversation_id("conv-789")
    .build()
):
    # Any spans started in this context will receive these as attributes
    pass

Чтобы автоматически заполнить BaggageBuilder из TurnContext, используйте populate помощник в microsoft-agents-a365-observability-hosting пакете. Этот помощник автоматически извлекает данные звонящего, агента, арендатора, канала и разговора из активности.

from microsoft_agents.hosting.core.turn_context import TurnContext
from microsoft_agents_a365.observability.core import BaggageBuilder
from microsoft_agents_a365.observability.hosting.scope_helpers.populate_baggage import populate

builder = BaggageBuilder()
populate(builder, turn_context)

with builder.build():
    # Baggage is auto-populated from the TurnContext activity
    pass

Багажное промежуточное программное обеспечение

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

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

from microsoft_agents_a365.observability.hosting import BaggageMiddleware

adapter.use(BaggageMiddleware())

Альтернативно, используйте ObservabilityHostingManager для настройки багажного промежуточного ПО вместе с другими функциями хостинга:

from microsoft_agents_a365.observability.hosting import ObservabilityHostingManager, ObservabilityHostingOptions

options = ObservabilityHostingOptions(enable_baggage=True)
ObservabilityHostingManager.configure(adapter.middleware_set, options)

Middleware пропускает настройку багажа для асинхронных ответов (ContinueConversation событий), чтобы избежать перезаписи багажа, который уже задал исходный запрос.

Token resolver

При использовании экспортера Agent 365 необходимо предоставить функцию резольвера токенов, которая возвращает токен аутентификации. Когда вы используете SDK Agent 365 Observability с фреймворком Agent Hosting, вы можете генерировать токены с помощью TurnContext действий from agent.

from microsoft_agents.activity import load_configuration_from_env
from microsoft_agents.authentication.msal import MsalConnectionManager
from microsoft_agents.hosting.aiohttp import CloudAdapter
from microsoft_agents.hosting.core import (
    AgentApplication,
    Authorization,
    MemoryStorage,
    TurnContext,
    TurnState,
)
from microsoft_agents_a365.runtime import (
    get_observability_authentication_scope,
)

agents_sdk_config = load_configuration_from_env(environ)

STORAGE = MemoryStorage()
CONNECTION_MANAGER = MsalConnectionManager(**agents_sdk_config)
ADAPTER = CloudAdapter(connection_manager=CONNECTION_MANAGER)
ADAPTER.use(TranscriptLoggerMiddleware(ConsoleTranscriptLogger()))
AUTHORIZATION = Authorization(STORAGE, CONNECTION_MANAGER, **agents_sdk_config)

AGENT_APP = AgentApplication[TurnState](
    storage=STORAGE, adapter=ADAPTER, authorization=AUTHORIZATION, **agents_sdk_config
)

@AGENT_APP.activity("message", auth_handlers=["AGENTIC"])
async def on_message(context: TurnContext, _state: TurnState):
    aau_auth_token = await AGENT_APP.auth.exchange_token(
                        context,
                        scopes=get_observability_authentication_scope(),
                        auth_handler_id="AGENTIC",
                    )
    # cache this auth token and return via token resolver

В случае с цифровым работником, если ваш агент использует пакет Майкрософт Agent 365 Observability Hosting Library, используйте AgenticTokenCache для автоматической обработки кэширования токенов. Регистрируйте токен один раз на каждого агента и арендатора во время обработчика активности и передайте cache.get_observability_token его token_resolver в конфигурацию наблюдаемости.

from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.hosting.token_cache_helpers import (
    AgenticTokenCache,
    AgenticTokenStruct,
)
from microsoft_agents_a365.runtime import get_observability_authentication_scope

# Create a shared cache instance
token_cache = AgenticTokenCache()

# Use the cache as your token resolver in configure()
configure(
    service_name="my-agent-service",
    service_namespace="my.namespace",
    token_resolver=token_cache.get_observability_token,
)

@AGENT_APP.activity("message", auth_handlers=["AGENTIC"])
async def on_message(context: TurnContext, _state: TurnState):
    token_cache.register_observability(
        agent_id="agent-456",
        tenant_id="tenant-123",
        token_generator=AgenticTokenStruct(
            authorization=AGENT_APP.auth,
            turn_context=context,
        ),
        observability_scopes=get_observability_authentication_scope(),
    )

Автоматическое инструментирование

Автоматическое инструментирование слушает сигналы телеметрии агентских фреймворков (SDK) для трассировок и перенаправляет их в службу наблюдаемости Agent 365. Эта функция устраняет необходимость для разработчиков вручную писать мониторинговый код, упрощает настройку и обеспечивает последовательное отслеживание производительности.

Несколько SDK и платформ поддерживают автоинструментирование:

Platform Поддерживаемые пакеты SDK / Платформы
.NET Semantic Kernel, OpenAI, Agent Framework
Python Semantic Kernel, OpenAI, Agent Framework, LangChain
Node.js OpenAI,LangChain

Замечание

Поддержка автоматического инструментирования зависит от реализации платформы и пакета SDK.

Semantic Kernel

Для автоматического инструментирования требуется использование построителя багажа. Задайте идентификатор агента и идентификатор арендатора с помощью BaggageBuilder.

Установите пакет .

pip install microsoft-agents-a365-observability-extensions-semantic-kernel

Настройка наблюдаемости.

from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.extensions.semantickernel.trace_instrumentor import SemanticKernelInstrumentor

# Configure observability
configure(
    service_name="my-semantic-kernel-agent",
    service_namespace="ai.agents"
)

# Enable auto-instrumentation
instrumentor = SemanticKernelInstrumentor()
instrumentor.instrument()

# Your Semantic Kernel code is now automatically traced

Открытый ИИ

Для автоматического инструментирования требуется использование построителя багажа. Задайте идентификатор агента и идентификатор арендатора с помощью BaggageBuilder.

Установите пакет .

pip install microsoft-agents-a365-observability-extensions-openai

Настройка наблюдаемости.

from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.extensions.openai import OpenAIAgentsTraceInstrumentor

# Configure observability
configure(
    service_name="my-openai-agent",
    service_namespace="ai.agents"
)

# Enable auto-instrumentation
instrumentor = OpenAIAgentsTraceInstrumentor()
instrumentor.instrument()

# Your OpenAI Agents code is now automatically traced

Платформа агента

Для автоматического инструментирования требуется использование построителя багажа. Задайте идентификатор агента и идентификатор арендатора с помощью BaggageBuilder.

Установите пакет .

pip install microsoft-agents-a365-observability-extensions-agent-framework

Настройка наблюдаемости.

from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.extensions.agentframework import (
    AgentFrameworkInstrumentor,
)

# Configure observability
configure(
    service_name="AgentFrameworkTracingWithAzureOpenAI",
    service_namespace="AgentFrameworkTesting",
)

# Enable auto-instrumentation
AgentFrameworkInstrumentor().instrument()

Фреймворк LangChain

Автоматическое инструментирование требует использования построителя багажа. Задайте идентификатор агента и идентификатор арендатора с помощью BaggageBuilder.

Установите пакет .

pip install microsoft-agents-a365-observability-extensions-langchain

Настройка наблюдаемости.

from microsoft_agents_a365.observability.core.config import configure
from microsoft_agents_a365.observability.extensions.langchain import CustomLangChainInstrumentor

# Configure observability
configure(
    service_name="my-langchain-agent",
    service_namespace="ai.agents"
)

# Enable auto-instrumentation
CustomLangChainInstrumentor()

# Your LangChain code is now automatically traced

Ручное инструментирование

Используйте SDK наблюдаемости Agent 365, чтобы понять внутреннюю работу агента. SDK предоставляет скопы, которые можно запустить: InvokeAgentScope, ExecuteToolScope, InferenceScope, и OutputScope.

Вызов агента

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

from microsoft_agents_a365.observability.core import (
    InvokeAgentScope,
    InvokeAgentScopeDetails,
    AgentDetails,
    CallerDetails,
    UserDetails,
    Channel,
    Request,
    ServiceEndpoint,
)

agent_details = AgentDetails(
    agent_id="agent-456",
    agent_name="My Agent",
    agent_description="An AI agent powered by Azure OpenAI",
    agentic_user_id="auid-123",
    agentic_user_email="agent@contoso.com",
    agent_blueprint_id="blueprint-789",
    tenant_id="tenant-123",
)

scope_details = InvokeAgentScopeDetails(
    endpoint=ServiceEndpoint(hostname="myagent.contoso.com", port=443),
)

request = Request(
    content="User asks a question",
    session_id="session-42",
    conversation_id="conv-xyz",
    channel=Channel(name="msteams"),
)

caller_details = CallerDetails(
    user_details=UserDetails(
        user_id="user-123",
        user_email="jane.doe@contoso.com",
        user_name="Jane Doe",
    ),
)

with InvokeAgentScope.start(request, scope_details, agent_details, caller_details):
    # Perform agent invocation logic
    response = call_agent(...)

Запуск инструмента

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

from microsoft_agents_a365.observability.core import (
    ExecuteToolScope,
    ToolCallDetails,
    Request,
    ServiceEndpoint,
)

# Use the same agent_details and request instances from the InvokeAgentScope example above

tool_details = ToolCallDetails(
    tool_name="summarize",
    tool_type="function",
    tool_call_id="tc-001",
    arguments="{'text': '...'}",
    description="Summarize provided text",
    endpoint=ServiceEndpoint(hostname="tools.contoso.com", port=8080),
)

with ExecuteToolScope.start(request, tool_details, agent_details) as scope:
    result = run_tool(tool_details)
    scope.record_response(result)

Вывод

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

from microsoft_agents_a365.observability.core import (
    InferenceScope,
    InferenceCallDetails,
    InferenceOperationType,
)

# Use the same agent_details and request instances from the InvokeAgentScope example above

inference_details = InferenceCallDetails(
    operationName=InferenceOperationType.CHAT,
    model="gpt-4o-mini",
    providerName="azure-openai",
    inputTokens=123,
    outputTokens=456,
    finishReasons=["stop"],
)

with InferenceScope.start(request, inference_details, agent_details) as scope:
    completion = call_llm(...)
    scope.record_output_messages([completion.text])
    scope.record_input_tokens(completion.usage.input_tokens)
    scope.record_output_tokens(completion.usage.output_tokens)

Выходные данные

Используйте этот диапазон для асинхронных сценариев, где InvokeAgentScope, ExecuteToolScope, или InferenceScope не могут синхронно захватить выходные данные. Начинайте OutputScope с дочернего span для записи финальных выходных сообщений после завершения родительского диапазона.

from microsoft_agents_a365.observability.core import (
    OutputScope,
    Response,
    SpanDetails,
)

# Use the same agent_details and request instances from the InvokeAgentScope example above

# Get the parent context from the originating scope
parent_context = invoke_scope.get_context()

response = Response(messages=["Here is your organized inbox with 15 urgent emails."])

with OutputScope.start(
    request,
    response,
    agent_details,
    span_details=SpanDetails(parent_context=parent_context),
):
    # Output messages are recorded automatically from the response
    pass

Валидация локально

Чтобы убедиться, что вы успешно интегрировались с SDK наблюдаемости, изучите консольные логи, сгенерированные вашим агентом, и логи из SDK наблюдаемости.

Задайте для переменной ENABLE_A365_OBSERVABILITY_EXPORTER среды значение false. Эта настройка экспортирует spans (traces) в консоль.

Чтобы расследовать сбои при экспорте, включите подробное логирование, установив ENABLE_A365_OBSERVABILITY_EXPORTER и true настроив логирование отладки в запуске приложения:

import logging

logging.basicConfig(level=logging.DEBUG)
logging.getLogger("microsoft_agents_a365.observability.core").setLevel(logging.DEBUG)

# Or target only the exporter:
logging.getLogger(
    "microsoft_agents_a365.observability.core.exporters.agent365_exporter"
).setLevel(logging.DEBUG)

Сообщения в журнале ключей:

DEBUG  Token resolved for agent {agentId} tenant {tenantId}
DEBUG  Exporting {n} spans to {url}
DEBUG  HTTP 200 - correlation ID: abc-123
ERROR  Token resolution failed: {error}
ERROR  HTTP 401 exporting spans - correlation ID: abc-123
INFO   No spans with tenant/agent identity found; nothing exported.

Просмотр экспортированных логов

Чтобы просматривать телеметрию агентов в Microsoft Purview или Microsoft Defender, убедитесь, что выполнены следующие требования:

Валидация для публикации в магазине

Перед публикацией используйте консольные логи для проверки интеграции наблюдаемости агента, реализуя необходимые invoke agent, execute tool, inferenceи output область видимости. Затем сравните логи вашего агента со следующими списками атрибутов, чтобы убедиться, что все необходимые атрибуты присутствуют. Фиксируйте атрибуты на каждом прицеле или через конструктор багажа, а также добавляйте дополнительные атрибуты по своему усмотрению.

Для получения дополнительной информации о требованиях к публикации в магазине см. рекомендации по валидации магазинов.

атрибуты InvokeAgentScope

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

"attributes": {
        "error.type": "Optional",
        "microsoft.a365.agent.blueprint.id": "Required",
        "gen_ai.agent.description": "Optional",
        "gen_ai.agent.id": "Required",
        "gen_ai.agent.name": "Required",
        "microsoft.a365.agent.platform.id": "Optional",
        "microsoft.agent.user.email": "Required",
        "microsoft.agent.user.id": "Required",
        "gen_ai.agent.version": "Optional",
        "microsoft.a365.caller.agent.blueprint.id": "Optional",
        "microsoft.a365.caller.agent.id": "Optional",
        "microsoft.a365.caller.agent.name": "Optional",
        "microsoft.a365.caller.agent.platform.id": "Optional",
        "microsoft.a365.caller.agent.user.email": "Optional",
        "microsoft.a365.caller.agent.user.id": "Optional",
        "microsoft.a365.caller.agent.version": "Optional",
        "client.address": "Required",
        "user.id": "Required",
        "user.name": "Optional",
        "user.email": "Required",
        "microsoft.channel.link": "Optional",
        "microsoft.channel.name": "Required",
        "gen_ai.conversation.id": "Required",
        "microsoft.conversation.item.link": "Optional",
        "gen_ai.input.messages": "Required",
        "gen_ai.operation.name": "Required",
        "gen_ai.output.messages": "Required",
        "server.address": "Required",
        "server.port": "Required",
        "microsoft.session.id": "Optional",
        "microsoft.session.description": "Optional",
        "microsoft.tenant.id": "Required"
    }

атрибуты ExecuteToolScope

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

"attributes": {
        "error.type": "Optional",
        "microsoft.a365.agent.blueprint.id": "Required",
        "gen_ai.agent.description": "Optional",
        "gen_ai.agent.id": "Required",
        "gen_ai.agent.name": "Required",
        "microsoft.a365.agent.platform.id": "Optional",
        "microsoft.agent.user.email": "Required",
        "microsoft.agent.user.id": "Required",
        "gen_ai.agent.version": "Optional",
        "client.address": "Required",
        "user.id": "Required",
        "user.name": "Optional",
        "user.email": "Required",
        "microsoft.channel.link": "Optional",
        "microsoft.channel.name": "Required",
        "gen_ai.conversation.id": "Required",
        "microsoft.conversation.item.link": "Optional",
        "gen_ai.operation.name": "Required",
        "gen_ai.tool.call.arguments": "Required",
        "gen_ai.tool.call.id": "Required",
        "gen_ai.tool.call.result": "Required",
        "gen_ai.tool.description": "Optional",
        "gen_ai.tool.name": "Required",
        "gen_ai.tool.type": "Required",
        "server.address": "Optional",
        "server.port": "Optional",
        "microsoft.session.id": "Optional",
        "microsoft.session.description": "Optional",
        "microsoft.tenant.id": "Required"
    }

атрибуты InferenceScope

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

"attributes": {
        "error.type": "Optional",
        "microsoft.a365.agent.blueprint.id": "Required",
        "gen_ai.agent.description": "Optional",
        "gen_ai.agent.id": "Required",
        "gen_ai.agent.name": "Required",
        "microsoft.a365.agent.platform.id": "Optional",
        "microsoft.a365.agent.thought.process": "Optional",
        "microsoft.agent.user.email": "Required",
        "microsoft.agent.user.id": "Required",
        "gen_ai.agent.version": "Optional",
        "client.address": "Required",
        "user.id": "Required",
        "user.name": "Optional",
        "user.email": "Required",
        "microsoft.channel.link": "Optional",
        "microsoft.channel.name": "Required",
        "gen_ai.conversation.id": "Required",
        "microsoft.conversation.item.link": "Optional",
        "gen_ai.input.messages": "Required",
        "gen_ai.operation.name": "Required",
        "gen_ai.output.messages": "Required",
        "gen_ai.provider.name": "Required",
        "gen_ai.request.model": "Required",
        "gen_ai.response.finish_reasons": "Optional",
        "gen_ai.usage.input_tokens": "Optional",
        "gen_ai.usage.output_tokens": "Optional",
        "server.address": "Optional",
        "server.port": "Optional",
        "microsoft.session.description": "Optional",
        "microsoft.session.id": "Optional",
        "microsoft.tenant.id": "Required"
    }

атрибуты OutputScope

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

"attributes": {
        "microsoft.a365.agent.blueprint.id": "Required",
        "gen_ai.agent.description": "Optional",
        "gen_ai.agent.id": "Required",
        "gen_ai.agent.name": "Required",
        "microsoft.a365.agent.platform.id": "Optional",
        "microsoft.agent.user.email": "Required",
        "microsoft.agent.user.id": "Required",
        "gen_ai.agent.version": "Optional",
        "client.address": "Required",
        "user.id": "Required",
        "user.name": "Optional",
        "user.email": "Required",
        "microsoft.channel.link": "Optional",
        "microsoft.channel.name": "Required",
        "gen_ai.conversation.id": "Required",
        "microsoft.conversation.item.link": "Optional",
        "gen_ai.operation.name": "Required",
        "gen_ai.output.messages": "Required",
        "microsoft.session.id": "Optional",
        "microsoft.session.description": "Optional",
        "microsoft.tenant.id": "Required"
    }

Испытайте своего агента с использованием наблюдаемости

После того как вы реализуете наблюдаемость в вашем агенте, проверьте его, чтобы убедиться, что телеметрия фиксируется правильно. Следуйте руководству по тестированию , чтобы настроить свою среду. Затем сосредоточьтесь преимущественно на разделе журналов наблюдаемости, чтобы проверить, что реализация наблюдаемости работает как ожидается.

Проверка

  • Перейдите по адресу https://admin.cloud.microsoft/#/agents/all
  • Выберите активность вашего агента >
  • Вы видите сессии и наборы инструментов

Troubleshooting

В этом разделе описываются распространённые задачи при реализации и использовании наблюдаемости.

Подсказка

Руководство по устранению неполадок Agent 365 содержит рекомендации по решению неполадок на высоком уровне, лучшие практики и ссылки на контент по устранению неполадок для каждой части жизненного цикла разработки Agent 365.

Данные о наблюдаемости не отображаются

Симптомы

  • Агент бежит
  • В административном центре нет телеметрии
  • Не вижу активности агентов

Первопричина.

  • Наблюдаемость не включена
  • Ошибки конфигурации
  • Проблемы с резолвером токенов

Решения: Попробуйте следующие шаги для решения проблемы:

  • Проверьте, что экспортер наблюдаемости включён

    Вы должны явно включить экспортер Agent 365. Когда он отключён, SDK возвращается к консольному экспортеру, и телеметрия не отправляется на сервис. Для подробностей конфигурации см. раздел «Конфигурация».

  • Check token resolver configuration

    Экспортер требует действительный резолвер токенов, который возвращает токен Bearer для каждого запроса на экспорт. Если резолвер токенов отсутствует или возвращается null, экспорт тихо пропускается. Убедитесь, что ваш код правильно реализует токен-резолвер. Для подробностей см. раздел Token resolver.

  • Проверьте ошибки в логах

    Включите подробный лог и используйте az webapp log tail команду для поиска ошибок, связанных с наблюдаемостью. Для подробностей о том, как включить логирование по каждой платформе, смотрите раздел «Локальная проверка».

    # Look for observability-related errors
    az webapp log tail --name <your-app-name> --resource-group <your-resource-group> | Select-String "observability"
    
  • Проверка экспорта телеметрии

    Убедитесь, что телеметрия генерируется и экспортируется как ожидается.

    • Добавьте консольный экспортер и проверьте, генерируется ли телеметрия локально. Для подробностей о том, как использовать консольный экспортер и проверять вывод, смотрите Validate locally.

Отсутствующий идентификатор арендатора или идентификатор агента — пропущены периоды

Симптомы: Система бесшумно сбрасывает развязки и никогда их не экспортирует. Некоторые SDK фиксируют количество пропущенных спайков или сообщение вроде «Нет спазонов с идентификатором арендатора/агента». Другие сбрасывают их без логировки.

Резолюция:

  • Перед экспортом разделы SDK охватываются по идентичности арендатора и агента. Система отбрасывает споведы без ни арендатора, ни агента, и никогда не отправляет их в сервис.
  • Убедитесь, BaggageBuilder что вы настроены с идентификатором арендатора и агента перед созданием споведов. Эти значения распространяются через контекст OpenTelemetry и присоединяются ко всем отсекам, созданным в области багажа. Для платформенно-специфичного API см. атрибуты Багаж.
  • Убедитесь, что у TurnContext активности есть действительный получатель с идентификатором агента, если вы используете промежуточное ПО, или включите контекстного помощника из интеграционного пакета хостинга для заполнения этих идентификаторов.

Сбой разрешения токена — экспорт пропущен или неавторизован

Симптомы: Резолвер токенов возвращает null или выдает ошибку. В зависимости от SDK экспорт либо полностью пропускается, либо запрос отправляется без авторизационного заголовка и не выполняется с HTTP 401.

Резолюция:

  • При инициализации требуется резольвер токенов. Если он отсутствует, экспортер выдает ошибку при запуске. Проверьте, что предоставлен резолвер токенов и возвращает действительный токен носителя.
  • Убедитесь, что используются правильные идентификаторы арендатора и идентификатор агента для BaggageBuilder, потому что эти значения передаются токен-резолверу.
  • Для агентов, размещённых на Azure, убедитесь, что управляемая идентичность имеет необходимое разрешение API для области наблюдаемости.

HTTP 401 Несанкционированный

Симптомы: Экспорт не удаётся с HTTP 401. Экспортер не повторяет эту ошибку.

Резолюция:

  • Проверьте, соответствует ли аудитория токена сфере обзора конечной точки. По умолчанию область действия предназначена https://api.powerplatform.com/.default для агентного агента.
  • Убедитесь, что идентификация (управляемая идентичность или регистрация приложения) имеет права на наблюдаемость Агента 365.
  • Проверьте, не возвращает ли токен-резолвер делегированный пользовательский токен, токен для неправильной аудитории или истёкший токен.

Это важно

Обновление существующих агентов до этих версий пакетов требует дополнительного шага

Этот шаг применяется только в случае обновления существующего агента. Установка новых агентов не требует этого шага. Если вы обновляетесь до следующих версий пакета или новее, необходимо предоставить новое Agent365.Observability.OtelWrite разрешение вашей личности (управляемая идентификация или регистрация приложения). Без этого разрешения экспорт телеметрии с HTTP 401 не выполняется.

Platform Минимальная версия требует этого шага
.NET 0.3-beta
Node.js 0.2.0-preview.1
Python 0.3.0

Для необходимых шагов смотрите журнал изменений в пакете, который вы обновляете.

HTTP 403 — запрещено

Симптомы: Экспорт не удаётся с HTTP 403. Экспортер не повторяет эту ошибку.

Резолюция:

  • Проверьте, добавлен ли Tenant ID в список разрешённых арендаторов Agent 365 для отслеживания поглощения.
  • Убедитесь, что идентификация агента соответствует нужной роли или разрешению для целевого арендатора.

HTTP 429 / 5xx — Временные ошибки

Симптомы: Экспорт не удаётся с временным HTTP-кодом статуса, таким как 429 или 5xx.

Резолюция:

  • Эти ошибки обычно временные и разрешаются сами по себе. SDK Python и JavaScript автоматически повторяются на статусных кодах HTTP 408, 429 и 5xx до трёх раз с экспоненциальным отключением. .NET SDK не запускается автоматически.
  • Если ошибки сохраняются, проверьте панель управления состоянием сервиса.
  • Рассмотрите возможность снижения частоты экспорта, увеличив запланированную задержку между партиями или увеличив максимальный размер экспортной партии. Для вариантов конфигурации по платформам см. Agent365ExporterOptions таблицу в разделе «Конфигурация».

Экспортный тайм-аут

Симптомы: Попытки экспорта выходят за тайм-аут.

Резолюция:

  • Проверьте сетевое подключение к конечной точке наблюдаемости.
  • Тайм-аут по умолчанию варьируется в зависимости от платформы. Стандартный тайм-аут HTTP-запроса — 30 секунд. Некоторые SDK также имеют отдельный общий тайм-аут для экспортера, который охватывает весь экспортный цикл, включая повторные периоды. Точные свойства и параметры по умолчанию для каждой платформы смотрите Agent365ExporterOptions таблицу в разделе Конфигурация.
  • Если тайм-ауты случаются часто, увеличьте соответствующее значение тайм-аута в вариантах экспортера.

Экспорт успешен, но телеметрия отсутствует в Defender или Purview

Симптомы: Логи показывают успешный экспорт, но телеметрия не видна в Microsoft Defender или Microsoft Purview.

Резолюция:

  • Убедитесь, что вы соответствуете требованиям для просмотра экспортированных логов. Для Purview аудит должен быть включен. Для Defender необходимо настроить продвинутую охоту. Для получения дополнительной информации см. раздел «Просмотр экспортированных логов».
  • Телеметрия может заполняться за несколько минут после успешного экспорта. Дождитесь появления данных, прежде чем продолжать расследование.

Чтобы узнать больше о наблюдаемости тестирования, см.: