Von Bedeutung
この記事で "(プレビュー)" と付記されている項目は、現在、パブリック プレビュー段階です。 このプレビューはサービス レベル アグリーメントなしで提供されており、運用環境ではお勧めしません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳細については、「 Microsoft Azure プレビューの追加使用条件」を参照してください。
この記事では、次の方法について説明します。
- トレースの主要概念を理解する
 - AI Foundry で AI エージェントをトレースして観察する
 - マルチエージェントの可観測性を使用して新しいセマンティック規則を調べる
 - 一般的なエージェント フレームワークとの統合
 - AI Foundry ポータルと Azure Monitor でトレースを表示する
 - エージェントのプレイグラウンドで、エージェントスレッドを表示します。
 
エージェントの実行の背後にある理由を明らかにすることは、トラブルシューティングとデバッグのために重要です。 ただし、複雑なエージェントの場合は、次のような多くの理由で困難な場合があります。
- 応答の生成に多くのステップが関係し、それらのすべてを追跡するのが難しい場合があります。
 - ステップのシーケンスが、ユーザー入力によって変わる場合があります。
 - 各ステージでの入力と出力が長く、より詳細な検査が必要な場合があります。
 - エージェントの実行時の各ステップに、入れ子が含まれる場合もあります。 たとえば、エージェントがツールを呼び出し、それが別のプロセスを使い、さらにそれが別のツールを呼び出しているような場合です。 最上位レベルのエージェントの実行からの出力が奇妙であったり正しくないことがわかった場合、実行で問題が発生した場所を正確に特定するのが難かしいことがあります。
 
トレース結果では、特定のエージェントの実行に関係する各プリミティブの入力と出力を呼び出された順序で表示できるため、AI エージェントの動作を簡単に理解してデバッグできます。
トレースの主要概念の概要
作業を開始する前の主要な概念の概要を次に示します。
| 重要な概念 | 説明 | 
|---|---|
| 痕跡 | トレースは、イベントと状態の変更 (関数呼び出し、値、システム イベント) を記録することによって、アプリケーションを通じて要求またはワークフローの過程をキャプチャします。 「OpenTelemetry のトレース」を参照してください。 | 
| スパン | スパンはトレースの構成要素であり、トレース内の単一の操作を表します。 各スパンは、開始時刻と終了時刻、属性をキャプチャし、階層関係を示すために入れ子にすることができ、完全な呼び出し履歴と操作のシーケンスを確認できます。 | 
| 属性 | 属性は、トレースとスパンにアタッチされたキーと値のペアであり、関数パラメーター、戻り値、カスタム注釈などのコンテキスト メタデータを提供します。 これにより、トレース データが強化され、分析に役立つ情報が得られます。 | 
| セマンティック規則 | OpenTelemetry では、トレース データ属性の名前と形式を標準化するためのセマンティック規則が定義されているため、ツールやプラットフォーム間での解釈と分析が容易になります。 詳細については、 OpenTelemetry のセマンティック規則に関するページを参照してください。 | 
| トレース エクスポーター | トレース エクスポーターは、ストレージと分析のためにバックエンド システムにトレース データを送信します。 Azure AI では、Azure Monitor やその他の OpenTelemetry と互換性のあるプラットフォームへのトレースのエクスポートがサポートされており、さまざまな可観測ツールとの統合が可能になります。 | 
ベスト プラクティス
- 一貫性のあるスパン属性を使用します。
 - 評価実行 ID を関連付けて、品質とパフォーマンスの分析を行います。
 - 機密性の高いコンテンツを編集する。シークレットを属性に格納しないようにします。
 
