メインコンテンツまでスキップ

セマンティックカーネルのトレース

Semantic Kernel は、C#、Python、および JavaのAIミドルウェアとして機能する軽量のオープンソースSDKです。モデルの相互作用を抽象化し、プロバイダー間でプロンプト、関数、プラグインを作成します。

MLflow Tracing はセマンティック カーネルと統合して、カーネル コールバックを自動的にインストルメント化し、包括的な実行トレースをキャプチャします。アプリロジックを変更する必要はありません。mlflow.semantic_kernel.autologで有効にします。

この統合により、次の全体像が提供されます。

  • プロンプトと完了応答
  • チャット履歴とメッセージ
  • 待ち時間
  • モデル名とプロバイダー
  • カーネル関数とプラグイン
  • テンプレート変数と引数
  • トークンの使用情報
  • 発生した場合の例外
注記

ストリーミングは現在トレースされていません。

前提 条件

セマンティックカーネルで MLflow Tracing を使用するには、 MLflow と関連するセマンティックカーネルパッケージをインストールする必要があります。

開発環境の場合は、Databricks エクストラとセマンティック カーネルを含む完全な MLflow パッケージをインストールします。

Bash
pip install --upgrade "mlflow[databricks]>=3.1" semantic_kernel openai

完全な mlflow[databricks] パッケージには、Databricks でのローカル開発と実験のためのすべての機能が含まれています。

注記

最適なトレース エクスペリエンスを得るには、MLflow 3 をお勧めします。

例を実行する前に、環境を構成する必要があります。

Databricks ノートブック以外のユーザーの場合 : Databricks 環境変数を設定します。

Bash
export DATABRICKS_HOST="https://your-workspace.cloud.databricks.com"
export DATABRICKS_TOKEN="your-personal-access-token"

Databricks ノートブック内のユーザーの場合 : これらの資格情報は自動的に設定されます。

API キー: LLM プロバイダーの API キーが構成されていることを確認します。本番運用環境では、ハードコードされた値の代わりにMosaic AI GatewayシークレットまたはシークレットDatabricksを使用して、セキュアなAPIキー管理を行います。

Bash
export OPENAI_API_KEY="your-openai-api-key"
# Add other provider keys as needed

使用例

セマンティックカーネルは、主に非同期パターンを使用します。ノートブックでは、直接 await できます。スクリプトでは、 asyncio.run()で折り返します。

Python
import mlflow

mlflow.semantic_kernel.autolog()
Python
import openai
from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion

openai_client = openai.AsyncOpenAI()

kernel = Kernel()
kernel.add_service(
OpenAIChatCompletion(
service_id="chat-gpt",
ai_model_id="gpt-4o-mini",
async_client=openai_client,
)
)

answer = await kernel.invoke_prompt("Is sushi the best food ever?")
print("AI says:", answer)

トークン使用状況の追跡

MLflow 3.2.0+LLM 呼び出しごとのトークン使用量を記録し、トレース情報に合計を集計します。

Python
import mlflow

last_trace_id = mlflow.get_last_active_trace_id()
trace = mlflow.get_trace(trace_id=last_trace_id)

print(trace.info.token_usage)
for span in trace.data.spans:
usage = span.get_attribute("mlflow.chat.tokenUsage")
if usage:
print(span.name, usage)

自動トレースを無効にする

mlflow.semantic_kernel.autolog(disable=True) でセマンティックカーネルの自動トレースを無効にするか、 mlflow.autolog(disable=True)ですべて無効にします。