LLMアプリケーションにおけるObservabilityとLangfuse

LLMを利用したアプリケーションの開発において、オブザーバビリティ(Observability)確保のためにLangfuseを導入しました。 本格的な運用はこれからとなりますが、Langfuseが解決する課題についてツールの検討を通して得た知識を纏めます。

LLMOpsとObservability

LLMOpsの重要性と、LLMアプリケーションのObservabilityとの関係について概説します。

LLMを使ったアプリケーション開発と運用における課題

LLMを用いたアプリケーション開発には、以下のような課題があります。

  • 幻覚や誤情報の生成: LLMは文脈を理解しているわけではなく、逐次前後の流れから次の単語を予測して生成するため、文脈に沿わない文書を生成する可能性があります。
  • データプライバシーとセキュリティ: LLMは大量のデータから学習します。個人情報や機密情報を入力することによりそれらを学習する可能性があるため、データプライバシーとセキュリティに注意が必要です。
  • 評価の難しさ: LLMの出力は言葉であり、その評価は人によって異なることが多く、統一した評価基準を設けるのが難しい。
  • LLMパイプラインやエージェントのObservability: LLMによる文書生成やRAG、外部ツールの実行など、LLMアプリケーション内部の一連の処理において、問題の原因特定が難しい。

LLMOpsとその重要性

LLMOps(Large Language Model Operations)は、大規模言語モデル(LLM)を用いたアプリケーションの開発および運用を支援するためのインフラストラクチャとツールを提供する新しい専門領域です。 LLMを用いたアプリケーションの運用は、先に挙げた課題やプロンプト・データの管理、スケーラビリティなど、多くの課題を伴います。LLMOpsは、これらの課題に対処し、LLMの機能を最大限に引き出すための重要な役割を果たします。

なお、LLMOpsはより広範なGenAIOps(Generative AI Operations)の一部として位置づけられています。GenAIOpsは、生成AIおよびLLMを用いたソリューションの開発と管理に焦点を当てたMLOpsの進化形です。LLMOpsは、特に言語ユースケース向けの運用に特化しており、プロンプト管理や性能管理なども含みます。1

LLMアプリケーションのObservability

LLMアプリケーションのObservabilityは、LLMアプリケーションの性能を管理し理解するためのツールや手法を提供します。これにより、リアルタイムでの性能評価や異常検出、セキュリティの強化が可能となります。 また、Observabilityは、LLMOpsの一部として、LLMアプリケーションの全体的な運用効率を向上させ、迅速な問題解決を可能にするための基盤を提供します。これにより、開発者はLLMの能力を最大限に活用し、ユーザーエクスペリエンスを向上させることができます。

LLMアプリケーションのObservabilityに関するツール

LLMアプリケーションに特化したObservabilityツールは既に幾つかの選択肢がありますが、現時点でそれらが持つ機能に大きな差は無いように思います。

今回は運用工数を抑えつつ複数のチームメンバーで利用することを前提に選定を行いました。 機能ではほぼ優劣はつきませんでしたが、SaaSの利用料金とデータの保管期間、OSSで開発されているという観点でLangfuseを採用しました。 これらのサービスのほとんどはUSとEUリージョンにデータが保存されますが、開発の要件によってはデータを国内に留めておきたい場合もあります。 そのような場合、OSS版でセルフホストできることは大きなメリットになります。

Langfuseが解決する課題

Langfuseは、LLM(大規模言語モデル)とアプリケーションコンポーネントの連携における様々な課題を解決するための強力なツールです。以下に、Langfuseがどのようにこれらの課題を解決するのかを説明します。

LLMとアプリケーションコンポーネントの連携における可視化と分析

LLMとアプリケーションがどのように連携しているかを可視化し、分析するための機能を提供します。これにより、開発者はシステムのパフォーマンスを詳細に理解し、問題の特定と解決を効率的に行うことができます。

パフォーマンス計測と入出力のデバッグ

LLMのcompletionだけでなく、RAG(Retrieval-Augmented Generation)におけるembedding生成やVector storeへの検索など、各ステップを詳細にドリルダウンすることができます。これにより、特にエージェントの開発や運用時に、期待する出力が得られない場合の内部挙動の調査が容易になります。

LLM利用に関するコストのモニタリング

LLMが消費したトークン数を入力と出力に分けて計測し、実際のモデルの料金をベースにしたコストを算出します。これにより、コスト管理が効率的に行えます。