マルチエージェント可観測性による OpenTelemetry の拡張
Microsoft は、シスコのインキュベーション エンジンである Outshift と共同で開発された OpenTelemetry に新しいセマンティック規則を導入することで、マルチエージェントの可観測性を強化しています。 これらの追加は、OpenTelemetry と W3C トレース コンテキストに基づいて構築され、マルチエージェント システム内のトレースとテレメトリの標準化されたプラクティスを確立し、品質、パフォーマンス、安全性、コストに関する主要メトリックの一貫したログ記録を容易にします。 この体系的なアプローチにより、ツールの呼び出しやコラボレーションなど、マルチエージェント ワークフローをより包括的に可視化できます。 これらの進歩は、LangChain、LangGraph、OpenAI Agents SDK 用の Azure AI Foundry、Microsoft Agent Framework、セマンティック カーネル、および Azure AI パッケージに統合されており、Azure AI Foundry でこれらのフレームワークのいずれかを使用して構築されたエージェント システムの統一された可観測性を得ることができます。 連携のトレースについて詳細は、こちらをご覧ください。
| タイプ | コンテキスト/親スパン | 名前/属性/イベント | 目的 | 
|---|---|---|---|
| スパン | — | execute_task | タスク計画とイベント伝達をキャプチャし、タスクの分解と分散方法に関する分析情報を提供します。 | 
| 子スパン | invoke_agent | エージェント間インタラクション | エージェント間の通信をトレースします。 | 
| 子スパン | invoke_agent | agent.state.management | 有効なコンテキスト、短期または長期のメモリ管理。 | 
| 子スパン | invoke_agent | エージェントプランニング | エージェントの内部計画手順をログに記録します。 | 
| 子スパン | invoke_agent | エージェント オーケストレーション | エージェント間のオーケストレーションを記録します。 | 
| 特性 | invoke_agent | ツール定義 | ツールの目的または構成について説明します。 | 
| 特性 | invoke_agent | llm_spans | モデル呼び出し範囲を記録します。 | 
| 特性 | ツールを実行 | ツール.コール.引数 | ツールの呼び出し中に渡された引数をログに記録します。 | 
| 特性 | ツールを実行 | ツール.コール.結果 | ツールによって返された結果を記録します。 | 
| Event | — | 評価 (名前、error.type、ラベル) | エージェントのパフォーマンスと意思決定の構造化された評価を可能にします。 | 
Azure AI Foundry SDK でトレースを設定する
Azure AI Foundry を使用してチャットの完了またはエージェントを構築する場合は、次をインストールします。
pip install azure-ai-projects azure-identity
トレースをインストルメント化するには、次のインストルメンテーション ライブラリをインストールする必要があります。
pip install azure-monitor-opentelemetry opentelemetry-sdk
Azure AI Foundry でトレースを表示するには、Application Insights リソースを Azure AI Foundry プロジェクトに接続する必要があります。
- Azure AI Foundry ポータルの左側のナビゲーション ウィンドウで[ トレース ]に移動します。
 - まだお持ちでない場合は、新しい Application Insights リソースを作成します。
 - リソースを AI Foundry プロジェクトに接続します。
 
コードでトレースをインストルメント化する
チャット メッセージの内容をトレースするには、 AZURE_TRACING_GEN_AI_CONTENT_RECORDING_ENABLED 環境変数を true に設定します (大文字と小文字は区別されません)。 これには個人データが含まれている可能性があることに注意してください。 詳細については、Python 用 Azure Core Tracing OpenTelemetry クライアント ライブラリに関するページを参照してください。
import os
os.environ["AZURE_TRACING_GEN_AI_CONTENT_RECORDING_ENABLED"] = "true" # False by default
              AIProjectClientを使用して Azure AI プロジェクトの認証と接続から始めて、OpenTelemetry トレースを使用してエージェントのインストルメント化を開始しましょう。
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
project_client = AIProjectClient(
    credential=DefaultAzureCredential(),
    endpoint=os.environ["PROJECT_ENDPOINT"],
)
次に、プロジェクトに接続されている Application Insights リソースから接続文字列を取得し、テレメトリを Azure Monitor に送信するように OTLP エクスポーターを設定します。
from azure.monitor.opentelemetry import configure_azure_monitor
connection_string = project_client.telemetry.get_application_insights_connection_string()
configure_azure_monitor(connection_string=connection_string) #enable telemetry collection
次に、Azure AI プロジェクトでエージェントとユーザー メッセージを作成して実行するコードをトレースして、トラブルシューティングまたは監視の詳細な手順を確認できます。
from opentelemetry import trace
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("example-tracing"):
    agent = project_client.agents.create_agent(
        model=os.environ["MODEL_DEPLOYMENT_NAME"],
        name="my-assistant",
        instructions="You are a helpful assistant"
    )
    thread = project_client.agents.threads.create()
    message = project_client.agents.messages.create(
        thread_id=thread.id, role="user", content="Tell me a joke"
    )
    run = project_client.agents.runs.create_and_process(thread_id=thread.id, agent_id=agent.id)
エージェントを実行したら、 Azure AI Foundry ポータルでトレースの表示を開始できます。
トレースをローカルでログに記録する
アスパイア ダッシュボードまたは別の OpenTelemetry 互換バックエンドに接続するには、OpenTelemetry Protocol (OTLP) エクスポーターをインストールします。 これにより、トレースをコンソールに出力したり、アスパイア ダッシュボードなどのローカル ビューアーを使用したりできます。
pip install azure-core-tracing-opentelemetry opentelemetry-exporter-otlp opentelemetry-sdk
次に、コンソール出力のトレースを構成します。
from azure.core.settings import settings
settings.tracing_implementation = "opentelemetry"
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import SimpleSpanProcessor, ConsoleSpanExporter
# Setup tracing to console
span_exporter = ConsoleSpanExporter()
tracer_provider = TracerProvider()
tracer_provider.add_span_processor(SimpleSpanProcessor(span_exporter))
trace.set_tracer_provider(tracer_provider)
または、 アスパイア ダッシュボードに基づいて上記のコードを変更して、ローカル OTLP ビューアーにトレースします。
次に、エージェントインストルメンテーションを有効にして、エージェントを実行します。
from azure.ai.agents.telemetry import AIAgentsInstrumentor
AIAgentsInstrumentor().instrument()
# Start tracing
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("example-tracing"):
    agent = project_client.agents.create_agent(
        model=os.environ["MODEL_DEPLOYMENT_NAME"],
        name="my-assistant",
        instructions="You are a helpful assistant"
    )
    thread = project_client.agents.threads.create()
    message = project_client.agents.messages.create(
        thread_id=thread.id, role="user", content="Tell me a joke"
    )
    run = project_client.agents.runs.create_and_process(thread_id=thread.id, agent_id=agent.id)
代替手段: VS Code 用 AI ツールキット
AI Toolkit を使用すると、VS Code でローカルにトレースする簡単な方法が提供されます。 ローカル OTLP 互換コレクターを使用するため、開発とデバッグに最適です。
このツールキットは、OpenTelemetry を使用して、Azure AI Foundry Agents Service、OpenAI、Anthropic、LangChain などの AI フレームワークをサポートします。 クラウド アクセスを必要とせずに、VS Code でトレースをすぐに確認できます。
詳細なセットアップ手順と SDK 固有のコード例については、「 AI Toolkit でのトレース」を参照してください。
カスタム関数をトレースする
カスタム関数をトレースするには、OpenTelemetry SDK を使用してコードをインストルメント化します。
- トレーサー プロバイダーを設定する: スパンを管理および作成するためにトレーサー プロバイダーを初期化します。
 - スパンを作成する: トレースするコードをスパンでラップします。 各スパンは作業単位を表し、入れ子にしてトレース ツリーを形成できます。
 - 属性の追加: トレース データのコンテキストを増やすために、属性を使用してスパンを強化します。
 - エクスポーターを構成する: 分析と視覚化のためにバックエンドにトレース データを送信します。
 
カスタム関数のトレースの例を次に示します。
from opentelemetry import trace
from opentelemetry.trace import SpanKind
# Initialize tracer
tracer = trace.get_tracer(__name__)
def custom_function():
    with tracer.start_as_current_span("custom_function") as span:
        span.set_attribute("custom_attribute", "value")
        # Your function logic here
        print("Executing custom function")
custom_function()
詳細な手順と高度な使用方法については、OpenTelemetry のドキュメントを参照してください。
トレースにユーザー フィードバックを添付する
Azure AI Foundry ポータルでユーザー フィードバックをトレースにアタッチして視覚化するには、OpenTelemetry のセマンティック規則を使用して、アプリケーションをインストルメント化して、トレースとログ ユーザー フィードバックを有効にすることができます。
応答 ID またはスレッド ID を使用してフィードバック トレースをそれぞれのチャット要求トレースと関連付けることで、Azure AI Foundry ポータルでこれらのトレースを表示および管理できます。 OpenTelemetry の仕様では、標準化された強化されたトレース データを使用できます。これは、Azure AI Foundry ポータルで分析して、パフォーマンスの最適化とユーザー エクスペリエンスの分析情報を得ることができます。 このアプローチは、OpenTelemetry を最大限に活用して、アプリケーションの監視を強化するのに役立ちます。
ユーザーフィードバックをログに記録するには、次の形式に従います。
ユーザーが GenAI モデルの応答に対する反応を提供した場合にのみ、ユーザー フィードバック評価イベントをキャプチャできます。 可能な場合は、そのような応答を記述する GenAI スパンの親になる必要があります。
ユーザー フィードバック イベント本文には、次の構造があります。
| 本文フィールド | タイプ | 説明 | 例示 | 要件レベル | 
|---|---|---|---|---|
comment | 
文字列 | ユーザー フィードバックに関するその他の詳細 | "I did not like it" | 
Opt-in | 
トレース データでのサービス名の使用
Application Insights で一意の ID を使用してサービスを特定するには、トレース データ内のサービス名 OpenTelemetry プロパティを使用できます。 これは、複数のアプリケーションから同じ Application Insights リソースにデータをログに記録していて、それらを区別する場合に便利です。
たとえば、 App-1 と App-2 という 2 つのアプリケーションがあり、同じ Application Insights リソースにデータをログ記録するようにトレースが構成されているとします。 関連性によって継続的に評価されるように App-1 を設定し、関連性によって継続的に評価されるように App-2 を設定したい場合があります。 サービス名を使用して、AI Foundry Portal でアプリケーションを監視するときに Application でフィルター処理できます。
サービス名プロパティを設定するには、こちらの手順 (「リソースが異なる複数のトレーサー プロバイダーの使用」を参照) に従って、アプリケーション コード内で直接これを実行することができます。 または、アプリをデプロイする前に OTEL_SERVICE_NAME 環境変数を設定することもできます。 サービス名の使用の詳細については、「OTEL 環境変数」および「サービス リソースのセマンティック規則」を参照してください。
特定のサービス名のトレース データのクエリを実行するには、cloud_roleName プロパティのクエリを実行します。
| where cloud_RoleName == "service_name"
Integrations
Azure AI Foundry を使用すると、Microsoft Agent Framework、Semantic Kernel、LangChain、LangGraph、OpenAI Agent SDK とのトレース統合を使用して、最小限の変更でトレースを簡単にログに記録できます。
Microsoft Agent Framework とセマンティック カーネル上に構築されたトレース エージェント
Azure AI Foundry には、Microsoft Agent Framework およびセマンティック カーネルとのネイティブ統合があります。 これら 2 つのフレームワークに基づいて構築されたエージェントは、Azure AI Foundry Observability において、標準機能としてトレーシングが利用できます。
- セマンティック カーネルと Microsoft Agent Framework のトレースと可観測性の詳細について説明します。
 
