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.
Use o pacote de integração langchain-azure-ai para emitir rastreamentos OpenTelemetry dos aplicativos LangChain e LangGraph e armazená-los no Aplicativo Azure Insights. Neste artigo, você configurará AzureAIOpenTelemetryTracer, o anexará ao seu executável e inspecionará rastreamentos no Azure Monitor.
O rastreador emite intervalos para execução de agente, chamadas de modelo, execução de ferramentas e operações de recuperação. Você pode usá-lo para aplicativos que executam totalmente localmente, fluxos híbridos que chamam o Serviço do Foundry Agent ou soluções LangGraph de vários agentes.
Pré-requisitos
- Uma assinatura Azure. Crie um gratuitamente.
- Um projeto do Foundry.
- Um modelo de chat Azure OpenAI implantado (por exemplo,
gpt-4.1). - Python 3.10 ou posterior.
- CLI do Azure está conectado (
az login) para queDefaultAzureCredentialpossa autenticar-se.
Configurar seu ambiente
Instalar pacotes necessários:
pip install -U "langchain-azure-ai[opentelemetry]" azure-identity
Defina as variáveis de ambiente usadas neste artigo:
import os
# Option 1: Project endpoint (recommended)
os.environ["AZURE_AI_PROJECT_ENDPOINT"] = (
"https://<resource>.services.ai.azure.com/api/projects/<project>"
)
# Option 2: Direct OpenAI-compatible endpoint + API key
os.environ["OPENAI_BASE_URL"] = (
"https://<resource>.services.ai.azure.com/openai/v1"
)
os.environ["OPENAI_API_KEY"] = "<your-api-key>"
os.environ["APPLICATION_INSIGHTS_CONNECTION_STRING"] = "InstrumentationKey=0ab1c2d3..."
Para controlar se o conteúdo de mensagens e chamadas de função é registrado no rastreamento, passe enable_content_recording para o construtor AzureAIOpenTelemetryTracer.
A gravação de conteúdo é habilitada por padrão.
Dica
Defina enable_content_recording=False no AzureAIOpenTelemetryTracer construtor para redigir o conteúdo da mensagem e os argumentos de chamada de ferramenta nos rastros.
Criar o rastreador
Crie uma instância de rastreamento e reutilize-a em seu fluxo de trabalho.
import os
from azure.identity import DefaultAzureCredential
from langchain_azure_ai.callbacks.tracers import AzureAIOpenTelemetryTracer
tracer = AzureAIOpenTelemetryTracer(
project_endpoint=os.environ["AZURE_AI_PROJECT_ENDPOINT"],
credential=DefaultAzureCredential(),
name="langchain-tracing-sample",
agent_id="support-bot",
trace_all_langgraph_nodes=True,
)
O que este snippet faz: Configura um rastreador que resolve a cadeia de conexão do Application Insights associada a partir do endpoint do projeto Foundry e habilita o rastreamento nos nós do LangGraph. Use agent_id o parâmetro para definir o atributo gen_ai.agent.id ao invocar agentes. O name parâmetro define o nome do rastreador OpenTelemetry.
O rastreador dá suporte a controles comuns para fluxos de trabalho de produção:
- Passar
connection_stringpara direcionar a um recurso específico do Application Insights ou configurar a variávelAPPLICATION_INSIGHTS_CONNECTION_STRINGde ambiente. - Defina
trace_all_langgraph_nodes=Truepara rastrear todos os nós por padrão. - Utilize os metadados dos nós como
otel_trace: Trueouotel_trace: Falsepara incluir ou omitir nós específicos. - Use
message_keysemessage_pathsquando suas mensagens estiverem aninhadas sob uma forma de estado personalizada, por exemplochat_history.
Referência:
Rastrear um agente
Comece com um agente LangChain mínimo para que você possa verificar o rastreamento rapidamente. Para o LangGraph, anexe o rastreamento with_config no grafo compilado.
from langchain.agents import create_agent
agent = create_agent(
model="azure_ai:gpt-5.2",
system_prompt="You're an informational agent. Answer questions cheerfully.",
).with_config(
{"callbacks": [tracer]}
)
response = agent.invoke({"messages": "what's your name?"})
response["messages"][-1].pretty_print()
================================== Ai Message ==================================
I’m ChatGPT, your AI assistant.
O que este snippet de código faz: Cria um agente simples do LangGraph, anexa o rastreador e invoca o agente com uma mensagem.
Referência:
Analisar/Monitorar um executável do LangChain
Comece com um fluxo mínimo de LangChain para que você possa verificar o rastreamento rapidamente.
import os
from azure.identity import DefaultAzureCredential
from langchain_core.prompts import ChatPromptTemplate
from langchain_azure_ai.chat_models import AzureAIChatCompletionsModel
model = AzureAIChatCompletionsModel(
endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
credential=DefaultAzureCredential(),
model=os.environ["AZURE_OPENAI_DEPLOYMENT"],
)
prompt = ChatPromptTemplate.from_template(
"You are concise. Answer in one sentence: {question}"
)
chain = prompt | model
response = chain.invoke(
{"question": "What does OpenTelemetry help me do?"},
config={"callbacks": [tracer]},
)
print(response.content)
OpenTelemetry helps you observe requests, latency, dependencies, and failures across your AI workflow.
O que este snippet de código faz: Executa um pipeline LangChain padrão e envia spans de chat para o OpenTelemetry através de AzureAIOpenTelemetryTracer.
Referência:
Traçar um grafo do LangGraph
Para o LangGraph, anexe o rastreamento with_config no grafo compilado.
Este snippet reutiliza model e tracer de exemplos anteriores.
from langgraph.graph import END, START, MessagesState, StateGraph
from langgraph.prebuilt import ToolNode
from langgraph.checkpoint.memory import MemorySaver
from langchain_core.tools import tool
from langchain_azure_ai.utils.agents import pretty_print
@tool
def play_song_on_spotify(song: str):
"""Play a song on Spotify"""
# Integrate with Spotify API here.
return f"Successfully played {song} on Spotify!"
@tool
def play_song_on_apple(song: str):
"""Play a song on Apple Music"""
# Integrate with Apple Music API here.
return f"Successfully played {song} on Apple Music!"
tool_node = ToolNode([play_song_on_apple, play_song_on_spotify])
model_with_tools = model.bind_tools([play_song_on_apple, play_song_on_spotify])
def should_continue(state: MessagesState):
messages = state["messages"]
last_message = messages[-1]
return "continue" if getattr(last_message, "tool_calls", None) else "end"
def call_model(state: MessagesState):
messages = state["messages"]
response = model_with_tools.invoke(messages)
return {"messages": [response]}
memory = MemorySaver()
workflow = (
StateGraph(MessagesState)
.add_node("agent", call_model)
.add_node("action", tool_node)
.add_edge(START, "agent")
.add_conditional_edges(
"agent",
should_continue,
{
"continue": "action",
"end": END,
},
)
.add_edge("action", "agent")
.compile(checkpointer=memory)
)
Em seguida, você pode executar o grafo como de costume:
from langchain_core.messages import HumanMessage
config = {"configurable": {"thread_id": "1"}, "callbacks": [tracer]}
message = HumanMessage(content="Can you play Taylor Swift's most popular song?")
result = workflow.invoke({"messages": [message]}, config)
pretty_print(result)
================================ Human Message =================================
Can you play Taylor Swift's most popular song?
================================== Ai Message ==================================
Tool Calls:
play_song_on_spotify (call_xxx)
Call ID: call_xxx
Args:
song: Anti-Hero
================================= Tool Message =================================
Name: play_song_on_spotify
Successfully played Anti-Hero on Spotify!
================================== Ai Message ==================================
I played Taylor Swift's popular song "Anti-Hero" on Spotify.
O que este snippet de código faz: Cria um aplicativo LangGraph simples, marca o nó para rastreamento e emite invoke_agent e o modelo/ferramenta abrange o mesmo rastreamento.
Referência:
Entender a estrutura de rastreamento
O rastreador emite intervalos que seguem as convenções semânticas do OpenTelemetry GenAI.
Cada tipo de intervalo usa um valor específico gen_ai.operation.name :
| Tipo de intervalo | gen_ai.operation.name |
Descrição |
|---|---|---|
| Invocação de agente/cadeia | invoke_agent |
Cada nó ou etapa em cadeia do LangGraph. O nome do intervalo é invoke_agent {gen_ai.agent.name}. |
| Chamada de modelo de chat | chat |
Solicitações de inferência LLM. O nome do intervalo é chat {gen_ai.request.model}. |
| Conclusão de texto | text_completion |
Chamadas LLM não relacionadas a chat. |
| Execução da ferramenta | execute_tool |
Chamadas de ferramenta disparadas pelo modelo. O nome do intervalo é execute_tool {gen_ai.tool.name}. |
| Recuperador | execute_tool |
Operações de recuperação de repositórios de vetores ou pesquisa. |
Os intervalos também carregam estes atributos principais:
-
gen_ai.agent.name— O nome do agente ou do nó. -
gen_ai.agent.id— Defina a partir doagent_idparâmetro do construtor. -
gen_ai.agent.description— Uma descrição do agente. -
gen_ai.provider.name— O provedor de modelo (por exemplo,openai, ).azure.ai.inference -
gen_ai.request.model— O nome do modelo usado para inferência. -
gen_ai.conversation.id— Identificador de thread ou sessão, quando disponível. -
gen_ai.usage.input_tokens/gen_ai.usage.output_tokens— Contagens de tokens das respostas do modelo. -
gen_ai.input.messages/gen_ai.output.messages— Conteúdo da mensagem (quando a gravação de conteúdo está habilitada).
Como o rastreador resolve gen_ai.agent.name
O rastreador resolve o nome do agente do primeiro valor não vazio nesta ordem:
-
agent_namenos metadados do nó. -
langgraph_nodenos metadados do nó (definidos automaticamente pelo LangGraph). -
agent_typenos metadados do nó. - O
nameargumento nomeado do callback LangChain. -
langgraph_path(último elemento) se os espaços reservados acima forem genéricos. - A ID da cadeia serializada ou o nome da classe.
- O
nameparâmetro doAzureAIOpenTelemetryTracerconstrutor (padrão de fallback).
Como o rastreador resolve gen_ai.agent.id
O rastreador resolve o ID do agente de:
-
agent_idnos metadados do nó (substituição individual por nó). - O
agent_idparâmetro do construtor (padrão para todos os segmentos).
Personalizar atributos com metadados de nó
Você pode definir agent_name, agent_id e agent_description para cada nó usando metadados do LangGraph. Qualquer chave de metadados que começa com gen_ai. também é encaminhada como um atributo de intervalo.
config = {
"callbacks": [tracer],
"metadata": {
"agent_name": "support-bot",
"agent_id": "support-bot-v2",
"agent_description": "Handles customer support requests",
"thread_id": "session-abc-123",
},
}
result = graph.invoke({"messages": [message]}, config)
Ao usar o LangGraph, você também pode definir metadados por nó na definição do grafo:
workflow = StateGraph(MessagesState)
workflow.add_node(
"planner",
planner_fn,
metadata={
"agent_name": "PlannerAgent",
"agent_id": "planner-v1",
"otel_agent_span": True,
},
)
Referência:
Exibir rastreamentos no Azure Monitor
Os rastreamentos são enviados para Aplicativo Azure Insights e podem ser consultados usando Azure Monitor:
Acesse o portal Azure.
Navegue até o Aplicativo Azure Insights que você configurou.
Usando a barra de navegação à esquerda, selecione Investigar>Agentes (Versão Prévia).
Você verá um painel mostrando execuções de agente, modelo e ferramentas. Use essa exibição para entender a atividade geral de seus agentes.
Selecione Exibir Rastreamentos com Execuções do Agente. O painel lateral mostra todos os rastros gerados pelas execuções do agente.
Selecione um dos rastros. Você deve ver os detalhes.
Exibir rastreamentos no Plano de Controle do Foundry
Se você implantou sua solução LangGraph ou LangChain, poderá registrar essa implantação no Foundry Control Plane para obter visibilidade e governança.
Registre seu aplicativo no Plano de Controle do Foundry para exibir rastreamentos no portal do Foundry.
Siga estas etapas:
Verifique se você atende aos requisitos para usar a capacidade de agente personalizado do Plano de Controle do Foundry.
Um gateway de IA configurado no seu recurso do Foundry. A Foundry usa Gerenciamento de API do Azure para registrar agentes como APIs.
Um agente que você implanta e expõe por meio de um endpoint acessível. O ponto de extremidade pode ser público ou acessível a partir da rede onde você implanta o recurso Foundry.
Verifique se você tem a observabilidade configurada no projeto.
Ao configurar a classe
AzureAIOpenTelemetryTracer, use o ponto de extremidade do projeto no qual você deseja que o agente seja registrado. Verifique se você configurouagent_id.Vá para o portal do Foundry.
Na barra de ferramentas, selecione Operar.
No painel Visão geral , selecione Registrar agente.
O assistente de registro é exibido. Primeiro, conclua os detalhes sobre o agente que você deseja registrar.
- URL do agente: o ponto de extremidade (URL) onde o agente opera e recebe solicitações.
- Protocolo: o protocolo de comunicação que o seu agente suporta.
-
ID do Agente OpenTelemetry: o
agent_idparâmetro que você configurou naAzureAIOpenTelemetryTracerclasse. -
Project: o projeto configurado para receber rastros na classe
AzureAIOpenTelemetryTracer. -
Nome do agente: o nome do agente (pode ser o mesmo que
agent_id).
Acione o agente para garantir que ele tenha processos.
Na barra de ferramentas, selecione Operar.
No painel esquerdo, selecione Ativos.
Selecione o agente que você criou.
A seção Traces mostra uma entrada para cada chamada HTTP feita ao endpoint do agente.
Para ver os detalhes, selecione uma entrada.
Solucionar problemas
- Se nenhum rastreamento for exibido, verifique se
connection_stringestá configurado ou se o endpoint do projeto expõe a telemetria. - Se o conteúdo da mensagem aparecer redigido, defina
enable_content_recording=TruenoAzureAIOpenTelemetryTracerconstrutor. - Se alguns nós do LangGraph estiverem ausentes, defina
trace_all_langgraph_nodes=Trueou adicione metadadosotel_trace: Truede nó.