🔭

Google Cloud の生成 AI オブザーバビリティ機能まとめ

に公開

生成 AI アプリケーションにおけるオブザーバビリティの必要性

ここ数年の生成 AI 技術の発展に伴い、RAG や AI エージェントなど生成 AI のアプリケーションへの応用が進んでいます。
一方で生成 AI アプリケーションを本番利用していくにあたっては以下のような課題があります。

  • 確率的な挙動
    • モデルの出力
    • 生成にかかる時間
    • トークンに対する課金額
  • 外部サービス呼び出し(RAG であれば検索サービス、AI エージェントであればツール)
  • 実行経路(ワークフロー型エージェントの場合)
  • モデルの更新、プロンプトの更新

これらの課題に対し、生成 AI アプリケーションにおいてもオブザーバビリティが重要であると考えています。

Google Cloud の機能

Google Cloud での生成 AI オブザーバビリティは、1 つの特定のサービスとして提供されているわけではなく、既存のサービスの中の機能として提供されています。
そのため全体としてどんな機能があるのか把握しづらいと考えており、今回の記事でまとめて紹介します。

Vertex AI の Model observability dashboard

Generative AI on Vertex AI では事前構築済みの Model observability dashboard が提供されています。[1]
このダッシュボードでは MaaS(Model as a Service)として提供されているモデルについて、スループット、レイテンシー、エラーなどを確認することができます。

なお対象となるモデルは Gemini と以下のパートナーモデルのみです。

  • AI21 Labs の Jamba シリーズ
  • Anthropic の Claude シリーズ
  • Meta の Llama シリーズ
  • Mistral AI の Mistral シリーズ

Cloud Trace の generative AI events

Cloud Trace ではイベントやトレースのスパン属性が OpenTelemetry の「Semantic conventions for generative AI systems」[2]に従っている場合に「生成 AI」タブに表示される機能があります。[3]
具体的には例えばスパンに以下のような情報を追加することで「生成 AI」タブで確認することができます。

  • イベント
    • システムプロンプト
    • ユーザプロンプト
    • 生成結果
  • スパン属性
    • プロバイダー、モデル
    • 生成の設定(temperature, top_p, top_kなど)
    • トークン数

注意点としてこの機能は現在プレビューです。
理由としては、そもそもの OpenTelemetry Semantic conventions for generative AI systems が Development ステータスであることが考えられます。

また Cloud Trace に限った話ではないですが、OpenTelemetry Semantic conventions for generative AI systems に完全に準拠しているライブラリも現時点ではおそらく存在しないため、以下のように自前でset_attributesadd_eventをする必要があります。

span.set_attributes({
    'gen_ai.operation.name': 'generate_content',
    'gen_ai.system': 'gcp.vertex_ai',
    'gen_ai.output.type': 'text',
    'gen_ai.request.model': model,
    'gen_ai.response.model': model,
    'gen_ai.request.temperature': temperature,
    'gen_ai.request.top_p': top_p,
    'gen_ai.request.top_k': top_k
})
span.add_event(
    "gen_ai.user.message",
    attributes={
        "gen_ai.system": "gcp.vertex_ai",
        "content": message,
        "role": "user"
    }
)

response = client.models.generate_content(
    model=model,
    contents=message,
    config=types.GenerateContentConfig(
        temperature=temperature,
        top_p=top_p,
        top_k=top_k,
    )
)
span.set_attributes({
    'gen_ai.usage.input_tokens': response.usage_metadata.prompt_token_count,
    'gen_ai.usage.output_tokens': response.usage_metadata.candidates_token_count,
    'gen_ai.response.id': response.response_id,
    'gen_ai.response.finish_reasons': response.candidates[0].finish_reason
})
span.add_event("gen_ai.choice", attributes={
    "gen_ai.system": "gcp.vertex_ai",
    "finish_reason": response.candidates[0].finish_reason,
    "index": 0,
    "content": response.text,
    "role": "model"
})

Vertex AI Agent Engine のオブザーバビリティ機能

Vertex AI Agent Engine は AI エージェントを構築・デプロイするための Google Cloud のマネージドサービスです。
特に LangChain、LangGraph、Agent Development Kit などを利用して実装したエージェントを Agent Engine にデプロイすることで、Cloud Logging、Cloud Trace、Cloud Monitoring でそれぞれログ、トレース、メトリクスを確認することができます。

ログ

エージェントのログを Cloud Logging で確認するためには以下のいずれかの方法でログを出力する必要があります。[4]

  • 標準出力、標準エラー出力
  • Python 組み込みの logging パッケージ
  • Cloud Logging のクライアント

トレース

トレースについては実装時にenable_tracing=Trueを指定することでエージェントのトレースが Cloud Trace に送信されるようになります。[5]
ただしCloud Trace の generative AI eventsで紹介したようなスパン属性やイベントの対応は不完全なようです。


メトリクス

エージェントのメトリクスについては以下がデフォルトで提供されています。[6]

  • リクエスト数
  • リクエストレイテンシー
  • コンテナ CPU 割り当て時間
  • コンテナのメモリ割り当て時間

また以下のどちらかの方法でカスタムメトリクスを作成することもできます。

  • ログベースのメトリクス
  • ユーザー定義のメトリクス

番外編

Google Cloud のサービスではないですが、Genkit という Google 製のオープンソースフレームワークがあります。
Genkit はアプリケーションに生成 AI 機能を追加するためのライブラリです。
オブザーバビリティの観点ではログ、トレース、メトリクスをエクスポートしています。[7]
ローカルでは Genkit Developer UI で、デプロイされたものについては Google Cloud Observability で確認できるようです。

最後に

抜け漏れあったら教えてください。

脚注
  1. https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-observability#additional_resources ↩︎

  2. https://opentelemetry.io/docs/specs/semconv/gen-ai/ ↩︎

  3. https://cloud.google.com/trace/docs/finding-traces#view_generative_ai_events ↩︎

  4. https://cloud.google.com/vertex-ai/generative-ai/docs/agent-engine/manage/logging ↩︎

  5. https://cloud.google.com/vertex-ai/generative-ai/docs/agent-engine/manage/tracing#langgraphagent ↩︎

  6. https://cloud.google.com/vertex-ai/generative-ai/docs/agent-engine/manage/monitoring ↩︎

  7. https://genkit.dev/docs/observability/telemetry-collection/ ↩︎

Discussion