LangChain と LangGraph 上に構築されたエージェントのトレースを有効にする
注
ここで説明する LangChain と LangGraph のトレース統合は、現在 Python でのみ使用できます。
OpenTelemetry-instrumentation-langchain に従って、OpenTelemetry 標準に従う LangChain のトレースを有効にすることができます。
必要なパッケージがインストールされたら、コードでトレースのインストルメント化を簡単に開始できます。
注
LangChain および LangGraph "v1" リリースは現在、開発中です。 API サーフェスとトレースの動作は、このリリースの一部として変更される可能性があります。 LangChain v1.0 のリリース ノート ページで更新プログラムを追跡する
サンプル: Azure AI トレースを使用した LangChain v1 エージェント
このエンド ツー エンドのサンプルを使用して、 langchain-azure-ai トレーサーを使用して LangChain v1 エージェントをインストルメント化します。これは最新の OpenTelemetry (OTel) 仕様を実装しているため、Azure AI Foundry Observability で豊富なトレースを表示できます。
パッケージをインストールする
pip install \
  langchain-azure-ai \
  langchain \
  langgraph \
  langchain-openai \
  azure-identity \
  python-dotenv \
  rich
環境の構成
- 
              
APPLICATION_INSIGHTS_CONNECTION_STRING: トレース用の Azure Monitor Application Insights 接続文字列。 - 
              
AZURE_OPENAI_ENDPOINT: Azure OpenAI エンドポイントの URL。 - 
              
AZURE_OPENAI_CHAT_DEPLOYMENT: チャットモデルの展開名。 - 
              
AZURE_OPENAI_VERSION: API のバージョン (例:2024-08-01-preview)。 - Azure 資格情報は、 
DefaultAzureCredential(環境変数、マネージド ID、VS Code サインインなどをサポート) を介して解決されます。 
これらは、ローカル開発用の .env ファイルに格納できます。
トレーサーのセットアップ
from dotenv import load_dotenv
import os
from langchain_azure_ai.callbacks.tracers import AzureAIOpenTelemetryTracer
load_dotenv(override=True)
azure_tracer = AzureAIOpenTelemetryTracer(
    connection_string=os.environ.get("APPLICATION_INSIGHTS_CONNECTION_STRING"),
    enable_content_recording=True,
    name="Weather information agent",
    id="weather_info_agent_771929",
)
tracers = [azure_tracer]
モデルのセットアップ (Azure OpenAI)
import os
import azure.identity
from langchain_openai import AzureChatOpenAI
token_provider = azure.identity.get_bearer_token_provider(
    azure.identity.DefaultAzureCredential(),
    "https://cognitiveservices.azure.com/.default",
)
model = AzureChatOpenAI(
    azure_endpoint=os.environ.get("AZURE_OPENAI_ENDPOINT"),
    azure_deployment=os.environ.get("AZURE_OPENAI_CHAT_DEPLOYMENT"),
    openai_api_version=os.environ.get("AZURE_OPENAI_VERSION"),
    azure_ad_token_provider=token_provider,
)
ツールとプロンプトを定義する
from dataclasses import dataclass
from langchain_core.tools import tool
system_prompt = """You are an expert weather forecaster, who speaks in puns.
You have access to two tools:
- get_weather_for_location: use this to get the weather for a specific ___location
- get_user_location: use this to get the user's ___location
If a user asks you for the weather, make sure you know the ___location.
If you can tell from the question that they mean wherever they are,
use the get_user_location tool to find their ___location."""
# Mock user locations keyed by user id (string)
USER_LOCATION = {
    "1": "Florida",
    "2": "SF",
}
@dataclass
class UserContext:
    user_id: str
@tool
def get_weather(city: str) -> str:
    """Get weather for a given city."""
    return f"It's always sunny in {city}!"
ランタイム コンテキストを使用してユーザー情報ツールを定義する
from langgraph.runtime import get_runtime
from langchain_core.runnables import RunnableConfig
@tool
def get_user_info(config: RunnableConfig) -> str:
    """Retrieve user information based on user ID."""
    runtime = get_runtime(UserContext)
    user_id = runtime.context.user_id
    return USER_LOCATION[user_id]
エージェントを作成する
from langchain.agents import create_agent
from langgraph.checkpoint.memory import InMemorySaver
from dataclasses import dataclass
@dataclass
class WeatherResponse:
    conditions: str
    punny_response: str
checkpointer = InMemorySaver()
agent = create_agent(
    model=model,
    prompt=system_prompt,
    tools=[get_user_info, get_weather],
    response_format=WeatherResponse,
    checkpointer=checkpointer,
)
トレースを使用してエージェントを実行する
from rich import print
def main():
    config = {"configurable": {"thread_id": "1"}, "callbacks": [azure_tracer]}
    context = UserContext(user_id="1")
    r1 = agent.invoke(
        {"messages": [{"role": "user", "content": "what is the weather outside?"}]},
        config=config,
        context=context,
    )
    print(r1.get("structured_response"))
    r2 = agent.invoke(
        {"messages": [{"role": "user", "content": "Thanks"}]},
        config=config,
        context=context,
    )
    print(r2.get("structured_response"))
if __name__ == "__main__":
    main()
              langchain-azure-ai有効にすると、すべての LangChain v1 操作 (LLM 呼び出し、ツール呼び出し、エージェントステップ) が最新の OpenTelemetry セマンティック規則を使用してトレースされ、Application Insights リソースにリンクされた Azure AI Foundry Observability に表示されます。
サンプル: Azure AI トレースを使用した LangGraph エージェント
このサンプルでは、グラフ ステップ、ツール呼び出し、およびモデル呼び出しに対して OpenTelemetry に準拠したトレースを出力するために、 langchain-azure-ai でインストルメント化された単純な LangGraph エージェントを示します。
パッケージをインストールする
pip install \
  langchain-azure-ai \
  langgraph==1.0.0a4 \
  langchain==1.0.0a10 \
  langchain-openai \
  azure-identity \
  python-dotenv
環境の構成
- 
              
APPLICATION_INSIGHTS_CONNECTION_STRING: トレース用の Azure Monitor Application Insights 接続文字列。 - 
              
AZURE_OPENAI_ENDPOINT: Azure OpenAI エンドポイントの URL。 - 
              
AZURE_OPENAI_CHAT_DEPLOYMENT: チャットモデルの展開名。 - 
              
AZURE_OPENAI_VERSION: API のバージョン (例:2024-08-01-preview)。 
これらは、ローカル開発用の .env ファイルに格納できます。
トレーサーのセットアップ
import os
from dotenv import load_dotenv
from langchain_azure_ai.callbacks.tracers import AzureAIOpenTelemetryTracer
load_dotenv(override=True)
azure_tracer = AzureAIOpenTelemetryTracer(
    connection_string=os.environ.get("APPLICATION_INSIGHTS_CONNECTION_STRING"),
    enable_content_recording=os.getenv("OTEL_RECORD_CONTENT", "true").lower() == "true",
    name="Music Player Agent",
)
Tools
from langchain_core.tools import tool
@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!"
tools = [play_song_on_apple, play_song_on_spotify]
モデルのセットアップ (Azure OpenAI)
import os
import azure.identity
from langchain_openai import AzureChatOpenAI
token_provider = azure.identity.get_bearer_token_provider(
    azure.identity.DefaultAzureCredential(),
    "https://cognitiveservices.azure.com/.default",
)
model = AzureChatOpenAI(
    azure_endpoint=os.environ.get("AZURE_OPENAI_ENDPOINT"),
    azure_deployment=os.environ.get("AZURE_OPENAI_CHAT_DEPLOYMENT"),
    openai_api_version=os.environ.get("AZURE_OPENAI_VERSION"),
    azure_ad_token_provider=token_provider,
).bind_tools(tools, parallel_tool_calls=False)
LangGraph ワークフローを構築する
from langgraph.graph import END, START, MessagesState, StateGraph
from langgraph.prebuilt import ToolNode
from langgraph.checkpoint.memory import MemorySaver
tool_node = ToolNode(tools)
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.invoke(messages)
    return {"messages": [response]}
workflow = StateGraph(MessagesState)
workflow.add_node("agent", call_model)
workflow.add_node("action", tool_node)
workflow.add_edge(START, "agent")
workflow.add_conditional_edges(
    "agent",
    should_continue,
    {
        "continue": "action",
        "end": END,
    },
)
workflow.add_edge("action", "agent")
memory = MemorySaver()
app = workflow.compile(checkpointer=memory)
トレースを使用して実行する
from langchain_core.messages import HumanMessage
config = {"configurable": {"thread_id": "1"}, "callbacks": [azure_tracer]}
input_message = HumanMessage(content="Can you play Taylor Swift's most popular song?")
for event in app.stream({"messages": [input_message]}, config, stream_mode="values"):
    event["messages"][-1].pretty_print()
              langchain-azure-ai有効にすると、LangGraph の実行によって、モデル呼び出し、ツール呼び出し、グラフ遷移に対して OpenTelemetry に準拠したスパンが出力されます。 これらのトレースは Application Insights に送られ、Azure AI Foundry Observability に表示されます。
サンプル: Azure AI トレースを使用した LangChain 0.3 のセットアップ
この最小限のセットアップでは、 langchain-azure-ai トレーサーと AzureChatOpenAIを使用して LangChain 0.3 アプリケーションで Azure AI トレースを有効にする方法を示します。
パッケージをインストールする
pip install \
  "langchain>=0.3,<0.4" \
  langchain-openai \
  langchain-azure-ai \
  python-dotenv
環境の構成
- 
              
APPLICATION_INSIGHTS_CONNECTION_STRING: トレース用の Application Insights 接続文字列。 - 
              
AZURE_OPENAI_ENDPOINT: Azure OpenAI エンドポイント URL。 - 
              
AZURE_OPENAI_CHAT_DEPLOYMENT: チャットモデルのデプロイ名。 - 
              
AZURE_OPENAI_VERSION: API のバージョン (例:2024-08-01-preview)。 - 
              
AZURE_OPENAI_API_KEY: Azure OpenAI API キー。 
トレーサーとモデルのセットアップ
import os
from dotenv import load_dotenv
from langchain_azure_ai.callbacks.tracers import AzureAIOpenTelemetryTracer
from langchain_openai import AzureChatOpenAI
load_dotenv(override=True)
# Tracer: emits spans conforming to updated OTel spec
azure_tracer = AzureAIOpenTelemetryTracer(
    connection_string=os.environ.get("APPLICATION_INSIGHTS_CONNECTION_STRING"),
    enable_content_recording=True,
    name="Trip Planner Orchestrator",
    id="trip_planner_orchestrator_v3",
)
tracers = [azure_tracer]
# Model: Azure OpenAI with callbacks for tracing
llm = AzureChatOpenAI(
    azure_deployment=os.environ.get("AZURE_OPENAI_CHAT_DEPLOYMENT"),
    api_key=os.environ.get("AZURE_OPENAI_API_KEY"),
    azure_endpoint=os.environ.get("AZURE_OPENAI_ENDPOINT"),
    api_version=os.environ.get("AZURE_OPENAI_VERSION"),
    temperature=0.2,
    callbacks=tracers,
)
              callbacks=[azure_tracer]をチェーン、ツール、またはエージェントにアタッチして、LangChain 0.3 操作がトレースされ、Azure AI Foundry Observability に表示されるようにします。
OpenAI Agents SDK 上に構築されたエージェントのトレースを有効にする
このスニペットを使用して、OpenAI Agents SDK の OpenTelemetry トレースを構成し、フレームワークをインストルメント化します。 
              APPLICATION_INSIGHTS_CONNECTION_STRINGが設定されている場合は Azure Monitor にエクスポートされます。それ以外の場合は、コンソールにフォールバックします。
import os
from opentelemetry import trace
from opentelemetry.instrumentation.openai_agents import OpenAIAgentsInstrumentor
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter
# Configure tracer provider + exporter
resource = Resource.create({
    "service.name": os.getenv("OTEL_SERVICE_NAME", "openai-agents-app"),
})
provider = TracerProvider(resource=resource)
conn = os.getenv("APPLICATION_INSIGHTS_CONNECTION_STRING")
if conn:
    from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter
    provider.add_span_processor(
        BatchSpanProcessor(AzureMonitorTraceExporter.from_connection_string(conn))
    )
else:
    provider.add_span_processor(BatchSpanProcessor(ConsoleSpanExporter()))
trace.set_tracer_provider(provider)
# Instrument the OpenAI Agents SDK
OpenAIAgentsInstrumentor().instrument(tracer_provider=trace.get_tracer_provider())
# Example: create a session span around your agent run
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("agent_session[openai.agents]"):
    # ... run your agent here
    pass
Azure AI Foundry ポータルでトレースを表示する
プロジェクトで、[ トレース ] に移動し、必要に応じてトレースをフィルター処理します。
トレースを選択すると、アプリケーションの応答を観察しながら、各スパンをステップ実行し、問題を特定できます。 これは、アプリケーションの問題をデバッグして特定するのに役立ちます。
Azure Monitor でトレースを表示する
前述のコード スニペットを使用してトレースをログした場合は、すべて Azure Monitor Application Insights でトレースを表示するように設定されています。 データ ソースの管理 から Application Insights を開き、 エンドツーエンドのトランザクションの詳細ビューを 使用してさらに調査できます。
Azure AI 推論トレースを Azure Monitor に送信し、Azure Monitor リソースを作成する方法の詳細については、Azure Monitor OpenTelemetry のドキュメントを参照してください。
Azure AI Foundry Agents プレイグラウンドでスレッドの結果を表示する
Azure AI Foundry ポータルのエージェント プレイグラウンドを使用すると、エージェントが生成するスレッドと実行の結果を表示できます。 スレッドの結果を表示するには、アクティブな スレッドのスレッド ログ を選択します。 必要に応じて メトリック を選択して、 AI の品質 と リスクと安全性の複数のディメンションにわたってモデルのパフォーマンスの自動評価を有効にすることもできます。
注
プレイグラウンドでの評価には、価格ページで説明されている Trust および Azure AI Foundry Observability に基づいて課金が行われます。 結果は、有効期限が切れる前の 24 時間使用できます。 評価結果を取得するには、目的のメトリックを選択し、エージェントとチャットします。
- 評価は、次のリージョンでは使用できません。
australiaeastjapaneastsouthindiauksouth
 
[スレッド ログ] を選択した後、次の内容を確認します。
- スレッドの詳細
 - 実行情報
 - 順序付けされた実行ステップとツール呼び出し
 - ユーザーとエージェントの間の入力と出力
 - リンクされた評価メトリック (有効な場合)
 
ヒント
前のスレッドからのスレッドの結果を表示する場合は、[エージェント] 画面で [マイ スレッド] を選択します。 スレッドを選択し、[ プレイグラウンドで試す] を選択します。
              
              
              
              
              
               画面の上部にある [ スレッド ログ ] ボタンを表示して、スレッドの結果を表示できます。
注
リスクや安全性評価などの監視機能は、 Azure の価格ページに記載されている使用量に基づいて課金されます。
関連コンテンツ
- Python サンプルには、同期および非同期クライアントを使用してトレースするための完全に実行可能な Python コードが含まれています。
 - コンソール トレースと Azure Monitor を使用してエージェントをトレースするための Python サンプル
 - JavaScript サンプルには、同期および非同期クライアントを使用してトレースするための完全に実行可能な JavaScript コードが含まれています。
 - C# サンプルには、同期および非同期メソッドを使用して推論を実行するための完全に実行可能な C# コードが含まれています。