Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pomocí integračního balíčku langchain-azure-ai emitujte trasování OpenTelemetry z aplikací LangChain a LangGraph a odesílejte je do Aplikace Azure Insights. V tomto článku nakonfigurujete AzureAIOpenTelemetryTracer, připojíte ho ke spustitelnému programu a zkontrolujete trasování v Azure Monitor.
Tracer generuje span pro spouštění agenta, volání modelu, spouštění nástrojů a načítací operace. Můžete ho použít pro aplikace, které spouštějí plně místní, hybridní toky, které volají službu Foundry Agent Service nebo řešení LangGraph s více agenty.
Požadavky
- Předplatné Azure. Vytvořte si ho zdarma.
- Projekt Foundry.
- Nasazený model chatu OpenAI Azure (například
gpt-4.1). - Python 3.10 nebo novější.
- Azure CLI je přihlášený (
az login), takže seDefaultAzureCredentialmůže ověřit.
Konfigurace prostředí
Instalace požadovaných balíčků:
pip install -U "langchain-azure-ai[opentelemetry]" azure-identity
Nastavte proměnné prostředí použité v tomto článku:
import os
# Option 1: Project endpoint (recommended)
os.environ["FOUNDRY_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..."
Pokud chcete určit, jestli se obsah ze zpráv a volání nástrojů zaznamená do trasování, předejte enable_content_recording konstruktoru AzureAIOpenTelemetryTracer .
Nahrávání obsahu je ve výchozím nastavení povolené.
Tip
Nastavte enable_content_recording=False v konstruktoru AzureAIOpenTelemetryTracer tak, aby skrýval obsah zprávy a argumenty volání nástrojů z trasování.
Vytvořte trasovač
Vytvořte jednu instanci traceru a znovu ji použijte v rámci pracovního postupu.
import os
from azure.identity import DefaultAzureCredential
from langchain_azure_ai.callbacks.tracers import AzureAIOpenTelemetryTracer
tracer = AzureAIOpenTelemetryTracer(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
credential=DefaultAzureCredential(),
name="langchain-tracing-sample",
agent_id="support-bot",
trace_all_langgraph_nodes=True,
)
Co tento fragment kódu dělá: Nakonfiguruje trasovač, který získá přidružený řetězec připojení Application Insights z koncového bodu vašeho projektu Foundry a povolí trasování pro uzly LangGraph. Pomocí agent_id parametru nastavte atribut gen_ai.agent.id při vyvolání agentů. Parametr name nastaví název traceru OpenTelemetry.
Tracer podporuje běžné ovládací prvky pro produkční pracovní postupy:
- Předejte
connection_stringpro cílení na konkrétní prostředek Application Insights nebo nakonfigurujte proměnnou prostředíAPPLICATION_INSIGHTS_CONNECTION_STRING. - Nastavte
trace_all_langgraph_nodes=Truepro trasování všech uzlů ve výchozím nastavení. - Použijte metadata uzlu, například
otel_trace: Truenebootel_trace: Falsek zahrnutí nebo přeskočení konkrétních uzlů. - Použijte
message_keysamessage_pathskdyž jsou zprávy vnořené v rámci struktury vlastního stavu, napříkladchat_history.
Odkaz:
Sledování agenta
Začněte s minimálním agentem LangChain, abyste mohli rychle ověřit trasování. Pro LangGraph připojte k zkompilovanému grafu trasovací modul s with_config.
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.
Co tento fragment kódu dělá: Vytvoří jednoduchého agenta LangGraph, připojí tracer a vyvolá agenta se zprávou.
Odkaz:
Sledujte spustitelnou komponentu LangChain
Začněte s minimálním tokem LangChain, abyste mohli rychle ověřit trasování.
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.
Co tento fragment kódu dělá: Spustí standardní kanál LangChain a odešle chat spans do OpenTelemetry prostřednictvím AzureAIOpenTelemetryTracer.
Odkaz:
Trasování grafu LangGraph
Pro LangGraph připojte k zkompilovanému grafu trasovací modul s with_config.
Tento fragment kódu se opakovaně používá model a tracer z předchozích příkladů.
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)
)
Pak můžete graf spustit obvyklým způsobem:
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.
Co tento fragment kódu dělá: Vytvoří jednoduchou aplikaci LangGraph, označí uzel pro trasování a vygeneruje invoke_agent a model/nástroj se rozdělí do stejného trasování.
Odkaz:
Pochopte strukturu trasování
Tracer vysílá rozsahy, které následují sémantické konvence OpenTelemetry GenAI.
Každý typ rozsahu používá určitou gen_ai.operation.name hodnotu:
| Typ rozpětí | gen_ai.operation.name |
Popis |
|---|---|---|
| Vyvolání agenta/řetězce | invoke_agent |
Každý uzel LangGraph nebo krok řetězu Název rozsahu je invoke_agent {gen_ai.agent.name}. |
| Volání chatovacího modelu | chat |
Žádosti o odvození LLM Název rozsahu je chat {gen_ai.request.model}. |
| Dokončování textu | text_completion |
Nechatovací hovory LLM. |
| Provádění nástrojů | execute_tool |
Volání nástrojů aktivované modelem Název rozsahu je execute_tool {gen_ai.tool.name}. |
| Retriever | execute_tool |
Operace načítání z vektorových úložišť nebo dotazování. |
Spans má také tyto klíčové atributy:
-
gen_ai.agent.name— Název agenta nebo uzlu. -
gen_ai.agent.id— Nastavte z parametru konstruktoruagent_id. -
gen_ai.agent.description— Popis agenta. -
gen_ai.provider.name— Poskytovatel modelu (napříkladopenai, ).azure.ai.inference -
gen_ai.request.model— Název modelu použitý k odvozování. -
gen_ai.conversation.id— Identifikátor vlákna nebo relace, pokud je k dispozici. -
gen_ai.usage.input_tokens/gen_ai.usage.output_tokens— Počet tokenů z odpovědí modelu. -
gen_ai.input.messages/gen_ai.output.messages— Obsah zprávy (pokud je povolen záznam obsahu).
Jak tracer vyřeší gen_ai.agent.name
Identifikátor rozpozná jméno agenta z první neprázdné hodnoty v tomto pořadí:
-
agent_namev metadatech uzlu. -
langgraph_nodev metadatech uzlu (automaticky nastaveno jazykem LangGraph). -
agent_typev metadatech uzlu. - Klíčový argument
nameze zpětného volání LangChain. -
langgraph_path(poslední prvek) pokud výše uvedené jsou obecné zástupné symboly. - Serializované ID řetězce nebo název třídy.
- Parametr
namez konstruktoruAzureAIOpenTelemetryTracer(výchozí hodnota).
Jak tracer vyřeší gen_ai.agent.id
Nástroj pro sledování určuje ID agenta z:
-
agent_idv metadatech uzlu (přepsání podle uzlu). - Parametr konstruktoru
agent_id(výchozí hodnota pro všechny rozsahy)
Přizpůsobení atributů pomocí metadat uzlů
Pomocí metadat jazyka LangGraph můžete nastavit agent_name, agent_ida agent_description na každý uzel. Jakýkoli klíč metadat začínající gen_ai. je také předán jako atribut span.
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)
Při použití jazyka LangGraph můžete také nastavit metadata na uzel v definici grafu:
workflow = StateGraph(MessagesState)
workflow.add_node(
"planner",
planner_fn,
metadata={
"agent_name": "PlannerAgent",
"agent_id": "planner-v1",
"otel_agent_span": True,
},
)
Odkaz:
Zobrazení trasování v Azure Monitor
Trasování se odesílají do Aplikace Azure Insights a lze je dotazovat pomocí Azure Monitoru.
Přejděte na portál Azure.
Přejděte na Aplikace Azure Insights, které jste nakonfigurovali.
Pomocí levého navigačního panelu vyberte Prozkoumat>Agenty (Preview).
Zobrazí se řídicí panel zobrazující spuštění agenta, modelu a nástrojů. Toto zobrazení vám umožní pochopit celkovou aktivitu vašich agentů.
Vyberte Zobrazit trasování pomocí spuštění agenta. V bočním panelu se zobrazí všechny stopy vygenerované spuštěním agenta.
Vyberte jednu z tras. Měli byste vidět podrobnosti.
Zobrazení trasování v řídicí rovině systému Foundry
Pokud jste nasadili řešení LangGraph nebo LangChain, můžete toto nasazení zaregistrovat do Foundry Control Plane , abyste získali přehled a správu.
Postupujte:
Ujistěte se, že splňujete požadavky na používání funkce vlastního agenta Foundry Control Plane:
Brána AI nakonfigurovaná v prostředku Foundry. Foundry používá Azure API Management k registraci agentů jako rozhraní API.
Agent, kterého nasadíte a zpřístupníte přes dostupný koncový bod. Koncový bod může být veřejný koncový bod nebo koncový bod, který je dostupný ze sítě, kam nasadíte prostředek Foundry.
Ujistěte se, že máte v projektu nakonfigurovanou pozorovatelnost.
Při konfiguraci třídy
AzureAIOpenTelemetryTracernezapomeňte použít koncový bod projektu, na který má být agent zaregistrovaný. Ujistěte se, že jste nakonfigurovaliagent_id.Přejděte na portál Foundry.
Na panelu nástrojů vyberte Operace.
V podokně Přehled vyberte Zaregistrovat agenta.
Zobrazí se průvodce registrací. Nejprve vyplňte podrobnosti o agentu, kterého chcete zaregistrovat.
- Adresa URL agenta: Koncový bod (URL), ve kterém váš agent běží a přijímá požadavky.
- Protokol: Komunikační protokol, který váš agent podporuje.
-
ID agenta OpenTelemetry:
agent_idParametr, který jste nakonfigurovali veAzureAIOpenTelemetryTracertřídě. -
Projekt: Projekt, který jste nakonfigurovali pro příjem tras ve třídě
AzureAIOpenTelemetryTracer. -
Název agenta: Název agenta (může být stejný jako
agent_id).
Vyvolání agenta a ujistěte se, že je spuštěný.
Na panelu nástrojů vyberte Operace.
V levém podokně vyberte Prostředky.
Vyberte agenta, který jste vytvořili.
V části Trasování se zobrazí jedna položka pro každé volání HTTP provedené do koncového bodu agenta.
Pokud chcete zobrazit podrobnosti, vyberte položku.
Odstraňování problémů
- Pokud se nezobrazí žádné stopy, ověřte, zda je
connection_stringnakonfigurovaný nebo zda koncový bod projektu poskytuje telemetrii. - Pokud se obsah zprávy zobrazí jako redigovaný, nastavte
enable_content_recording=Truev konstruktoruAzureAIOpenTelemetryTracer. - Pokud některé uzly LangGraph chybí, nastavte
trace_all_langgraph_nodes=Truenebo přidejte metadataotel_trace: Trueuzlu.