Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
Você precisa fazer parte do programa de visualização Frontier para obter acesso antecipado ao Microsoft 365 Agent. A Frontier conecta você diretamente com as inovações de IA mais recentes da Microsoft. As versões preliminares da Frontier estão sujeitas aos termos de versão preliminar existentes dos contratos de cliente. Como esses recursos ainda estão em desenvolvimento, sua disponibilidade e capacidades podem mudar ao longo do tempo.
Para participar do ecossistema Agent 365, adicione capacidades de Observabilidade do Agent 365 ao seu agente. O Agent 365 Observability se baseia no OpenTelemetry (OTel) e oferece uma estrutura unificada para capturar telemetria de forma consistente e segura em todas as plataformas de agentes. Ao implementar esse componente necessário, você permite que os administradores de TI monitorem a atividade do agente no centro de administração Microsoft e permitam que as equipes de segurança usem Defender e o Purview para conformidade e detecção de ameaças.
Principais benefícios
- Visibilidade de ponta a ponta: capture telemetria abrangente para cada invocação de agente, incluindo sessões, chamadas de ferramentas e exceções, garantindo rastreabilidade total entre as plataformas.
- Habilitação de segurança e conformidade: Integre logs de auditoria unificados no Defender e Purview, permitindo cenários avançados de segurança e relatórios de conformidade para seu agente.
- Flexibilidade multiplataforma: Construa com base nos padrões OTel e ofereça suporte a diversos runtimes e plataformas como Copilot Studio, Foundry e futuros frameworks de agentes.
- Operational efficiency for admins: fornecer observabilidade centralizada em Centro de administração do Microsoft 365, reduzindo o tempo de solução de problemas e melhorando a governança com controles de acesso baseados em função para as equipes de TI que gerenciam seu agente.
Instalação
Use esses comandos para instalar os módulos de observabilidade para as linguagens suportadas pelo Agente 365.
Instale os principais pacotes de observabilidade e runtime. Todos os agentes que usam a Observabilidade do Agente 365 precisam desses pacotes.
pip install microsoft-agents-a365-observability-core
pip install microsoft-agents-a365-runtime
Se o agente usar o pacote Microsoft Agents Hosting, instale o pacote de integração de hospedagem. Ele fornece middleware que preenche automaticamente a bagagem e os escopos a partir do TurnContext, e inclui o armazenamento de tokens para o exportador de observabilidade.
pip install microsoft-agents-a365-observability-hosting
Se o agente usar uma das estruturas de IA com suporte, instale a extensão de instrumentação automática correspondente para capturar automaticamente a telemetria sem código de instrumentação manual. Para obter detalhes de configuração, consulte Instrumentação automática.
# 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
Configuração
Use as seguintes configurações para ativar e personalizar a Observabilidade do Agente 365 para seu agente.
Defina a ENABLE_A365_OBSERVABILITY_EXPORTER variável do ambiente como true para observalidade. Essa configuração exporta logs para o serviço e requer que seja fornecido um token_resolver. Caso contrário, o exportador de console é utilizado.
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,
)
O resolver de tokens é excluído do login no console.
Você pode personalizar o comportamento do exportador passando uma Agent365ExporterOptions instância para exporter_options. Quando exporter_options for fornecido, ele terá precedência sobre os parâmetros token_resolver e 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,
)
A tabela a seguir descreve os parâmetros opcionais para configure().
| Parâmetro | Descrição | Default |
|---|---|---|
logger_name |
Nome do logger de Python usado para depuração e saída de log do console. | microsoft_agents_a365.observability.core |
exporter_options |
Uma Agent365ExporterOptions instância que configura o resolvedor de token e a categoria de cluster juntos. |
None |
suppress_invoke_agent_input |
Quando True, suprime mensagens de entrada em trechos InvokeAgent. |
False |
A tabela a seguir descreve as propriedades opcionais para Agent365ExporterOptions.
| Propriedade | Descrição | Default |
|---|---|---|
use_s2s_endpoint |
Quando True, usa o caminho do ponto de extremidade serviço-a-serviço. |
False |
max_queue_size |
Tamanho máximo da fila para o processador de lote. | 2048 |
scheduled_delay_ms |
Atraso em milissegundos entre lotes de exportação. | 5000 |
exporter_timeout_ms |
Tempo limite em milissegundos para a operação de exportação. | 30000 |
max_export_batch_size |
Tamanho máximo do lote para operações de exportação. | 512 |
Atributos de bagagem
Use BaggageBuilder para definir informações contextuais que se propagam por todos os trechos em uma requisição.
O SDK implementa um SpanProcessor que copia todas as entradas de bagagem não vazias para novos intervalos sem sobrescrever atributos existentes.
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
Você pode preencher automaticamente o BaggageBuilder a partir do TurnContext, usando o auxiliar populate no pacote microsoft-agents-a365-observability-hosting. Esse auxiliar extrai automaticamente os detalhes do chamador, agente, inquilino, canal e conversa da atividade.
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
Resolvedor de token
Ao usar o exportador do Agent 365, você deve fornecer uma função de resolvedor de token que retorna um token de autenticação.
Ao usar o SDK de Observabilidade do Agente 365 com a estrutura de Hospedagem do Agente, você pode gerar tokens a partir das TurnContext das atividades do agente.
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
Para o cenário de trabalhador digital, se o agente usar o pacote Microsoft Agent 365 Observability Hosting Library, use AgenticTokenCache para gerenciar o cache de tokens automaticamente. Registre o token uma vez por agente e locatário durante um manipulador de atividades e passe cache.get_observability_token como token_resolver na configuração de observabilidade.
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(),
)
Instrumentação automática
A instrumentação automática monitora automaticamente as estruturas do agente (SDKs), sinais de telemetria existentes para rastreamentos e os encaminha para o serviço de observabilidade do Agent 365. Esse recurso elimina a necessidade de os desenvolvedores escreverem código de monitoramento manualmente, simplifica a configuração e garante um acompanhamento consistente de desempenho.
Múltiplos SDKs e plataformas suportam auto-instrumentação:
| Plataforma | SDKs/Frameworks suportados |
|---|---|
| .NET | Kernel semântico, OpenAI, Agent Framework |
| Python | Kernel semântico, OpenAI, Agent Framework, LangChain |
| Node.js | OpenAI, LangChain |
Observação
O suporte à auto-instrumentação varia conforme a plataforma e a implementação do SDK.
Kernel semântico
A instrumentação automotiva requer o uso de um construtor de bagagens. Defina o ID do agente e o ID do tenant usando BaggageBuilder.
Instale o pacote.
pip install microsoft-agents-a365-observability-extensions-semantic-kernel
Configurar a observabilidade
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
OpenAI
A instrumentação automotiva requer o uso de um construtor de bagagens. Defina o ID do agente e o ID do tenant usando BaggageBuilder.
Instale o pacote.
pip install microsoft-agents-a365-observability-extensions-openai
Configurar a observabilidade
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
Estrutura do Agente
A instrumentação automotiva requer o uso de um construtor de bagagens. Defina o ID do agente e o ID do tenant usando BaggageBuilder.
Instale o pacote.
pip install microsoft-agents-a365-observability-extensions-agent-framework
Configurar a observabilidade
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()
Estrutura LangChain
Instrumentação automática requer o uso do criador de bagagem. Defina o ID do agente e o ID do tenant usando BaggageBuilder.
Instale o pacote.
pip install microsoft-agents-a365-observability-extensions-langchain
Configurar a observabilidade
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
Instrumentação manual
Use o SDK de observabilidade do Agente 365 para entender o funcionamento interno do agente.
O SDK fornece escopos que você pode iniciar: InvokeAgentScope, ExecuteToolScope, InferenceScope, e OutputScope.
Invocação do agente
Use esse escopo no início do processo do seu agente. Usando o escopo do agente de invocação, você pode capturar propriedades como o agente atual que está sendo invocado, dados do usuário do agente, entre outros.
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(...)
Execução de ferramentas
Os exemplos a seguir mostram como adicionar rastreamento de observabilidade à execução da ferramenta do seu agente. Esse rastreamento captura telemetria para fins de monitoramento e auditoria.
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)
Inferência
Os exemplos a seguir mostram como instrumentar chamadas de inferência de modelos de IA com rastreamento de observabilidade para capturar o uso de tokens, detalhes do modelo e metadados de resposta.
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)
Saída
Use este escopo para cenários assíncronos onde InvokeAgentScope, ExecuteToolScope ou InferenceScope não possam capturar dados de saída sincronamente. Comece OutputScope como um intervalo filho para registrar as mensagens de saída finais após a conclusão do escopo pai.
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
Valide localmente
Para verificar se você integrou com sucesso com o SDK de observabilidade, examine os logs do console gerados pelo seu agente.
Defina a variável de ambiente ENABLE_A365_OBSERVABILITY_EXPORTER como false. Essa configuração exporta spans (traces) para o console.
Logs de amostra
Os logs podem parecer um pouco diferentes dependendo da plataforma.
Log do console - Invocar intervalos do agente
Este exemplo mostra um intervalo típico de agente de invocação que o exportador do console imprime quando a validação local está ativada.
{
"name": "invoke_agent Azure OpenAI Agent",
"context": {
"trace_id": "0x4bd8f606688c3f3347d69c1b6539c957",
"span_id": "0x0766d68605234692",
"trace_state": "[]"
},
"kind": "SpanKind.CLIENT",
"parent_id": null,
"start_time": "2025-11-24T16:16:54.017403Z",
"end_time": "2025-11-24T16:17:09.373357Z",
"status": {
"status_code": "UNSET"
},
"attributes": {
"operation.source": "SDK",
"correlation.id": "aaaa0000-bb11-2222-33cc-444444dddddd",
"gen_ai.conversation.item.link": "http://localhost:56150/_connector",
"gen_ai.agent.upn": "Delivery Agent",
"gen_ai.agent.user.id": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"gen_ai.caller.id": "bbbbbbbb-cccc-dddd-2222-333333333333",
"gen_ai.caller.name": "Alex Wilber",
"gen_ai.caller.upn": "Sample UPN",
"gen_ai.channel.name": "msteams",
"gen_ai.system": "az.ai.agent365",
"gen_ai.operation.name": "invoke_agent",
"gen_ai.agent.id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"gen_ai.agent.name": "Azure OpenAI Agent",
"gen_ai.agent.description": "An AI agent powered by Azure OpenAI",
"gen_ai.agent.applicationid": "00001111-aaaa-2222-bbbb-3333cccc4444",
"gen_ai.conversation.id": "__PERSONAL_CHAT_ID__",
"tenant.id": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"session.id": "__PERSONAL_CHAT_ID__",
"gen_ai.execution.type": "HumanToAgent",
"gen_ai.input.messages": "[\"hi, what can you do\"]",
"gen_ai.output.messages": "[\"Hi! I can assist you with a variety of tasks, including answering questions, providing information on a wide range of topics, helping with problem-solving, offering writing assistance, and more. Just let me know what you need help with!\"]"
},
"events": [],
"links": [],
"resource": {
"attributes": {
"telemetry.sdk.language": "python",
"telemetry.sdk.name": "opentelemetry",
"telemetry.sdk.version": "1.38.0",
"service.namespace": "MyAgentTesting",
"service.name": "MyAgentTracing"
},
"schema_url": ""
}}
Log do console para a ferramenta de execução
Este exemplo mostra um intervalo típico de ferramenta de execução que o exportador do console emite durante a validação local.
{
"name": "execute_tool get_weather",
"context": {
"trace_id": "0xa9a1be6323bd52476d6a28b8893c6aa8",
"span_id": "0x1dec90d34ecc0823",
"trace_state": "[]"
},
"kind": "SpanKind.INTERNAL",
"parent_id": "0x2e727b4c133cbd50",
"start_time": "2025-11-24T18:47:55.960305Z",
"end_time": "2025-11-24T18:47:55.962306Z",
"status": {
"status_code": "UNSET"
},
"attributes": {
"operation.source": "SDK",
"correlation.id": "aaaa0000-bb11-2222-33cc-444444dddddd",
"gen_ai.conversation.item.link": "http://localhost:56150/_connector",
"gen_ai.agent.upn": "Delivery Agent",
"gen_ai.agent.user.id": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"gen_ai.execution.type": "HumanToAgent",
"gen_ai.channel.name": "msteams",
"gen_ai.system": "az.ai.agent365",
"gen_ai.operation.name": "execute_tool",
"gen_ai.agent.id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"gen_ai.agent.name": "Azure OpenAI Agent",
"gen_ai.agent.description": "An AI agent powered by Azure OpenAI",
"gen_ai.agent.applicationid": "00001111-aaaa-2222-bbbb-3333cccc4444",
"gen_ai.conversation.id": "__PERSONAL_CHAT_ID__",
"tenant.id": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"gen_ai.tool.name": "get_weather",
"gen_ai.tool.arguments": "current location",
"gen_ai.tool.type": "function",
"gen_ai.tool.call.id": "bbbbbbbb-1111-2222-3333-cccccccccccc",
"gen_ai.tool.description": "Executing get_weather tool"
},
"events": [],
"links": [],
"resource": {
"attributes": {
"telemetry.sdk.language": "python",
"telemetry.sdk.name": "opentelemetry",
"telemetry.sdk.version": "1.38.0",
"service.namespace": "MyAgentTesting",
"service.name": "MyAgentTracing"
},
"schema_url": ""
}
}
Log do console - Intervalo de inferência
Este exemplo mostra um intervalo de inferência típico que o exportador do console gera para validação local.
{
"name": "Chat gpt-4o-mini",
"context": {
"trace_id": "0xceb86559a6f7c2c16a45ec6e0b201ae1",
"span_id": "0x475beec8c1c4fa56",
"trace_state": "[]"
},
"kind": "SpanKind.CLIENT",
"parent_id": "0x959a854f18fa2c22",
"start_time": "2025-11-24T18:04:07.061703Z",
"end_time": "2025-11-24T18:04:09.506951Z",
"status": {
"status_code": "UNSET"
},
"attributes": {
"operation.source": "SDK",
"correlation.id": "aaaa0000-bb11-2222-33cc-444444dddddd",
"gen_ai.conversation.item.link": "http://localhost:56150/_connector",
"gen_ai.agent.upn": "Delivery Agent",
"gen_ai.agent.user.id": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"gen_ai.execution.type": "HumanToAgent",
"gen_ai.channel.name": "msteams",
"gen_ai.system": "az.ai.agent365",
"gen_ai.agent.id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"gen_ai.agent.name": "Azure OpenAI Agent",
"gen_ai.agent.description": "An AI agent powered by Azure OpenAI",
"gen_ai.agent.applicationid": "00001111-aaaa-2222-bbbb-3333cccc4444",
"gen_ai.conversation.id": "__PERSONAL_CHAT_ID__",
"tenant.id": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"gen_ai.input.messages": "hi, what can you do",
"gen_ai.operation.name": "Chat",
"gen_ai.request.model": "gpt-4o-mini",
"gen_ai.provider.name": "Azure OpenAI",
"gen_ai.output.messages": "\"Hello! I can help answer questions, provide information, assist with problem-solving, offer writing suggestions, and more. Just let me know what you need!\"",
"gen_ai.usage.input_tokens": "33",
"gen_ai.usage.output_tokens": "32",
"gen_ai.response.finish_reasons": "[\"stop\"]"
},
"events": [],
"links": [],
"resource": {
"attributes": {
"telemetry.sdk.language": "python",
"telemetry.sdk.name": "opentelemetry",
"telemetry.sdk.version": "1.38.0",
"service.namespace": "MyAgentTesting",
"service.name": "MyAgentTracing"
},
"schema_url": ""
}
}
Requisitos de observabilidade
Administradores de TI usam os dados que você define no seu código para monitorar a atividade do seu agente. Dados incompletos significam que você não percebe plenamente os benefícios da observabilidade. Os agentes devem fornecer os dados necessários para receber todos os benefícios esperados. Um processo de validação verifica que esses dados existem.
Dentro da telemetria, existem conceitos de escopo ou contexto. Cada operação que seu agente realiza existe dentro de um escopo diferente. Você deve incluir os dados dentro dos BaggageScope criados usando os atributos Bagagem, ou dentro dos escopos individuais conforme descrito em Instrumentação Manual.
Para validar sua implementação, siga as instruções para validar localmente e gerar logs de console para sua instrumentação. Depois, revise a seção Validar para publicação em loja para identificar quais atributos são necessários e quais são opcionais. Você deve definir todos os atributos necessários para passar com sucesso na validação.
Revise as propriedades e valores de parâmetros necessários descritos para essas classes:
Propriedades que você define usando a classe BaggageBuilder podem ser definidas ou sobrescrevidas pelas propriedades dos respectivos escopos.
Defina as propriedades na tabela a seguir usando o método InvokeAgentScope.start.
Dados Descrição invoke_agent_details.details.agent_idO identificador exclusivo para o agente de IA invoke_agent_details.details.agent_nameO nome legível pelo ser humano do agente de IA invoke_agent_details.details.agent_auidO ID do usuário do agente (AUID) invoke_agent_details.details.agent_upnO nome principal de usuário do agente (UPN) invoke_agent_details.details.agent_blueprint_idO ID do blueprint/aplicativo do agente invoke_agent_details.details.tenant_idO identificador do locatário para o agente invoke_agent_details.details.conversation_idO identificador da conversa ou sessão invoke_agent_details.endpointO ponto de extremidade para a invocação do agente tenant_details.tenant_idO identificador exclusivo para o locatário request.contentO conteúdo do payload enviado ao agente para invocação request.execution_typeTipo de invocação indicando a origem da solicitação (por exemplo, HumanToAgentouAgentToAgent)caller_details.caller_idO identificador exclusivo para o chamador caller_details.caller_upnO nome principal de usuário (UPN) do chamador caller_details.caller_user_idA ID do usuário do chamador caller_details.tenant_idA ID do locatário do chamador Defina as propriedades na tabela a seguir usando o método ExecuteToolScope.start.
Dados Descrição details.tool_nameO nome da ferramenta que está sendo executada details.argumentsArgumentos ou parâmetros de ferramentas details.tool_call_idO identificador exclusivo para a chamada de ferramenta details.tool_typeO tipo da ferramenta que está sendo executada details.endpointSe uma chamada de ferramenta externa for feita agent_details.agent_idO identificador exclusivo para o agente de IA agent_details.agent_nameO nome legível pelo ser humano do agente de IA agent_details.agent_auidO ID de usuário do agente agent_details.agent_upnO nome principal de usuário do agente (UPN) agent_details.agent_blueprint_idO ID do blueprint ou aplicativo do agente agent_details.tenant_idID de locatário do agente. agent_details.conversation_idA ID da conversa para a invocação do agente. tenant_details.tenant_idID de locatário do agente. Defina as propriedades na tabela a seguir usando o método InferenceScope.start.
Dados Descrição details.operationNameO nome ou tipo da operação para a inferência details.modelO nome ou identificador do modelo details.providerNameNome do provedor agent_details.agent_idO identificador exclusivo para o agente de IA agent_details.agent_nameO nome legível pelo ser humano do agente de IA agent_details.agent_auidO ID do usuário do agente (AUID) agent_details.agent_upnO nome principal de usuário do agente (UPN) agent_details.agent_blueprint_idO ID do blueprint ou aplicativo do agente agent_details.tenant_idO identificador exclusivo para o locatário agent_details.conversation_idO identificador da conversa ou sessão tenant_details.tenant_idO identificador exclusivo para o locatário request.contentO conteúdo enviado ao agente para inferência request.execution_typeTipo de invocação indicando a origem da solicitação (por exemplo, HumanToAgentouAgentToAgent)request.source_metadataRepresente as informações do canal
Validar para publicação em lojas
Antes de publicar, use logs de console para validar sua integração de observabilidade para o agente, implementando os escopos necessários de agente de invocação, ferramenta de execução e inferência. Depois, compare os logs do seu agente com as seguintes listas de atributos para verificar se todos os atributos necessários estão presentes. Capture atributos em cada escopo ou através do criador de contexto, e inclua atributos opcionais segundo seu critério.
Para mais informações sobre os requisitos de publicação em loja, consulte as diretrizes de validação da loja.
Atributos InvokeAgentScope
A lista a seguir resume os atributos de telemetria necessários e opcionais registrados quando você inicia um InvokeAgentScope.
"attributes": {
"correlation.id": "Optional",
"gen_ai.agent.applicationid": "Required",
"gen_ai.agent.description": "Optional",
"gen_ai.agent.id": "Required",
"gen_ai.agent.name": "Required",
"gen_ai.agent.platformid": "Optional",
"gen_ai.agent.type": "Optional",
"gen_ai.agent.thought.process": "Optional",
"gen_ai.agent.upn": "Required",
"gen_ai.agent.user.id": "Required",
"gen_ai.caller.agent.applicationid": "Required (if execution type is agent to agent)",
"gen_ai.caller.agent.id": "Required (if execution type is agent to agent)",
"gen_ai.caller.agent.name": "Required (if execution type is agent to agent)",
"gen_ai.caller.agent.platformid": "Optional",
"gen_ai.caller.agent.type": "Optional",
"gen_ai.caller.client.ip": "Required",
"gen_ai.caller.id": "Required",
"gen_ai.caller.name": "Optional",
"gen_ai.caller.upn": "Required",
"gen_ai.channel.link": "Optional",
"gen_ai.channel.name": "Required",
"gen_ai.conversation.id": "Required",
"gen_ai.conversation.item.link": "Optional",
"gen_ai.execution.type": "Required",
"gen_ai.input.messages": "Required",
"gen_ai.operation.name": "Required (Set by the SDK)",
"gen_ai.output.messages": "Required",
"gen_ai.system": "Optional",
"hiring.manager.id": "Optional",
"operation.source": "Required (SDK sets a default value)",
"server.address": "Required",
"server.port": "Required",
"session.id": "Optional",
"session.description": "Optional",
"tenant.id": "Required"
},
Atributos ExecuteToolScope
A lista a seguir resume os atributos de telemetria necessários e opcionais registrados quando você inicia um ExecuteToolScope.
"attributes": {
"correlation.id": "Optional",
"gen_ai.agent.applicationid": "Required",
"gen_ai.agent.description": "Optional",
"gen_ai.agent.id": "Required",
"gen_ai.agent.name": "Required",
"gen_ai.agent.platformid": "Optional",
"gen_ai.agent.type": "Optional",
"gen_ai.agent.upn": "Required",
"gen_ai.agent.user.id": "Required",
"gen_ai.caller.client.ip": "Required",
"gen_ai.channel.name": "Required",
"gen_ai.conversation.id": "Required",
"gen_ai.conversation.item.link": "Optional",
"gen_ai.execution.type": "Optional",
"gen_ai.operation.name": "Required (Set by the SDK)",
"gen_ai.system": "Optional",
"gen_ai.tool.arguments": "Required",
"gen_ai.tool.call.id": "Required",
"gen_ai.tool.description": "Optional",
"gen_ai.tool.name": "Required",
"gen_ai.tool.type": "Required",
"hiring.manager.id": "Optional",
"operation.source": "Required (SDK sets a default value)",
"server.address": "Required (if tool call is external)",
"server.port": "Required (if tool call is external)",
"session.id": "Optional",
"session.description": "Optional",
"tenant.id": "Required"
},
Atributos de InferenceScope
A lista a seguir resume os atributos de telemetria necessários e opcionais registrados quando você inicia um InferenceScope.
"attributes": {
"correlation.id": "Optional",
"gen_ai.agent.applicationid": "Required",
"gen_ai.agent.description": "Optional",
"gen_ai.agent.id": "Required",
"gen_ai.agent.name": "Required",
"gen_ai.agent.platformid": "Optional",
"gen_ai.agent.type": "Optional",
"gen_ai.agent.thought.process": "Optional",
"gen_ai.agent.upn": "Required",
"gen_ai.agent.user.id": "Required",
"gen_ai.caller.client.ip": "Required",
"gen_ai.channel.link": "Optional",
"gen_ai.channel.name": "Required",
"gen_ai.conversation.id": "Required",
"gen_ai.conversation.item.link": "Optional",
"gen_ai.execution.type": "Optional",
"gen_ai.input.messages": "Required",
"gen_ai.operation.name": "Required (Set by the SDK)",
"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",
"hiring.manager.id": "Optional",
"operation.source": "Required (SDK sets a default value)",
"session.description": "Optional",
"session.id": "Optional",
"tenant.id": "Required"
}
Teste seu agente com observabilidade
Depois de implementar a observabilidade em seu agente, teste-a para garantir que ela capture a telemetria corretamente. Siga o guia de testes para configurar seu ambiente. Em seguida, concentre-se principalmente na seção Exibir logs de observabilidade para validar se sua implementação de observabilidade está funcionando conforme o esperado.
Verificação:
- Acesse:
https://admin.cloud.microsoft/#/agents/all - Selecione sua agente > Atividade
- Você vê sessões e invocações de ferramentas
Resolução de problemas
Esta seção descreve problemas comuns ao implementar e utilizar observabilidade.
Dica
O Guia de Solução de Problemas do Agente 365 contém recomendações de resolução de problemas de alto nível, melhores práticas e links para conteúdo de solução de problemas para cada parte do ciclo de desenvolvimento do Agente 365.
Os dados de observabilidade não aparecem
Sintomas:
- O agente está correndo
- Sem telemetria no centro administrativo
- Não consigo ver a atividade dos agentes
Causa raiz:
- A observabilidade não é ativada
- Erros de configuração
- Problemas do resolvedor de tokens
Soluções: Tente os seguintes passos para resolver o problema:
Verifique se a observabilidade está ativada
Ative flags de observabilidade no seu ambiente.
# .env file ENABLE_A365_OBSERVABILITY_EXPORTER=trueVerifique a configuração do resolver de tokens
Certifique-se de que seu código implementa corretamente o resolvedor de tokens. Verifique o código mais recente diretamente no SDK.
Verifique se há erros nos logs
Use o comando
az webapp log tailpara buscar erros relacionados à observabilidade nos logs.# Look for observability-related errors az webapp log tail --name <your-app-name> --resource-group <your-resource-group> | Select-String "observability"Verificar exportação de telemetria
Confirme que a telemetria foi gerada e exportada conforme esperado.
- Adicionar o exportador de console para testes
- Verifique se a telemetria é gerada localmente
Saiba mais sobre a observabilidade dos testes: