メインコンテンツへスキップ

Langfuse で LLM 評価を効率化!活用方法徹底解説

·7 分
著者
Yuto Toya

更新日:2025年4月10日

1.初めに
#

近年、AI 技術、特に大規模言語モデル(LLM)の進化は目覚ましく、様々な分野での活用が進んでいます。しかし、LLM をビジネスに適用する上で、その品質をどのように評価するかが大きな課題となっています。

これまでの LLM の評価は、主に「出力結果の目視確認」や「ユーザーフィードバック」に頼ってきました。この従来のアプローチには、以下のような課題があります

  • 評価基準の曖昧さ
    • 何をもって良い評価とするのかが評価者によって異なり、客観的な評価が困難
    • 個人の価値観や経験によって、評価結果にばらつきが生じます
  • 評価の多面性
    • 正確性、簡潔性、論理的構成など、複数の観点からの評価が必要で
    • 多角的な視点での評価が必要となり、総合的な判断が難しくなります
  • 実装の複雑さ
    • テストデータの準備、評価項目の設定、結果の可視化など、多くの実装工程が必要
    • 評価用データセットの作成やプロンプトの作成に多くの工数がかかります

このような課題を解決し、効率的かつ効果的な LLM 評価を実現するために、注目されているのが Langfuse です。 Langfuse は、LLM システムの開発から運用までをサポートする包括的なプラットフォームです。本記事では、特に LLM の評価機能に焦点を当て、Langfuse がどのように LLM 開発を効率化するのか、具体的な活用方法を解説します。

2. Langfuseによる評価機能
#

Langfuse は、これらの課題を解決するために、以下の2つの主要な評価機能を備えています。※セルフホスティングの場合はPro/Enterprise版を利用する必要あり

  • Human Annotate: 人間の手によるラベル付けを可能にします。開発者以外のドメインエキスパートが評価する場合に特に有効です。
  • LLM as a Judge: LLM を評価者として活用し、評価用プロンプトに基づいて自動で評価を行います。これにより、評価の客観性と効率性を高めることができます。

Langfuse の評価機能を利用することで、評価軸を明確に定義し、客観的な評価を行うことが容易になります。また、評価結果は UI 上で可視化され、トレースと紐付けられるため、問題点を特定しやすく、効率的な改善サイクルを実現できます。

3. RAGASとLangfuseの評価アプローチの違い
#

RAGシステムの評価フレームワークとして、RAGASは広く使用されています。RAGASは汎用的な評価フレームワークとして、検索精度や応答の関連性など、RAGシステムの基本的な性能を測定するために設計されています。しかし、実際のビジネス応用においては、以下のような制約があります

RAGASの制約
#

  • 事前に定義された評価指標に基づく標準的な評価
  • ドメイン固有の要件への対応が限定的
  • 評価基準の詳細な調整が困難

これに対し、Langfuseは実務での活用に焦点を当てた評価プラットフォームとして、以下のような特徴があります

Langfuseの特徴
#

  • ドメイン固有の評価基準を柔軟に設定可能
  • 評価プロンプトのカスタマイズと継続的な改善
  • 具体的な評価例
    • 金融分野での規制要件への適合性評価
    • 医療分野での専門用語の正確性評価

このように、RAGASとLangfuseはそれぞれ異なる用途に適しています。RAGASはRAGシステムの基本性能を標準的に評価する際に有効で、Langfuseは実際のビジネス要件に応じた詳細な評価が必要な場合に適しています。

RAGASとLangfuseの主な違い

RAGASLangfuse
プロンプトを作成する必要性必要なし必要あり 各評価用のテンプレートはある
評価用プロンプトの可視化Githubから確認LangfuseのUI上で確認
評価のカスタマイズ性ほぼなし評価基準を作成・修正が容易に可能
実装方法ソースコードで実装UIで設定(別途実装も可能)
日本語での評価制度 (個人的印象)不安定安定するように評価用プロンプトの修正が可能

4. Langfuse を用いた評価の実践
#

データセットの作成
#

Langfuse では、トレースデータから評価用データセットを簡単に作成できます。UI 上で必要なトレースを選択し、「Add to dataset」ボタンをクリックするだけで、データセットとして利用できます。

また、データセット用のトレースをあらかじめ作成しておけば、より柔軟なデータセット作成が可能です。ユーザの入力だけ取得をして、データセットとして保管しておきたい場合などに有用です。

方法としては以下のような、関数を1つ作成するだけです。

例:(ユーザの入力だけほしい場合)

@observe()
async def trace_dataset():
    langfuse_context.update_current_observation(input=ユーザの入力 ,output="")

テストデータセットの選定と管理
#

Langfuse では、作成したデータセットを「Queue」という仕組みで管理します。トレースを Annotation の Queue に入れ、ドメインエキスパートが Queue を仕分けることで、適切なテストデータを選定できます。これにより、評価に必要なデータだけを効率的に管理し、テストの精度を高めることができます。

トレースからqueueに入れる画面
トレースからqueueに入れる画面

Human Annotateの画面(仕分け画面)
Human Annotateの画面(仕分け画面)

LLM as a Judge の利用方法
#

Langfuse の LLM as a Judge 機能を利用すると、データセットの選定も効率的に行えます。あらかじめ LLM as a Judge の設定をしておけば、トレースには自動でスコアが入力されるため、怪しい値をチェックすることで、より精度の高いデータセットを選定できます。

LLM as a Judge設定画面
LLM as a Judge設定画面
LLM as a Judge設定画面(トレースの設定)
LLM as a Judge設定画面(トレースの設定)

テスト実行と結果の可視化
#

選定したデータセットを用いて、Langfuse 上でテストを実行します。テストの際には、モデルやプロンプトを自由に選択でき、複数の評価基準を設定することも可能です。テスト結果は、ダッシュボードで可視化され、各データポイントの評価スコア、入出力、トレースなどの情報を一目で確認できます。これにより、システムの改善点を効率的に特定し、迅速な改善サイクルを回すことが可能です。

プロンプト実験の設定画面
プロンプト実験の設定画面

Langfuseを活用した評価サイクル
#

以上の機能を用いることで以下のような評価・改善サイクルが実現できます。

  1. LLMの出力結果をトレースし、Langfuseで可視化
  2. Annotation の Queueに入れて、ドメインエキスパートの人に出力結果を判断してもらう & LLM as a Judgeで各評価項目に対してスコアを出力させる
  3. 2で悪い結果の原因追及をして、入力をデータセットに格納(オプションで期待する出力もあると良い)
  4. プロンプトを変更する
  5. プロンプト実験を行い、前回のプロンプトの出力との違いについてLangfuse上で結果を可視化し原因の追求

5. まとめ
#

Langfuse は、LLM システムの開発から運用までをカバーする包括的なプラットフォームです。特に評価機能においては、以下のような作業を UI 上で完結させることができます。

評価の事前準備

  • 評価用プロンプトの作成
  • 評価基準の定義
  • ドメイン固有の要件への対応

テストの効率化

  • トレースからの自動データセット作成
  • Human AnnotateとLLM as a Judgeの併用
  • 複数の評価軸でのテスト実行

結果の可視化と改善

  • 定量的なスコア表示
  • トレースを活用した原因追求
  • プロンプト実験による継続的な改善

現状では、Langfuseはトレースやモニタリング機能の利用がメインとなっていますが、本記事で紹介した評価機能を活用することで、LLM開発のライフサイクル全体を効率的に管理することが可能です。評価から改善までのサイクルを一つのプラットフォームで完結できる点は、開発効率を大きく向上させる要因となるでしょう。

ぜひ Langfuse を導入し、効率的なLLM開発の実現を目指してみてください。