プロンプトやモデルの継続的な評価と管理

プロンプトやモデルの継続的な評価と管理を支援する機能を提供しています。 執筆時点で、LLMの性能向上や利用料金の低価格化が短いスパンで進んでいます。そのため、アプリケーションへの変更だけでなく、利用するLLMの変更も継続的に発生すると考えられます。 変更に際しては出力の評価は必ず必要になるため、ここで紹介する機能は今後より重要なものとなっていくと思われます。

アノテーション

各トレースにおける入力・出力に対して、運用者が手動でスコアリングを行うことができます。LangfuseのUIを利用して、このスコアリングを簡単に実施できます。

ユーザーフィードバック

アプリケーションの入力・出力に対するユーザーからのフィードバックを収集し、Langfuseのスコアリング用APIを通じて登録することができます。専用のTS/JS SDKも用意されており、開発者にとって使いやすい環境が整っています。

LLM-as-a-Judge

人間の代わりにLLMによって入出力のスコアリングを行うことができます。観点ごとにプロンプトを指定してスコアリングする方法が2つあり、Langfuse内でのスコアリングと外部ツールを利用したスコアリングが選択可能です。

コラボレーション

複数のユーザーがトレースや評価を共有・管理するためのコラボレーション機能を提供しています。これにより、チーム全体での効率的な開発と運用が可能となります。

Langfuseは、LLMアプリケーションの開発と運用における課題を解決するための包括的なツールであり、パフォーマンスの向上、コスト管理、継続的な評価と改善を支援します。これにより、開発者はより効果的にLLMを活用し、質の高いアプリケーションを提供することができます。

具体的な使用例

Langfuseの具体的な使用方法を紹介します。

ユースケース

ここでは、LLMを利用したアプリケーションの開発において、以下の課題を解決するための使用例を説明します。

  • LLMとアプリケーションコンポーネントとの連携の可視化
  • LLMで消費したトークン数とそれを基にした料金の計測
  • アプリケーションの出力の評価

LLMとアプリケーションコンポーネントとの連携を可視化

LLMの入出力内容や各コンポーネントでどれくらい時間が掛かっているのかなどを確認します。

アプリケーションへの計装

可視化のためにはアプリケーションの実行に関する情報を収集する必要があります。 そのため、アプリケーションに情報収集のためにコードを仕込む必要があります。これを計装と言います。 アプリケーションにおいて取得したい情報の粒度(関数単位や一連の処理単位など)は計装方法によりコントロールできます。 この粒度をspanと呼びます。関心対象のアプリケーションのフローはspanの集合で構成され、これをtraceと呼びます。 また、LLMによるテキスト生成処理をgenerationと呼び、LLM特有の情報を保持するspanとして扱います。 単一のイベントについてはeventとして記録することもできます。

これらの用語の詳細な理解が必要な場合は、Observabilityの概念に関するドキュメントを一読することをお薦めします。

LLMを利用したチャットシステムを例にするとtraceの構造は以下のようになります。(かなり簡略化しています)

  • trace (チャットの1セッション)
    • span (最初の質問と応答の処理)
      • event (APIコールイベント)
      • span (質問の入力処理)
      • generation (gpt-4oのcompletion実行)
      • span (応答の出力処理)
    • span (次の質問と応答の処理)
      • event (APIコールイベント)
      • span (質問の入力処理)
      • generation (gpt-4oのcompletion実行)
      • span (応答の出力処理)

トレースの解析

計装が完了したコードを実行すると自動でtraceがLangfuseに送信されます。 LangfuseのWeb UI上では収集したtraceを選択して、入れ子になっているspanやgenerationをドリルダウンしながら解析できます。

traceを構成するspanをドリルダウンできる

消費したトークン数・料金の計測

トークン数と料金の情報はgenerationで確認できます。(赤枠部分: 入力トークン数3678、生成トークン数35、発生した料金$0.0189)

トークン数と料金が確認できる

アプリケーションの出力を評価

アノテーション

収集したtraceに対して、その出力内容のスコアを付与することができます。 アプリケーションの開発者や運用者が、Web UI上から評価したいtraceを選択してスコアを入力します。

UI上でスコア付けが可能

ユーザーによるフィードバック

アプリケーションのユーザーから出力に対するフィードバックを取得することも可能です。 その場合は、アプリケーションからLangfuseにユーザーのフィードバックデータを送信する必要があります。 そのためのSDKが用意されています。

LLM-as-a-Judge

先の2つは人によるマニュアルでの評価方法でした。 効率的かつ属人性を排除したスコアリングの方法として、LLMによるスコアリングがあります。 つまり、LLM(とそれを活用したアプリケーション)の出力をLLMにより評価するということです。これをLLM-as-a-Judgeといいます。 Langfuseでは、Langfuseの中でスコアリングする方法と他のLLM評価ライブラリを使う方法が用意されています。

  1. Langfuseの中でスコアリングする方法: スコアリング用のプロンプトをテンプレートとして登録し、特定のtraceが記録されたときに実行したいテンプレートを事前に設定しておきます。 そうするとtraceが記録されるたびに自動でLLMによるスコアリングを実行してくれるという仕組みです。
  2. Langfuseの外でスコアリングする方法DeepEvalなどのLLM評価ライブラリを使ってスコアリングしたい場合はこの方法を使います。 LangfuseのAPI経由でtraceを取得し、LLM評価ライブラリでスコアリング、そしてLangfuseのAPI経由でtraceにスコアを付与するという流れになります。 このように任意のLLM評価ライブラリを使用できるため、例えばRAGを構成するパイプラインを評価したい場合はragasを使うといったこともできます。

Langfuseの中でスコアリングする方法は、評価用のプロンプトを登録しておくだけで手軽に自動評価が可能なため、RAG評価等の複雑な要件が無い限りはLangfuseだけで完結できるのが良いところです。 他のLLM評価ライブラリによる評価を行う場合は、別途 評価用のパイプラインを構築して運用していく必要があるので、検討する際はそのコストも考慮する必要がありそうです。

まとめ

LLMアプリケーションの開発と運用において、Observabilityの確保は極めて重要です。Langfuseのようなツールは、この課題に対する強力なソリューションを提供しています。本記事では、LLMOpsの重要性、Observabilityの必要性、そしてLangfuseが解決する具体的な課題について説明しました。

この分野における将来の展望として、以下のような点が考えられます。

  1. AIの進化に伴う新たな課題への対応: LLMの能力が急速に向上する中、Observabilityツールもそれに追随して進化する必要があります。将来的には、より複雑なAIシステムや、マルチモーダルAIに対応したObservability機能が求められるようになると思います。

  2. 自動化とAI支援の強化: 現在でもLLM-as-a-Judgeのような機能がありますが、将来的にはAIによる自動評価や最適化がさらに高度化すると予想されます。人間の介入を最小限に抑えつつ、システムの品質を維持・向上させる仕組みが発展すると思われます。

  3. セキュリティとプライバシーの強化: LLMアプリケーションが扱うデータの機密性が高まるにつれ、Observabilityツールにおけるセキュリティとプライバシー保護の重要性も増していきます。データの匿名化や暗号化、アクセス制御などの機能がさらに強化されると考えられます。

  4. クロスプラットフォーム統合: 異なるAIプラットフォームやツール間でのデータ連携や統合分析の需要が高まると予想されます。例えば、現時点でもMapfiyでマインドマップを生成して、それをNapkinに入力して資料の挿絵を生成するといったことをやられているかと思います。Langfuseのような開発プラットフォームでは、より広範なエコシステムとの連携を強化していくことが予想されます。

  5. コスト最適化の高度化: LLMの利用コストは依然として多くの組織にとって課題です。また、本記事執筆時点におけるOpenAI o1のように、週30回の利用制限などレートリミットも考慮する必要があり、GPT-4oなど他のモデルとの併用戦略も考えられます。将来のObservabilityツールは、より精緻なコスト分析と最適化提案を行う機能を備えることになると思われます。

  6. 規制対応の自動化: AIの利用に関する規制が世界各地で整備されつつある中、コンプライアンス対応を支援する機能がObservabilityツールに組み込まれる可能性があります。

LLMOpsとObservabilityの分野は、AIテクノロジーの進化と共に急速に発展しています。Langfuseのようなツールは、この変化に適応し、開発者がAIの力を最大限に活用できるよう支援し続けると考えられます。組織はこれらのツールを効果的に活用することで、AIアプリケーションの品質、効率、そして信頼性を継続的に向上させることが重要になると思います。