セマンティックカーネルのトレース
Semantic Kernel は、C#、Python、および JavaのAIミドルウェアとして機能する軽量のオープンソースSDKです。モデルの相互作用を抽象化し、プロバイダー間でプロンプト、関数、プラグインを作成します。
MLflow Tracing はセマンティック カーネルと統合して、カーネル コールバックを自動的にインストルメント化し、包括的な実行トレースをキャプチャします。アプリロジックを変更する必要はありません。mlflow.semantic_kernel.autolog
で有効にします。
この統合により、次の全体像が提供されます。
- プロンプトと完了応答
- チャット履歴とメッセージ
- 待ち時間
- モデル名とプロバイダー
- カーネル関数とプラグイン
- テンプレート変数と引数
- トークンの使用情報
- 発生した場合の例外
ストリーミングは現在トレースされていません。
前提 条件
セマンティックカーネルで MLflow Tracing を使用するには、 MLflow と関連するセマンティックカーネルパッケージをインストールする必要があります。
- Development
- Production
開発環境の場合は、Databricks エクストラとセマンティック カーネルを含む完全な MLflow パッケージをインストールします。
pip install --upgrade "mlflow[databricks]>=3.1" semantic_kernel openai
完全な mlflow[databricks]
パッケージには、Databricks でのローカル開発と実験のためのすべての機能が含まれています。
本番運用デプロイの場合は、 mlflow-tracing
とセマンティックカーネルをインストールします。
pip install --upgrade mlflow-tracing semantic_kernel openai
mlflow-tracing
パッケージは本番運用用に最適化されています。
最適なトレース エクスペリエンスを得るには、MLflow 3 をお勧めします。
例を実行する前に、環境を構成する必要があります。
Databricks ノートブック以外のユーザーの場合 : Databricks 環境変数を設定します。
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キー管理を行います。
export OPENAI_API_KEY="your-openai-api-key"
# Add other provider keys as needed
使用例
セマンティックカーネルは、主に非同期パターンを使用します。ノートブックでは、直接 await
できます。スクリプトでは、 asyncio.run()
で折り返します。
import mlflow
mlflow.semantic_kernel.autolog()
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 呼び出しごとのトークン使用量を記録し、トレース情報に合計を集計します。
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)
ですべて無効にします。