Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Это важно
Чтобы получить
Чтобы участвовать в экосистеме 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, убедитесь, что выполнены следующие требования:
- Microsoft Purview: Аудит должен быть включен для вашей организации. Инструкции см. в разделе Включение и отключение аудита.
-
Microsoft Defender: Расширенная охота должна быть настроена для доступа к таблице
CloudAppEvents. Для подробностей смотрите таблицу CloudAppEvents в расширенной схеме охоты.
Валидация для публикации в магазине
Перед публикацией используйте консольные логи для проверки интеграции наблюдаемости агента, реализуя необходимые 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 необходимо настроить продвинутую охоту. Для получения дополнительной информации см. раздел «Просмотр экспортированных логов».
- Телеметрия может заполняться за несколько минут после успешного экспорта. Дождитесь появления данных, прежде чем продолжать расследование.
Чтобы узнать больше о наблюдаемости тестирования, см.: