LangfuseでLLMの検証を加速する:見方とスコアの求め方、そしてデータセットと評価の深掘り
はじめに
LLM(大規模言語モデル)アプリケーションの開発と運用が成熟期に入るにつれ、その確率的で複雑な挙動を正確に把握し、品質、コスト、パフォーマンスを体系的に管理する必要性が高まっています。従来のソフトウェア向けに設計された観測ツールは、LLM特有の多段階の推論プロセス、非決定的な出力、そして密接に絡み合ったプロンプトとレスポンスの連鎖を追跡するには不十分です。この技術的ギャップを埋めるために設計されたのが、オープンソースのLLMエンジニアリングプラットフォームであるLangfuseです [1]。
本記事では、LLMアプリケーションのトレーシングと評価を効率化するオープンソースプラットフォーム「Langfuse」について、その基本的な使い方、見方、スコアの求め方に加え、データセットの役割、評価のカスタム性、そしてAPIを叩かずにスコアが表示される仕組みまで、詳細に解説します。
Langfuseは、プロンプト、レスポンス、コストなどを一元的に管理し、LLMの検証や運用効率化を強力に支援します。
想定される場面:LLM開発や運用に携わるエンジニアが、Langfuseの概要と本記事で解説する内容を短時間で理解したい場合。
Langfuseとは?:プラットフォームアーキテクチャとデプロイメントモデル
Langfuseは、LLMアプリケーションの挙動を可視化するためのオープンソースプラットフォームです。その技術基盤は、高スループットの非同期データ取り込みと高速な分析クエリ実行に対応するために特化して設計されています [4]。
コアアーキテクチャコンポーネントとデータフロー
Langfuseは、関心事の分離とワークロードの最適化を目的としたマルチコンポーネントシステムとして構築されています [4]。
•
Langfuse Webサーバー: UIと同期APIリクエストを処理します。
•
Langfuse Worker: イベントを非同期で処理します。
•
PostgreSQL: ユーザーアカウントやプロジェクト設定などのトランザクションワークロードを管理します。
•
ClickHouse: トレース、オブザベーション、スコアを保存し、高速な分析クエリを可能にする高性能なOLAP(Online Analytical Processing)データベースです。
•
Redis/Valkey: キューイングとキャッシングに使用されるインメモリデータストアです。
•
S3互換のBlobストア: 取り込まれた生のイベントやマルチモーダルデータのような大規模なアーティファクトのための永続的でコスト効率の高いストレージを提供します [4]。
このアーキテクチャは、書き込み負荷の高い不変のトレースデータの取り込みと、読み取り負荷の高い分析クエリという、LLM観測性における特有のデータパターンへの直接的な対応です。PostgreSQL(OLTPに最適)とClickHouse(OLAPに最適)を分離することは、大規模データシステムにおける古典的なパターンであり、本番グレードのパフォーマンスに対するLangfuseの成熟度を示しています [4]。
デプロイ戦略:マネージドクラウド vs. セルフホスティング
Langfuseは、Langfuse Cloudとセルフホスティングという2つの主要なデプロイモデルを提供しています [2]。
•
Langfuse Cloud: Langfuseチームによって完全に管理されるSaaS(Software as a Service)であり、最も簡単な導入方法です。クレジットカード不要の寛大な無料枠が提供され、常に最新バージョンが利用可能です [2]。EUおよびUSデータリージョンで利用でき、SOC2/ISO27001コンプライアンスなどのエンタープライズ機能も提供します [9]。
•
セルフホスティング: 最大限のコントロール、データプライバシー、そしてエアギャップ環境での実行能力を提供します [7]。コアプラットフォームはMITライセンスで提供され、使用制限はありませんが、SSO強制や詳細なRBAC(Role-Based Access Control)などの特定のエンタープライズ機能は商用ライセンスが必要です [9]。
特徴Langfuse Cloudセルフホスト (Docker Compose)セルフホスト (Kubernetes/Terraform)セットアップの複雑さ低(数分で開始)中(基本的なDocker知識が必要)高(インフラ専門知識が必要)スケーラビリティ高(マネージド)低(垂直スケーリングのみ)高(水平スケーリング可能)メンテナンスオーバーヘッドなし中(手動での更新とバックアップ)高(クラスタ管理が必要)データ管理とプライバシーLangfuseが管理完全な自己管理完全な自己管理高可用性標準で提供なし設定可能最新機能へのアクセス即時手動での更新が必要手動での更新が必要コストモデル使用量ベースの課金インフラコストのみインフラコスト + 潜在的なライセンス料
想定される場面:Langfuseがどのようなツールであるか、その特徴やメリット、そして導入方法の選択肢を把握したい場合。特に、他のLLM関連ツールとの比較検討を行う際の参考情報として。
Langfuseの基本的な使い方:セルフホスティングの基本ステップ
Langfuseの利用方法には、公式が提供する有料のマネージドサービスと、自前でサーバを構築するセルフホスティングの2種類があります。本記事では、セルフホスティングを前提とした基本的なセットアップと利用方法について説明します。
Docker Composeによるセルフホスティング
ローカル開発や単一の仮想マシン(VM)でLangfuseをセルフホストする最も迅速な方法は、Docker Composeを使用することです [4]。
Langfuseのリポジトリをクローン: git clone https://github.com/langfuse/langfuse.git [12]
環境変数の設定: docker-compose.ymlファイル内のシークレットを更新します。すべての機密性の高い行には# CHANGEMEというコメントが付いています [12]。
Docker Composeでサービス起動: docker compose upコマンドでサービスを起動します [7]。
Web UIアクセス: langfuse-web-1コンテナが「Ready」とログに出力した後、ブラウザでhttp://localhost:3000にアクセスするとLangfuse UIが利用可能になります [7]。
自動化されたデプロイメントのために、Langfuseは「ヘッドレス初期化」をサポートしています。これにより、LANGFUSE_INIT_USER_EMAILなどの環境変数を使用して、初期の組織、プロジェクト、ユーザー、APIキーを自動的に作成でき、手動でのUIセットアップが不要になります [13]。
本番グレードのデプロイメント:KubernetesとTerraform
本番環境や高可用性が要求されるシナリオでは、Kubernetes (Helm)またはTerraformによるデプロイが推奨されます [2]。AWS、Azure、GCP向けのHelmチャートとTerraformテンプレートが提供されており、これらはLangfuse Cloudを支えるアーキテクチャをミラーリングした、スケーラブルで回復力のあるデプロイを容易にします [2]。このアプローチにより、負荷の増加に応じてWebおよびWorkerコンテナを水平にスケールさせることが可能になります [11]。
想定される場面:Langfuseを実際に導入・利用開始する際の具体的な手順を知りたい場合。特に、セルフホスティング環境でのセットアップ方法に関心があるエンジニア向け。
トレーシングの中核:Langfuseのデータモデル
Langfuseの観測能力の基盤となるのは、そのデータモデルです。この階層構造を理解することは、アプリケーションを効果的に計測し、デバッグと分析のためにプラットフォームの全能力を活用するために不可欠です。このモデルは業界標準のOpenTelemetry(OTel)フレームワーク上に構築されており、その概念をLLM中心の語彙に抽象化しています [16]。
基本概念:トレース、セッション、オブザベーション
•
トレース (Trace): 最上位の管理単位であり、ユーザーのチャットボットへのクエリなど、単一のリクエストやトランザクションのライフサイクル全体を表します [6]。Langfuseのトレースは、ルートOTelトレースとIDを共有し、1つ以上のオブザベーションを収集します [16]。user_id、session_id、tags、そして全体のinputとoutputといったトップレベルの属性を保持します [16]。
•
セッション (Session): 複数の関連するトレースを論理的にグループ化するもので、複数ターンの会話やエージェントのワークフローを理解する上で重要です。例えば、チャットボットとの会話全体を単一のセッションとして追跡し、各ユーザーとボットのやり取りを個別のトレースとすることができます [20]。セッション全体に対してスコアを付け、会話全体の品質を評価することも可能です [22]。
•
オブザベーション (Observation): トレース内のあらゆるイベントを指す総称です。これはOTelスパンのLangfuse固有の表現であり、スパン、ジェネレーション、イベントの3つの特化されたタイプのいずれかになります [6]。
オブザベーションの階層:スパン、ジェネレーション、イベントの詳細
•
スパン (Span): データ検索ステップ、ツール呼び出し、前処理・後処理関数など、トレース内の汎用的な作業単位を表します [16]。スパンはネストして明確な階層を形成でき、操作間の親子関係を示し、レイテンシのボトルネック特定に役立ちます [16]。
•
ジェネレーション (Generation): LLM呼び出し専用に設計された特殊なタイプのスパンです [6]。これには、model名、model_parameters(例:temperature)、usage(入力/補完/合計トークン数)、そして計算されたcostといった、LLM固有の重要なデータを格納するための構造化された追加フィールドが含まれます [16]。この特化されたオブジェクトが、LLMコールごとの詳細なコスト追跡とパフォーマンス分析を可能にします。
•
イベント (Event): トレースまたはスパン内の特定の時点を示すマーカーです。スパンやジェネレーションとは異なり、イベントには持続時間がありません。エラーの発生、特定の条件の達成、データベース検索の要約など、重要な出来事を記録するために使用されます [16]。
この汎用的なSpanと特化したGenerationの明確な区別は、Langfuseを単なる汎用トレーシングツールから一歩進んだものにしています。これは、LLMコールが単なる操作ではなく、アプリケーションの中核をなすコスト発生要素であり、第一級のデータ構造に値するという設計思想を反映しています。
オブジェクト対応するOTel概念目的主要属性使用例Session(なし)関連する複数のトレースをグループ化idユーザーとチャットボット間の全会話TraceOTel Trace単一のリクエスト/トランザクション全体id, name, user_id, session_id, tagsユーザーからの単一の質問とその応答ObservationOTel Spanトレース内の任意の作業単位(総称)id, trace_id, type, start_time, end_time(Span, Generation, Eventのいずれか)SpanOTel Span非LLMの汎用的な作業単位name, input, output, metadataRAGパイプラインにおけるベクトル検索GenerationOTel SpanLLM呼び出し専用の作業単位name, model, usage, cost, prompt, completionOpenAI APIへのchat.completions.create呼び出しEvent(なし)持続時間のない特定の時点の出来事name, metadata特定のエラーが発生したことの記録
データのエンリッチメント:メタデータ、タギング、カスタムIDの役割
•
メタデータ (Metadata): 任意のJSONをトレースやオブザベーションに添付でき、開発者はアプリケーションに関連する豊富な構造化コンテキスト(例:request_id, source, version)を追加できます [24]。メタデータはトップレベルのキーに基づいてマージされるため、実行中に段階的に情報を追加することが可能です [24]。
•
タグ (Tags): トレースのフィルタリングやグループ化に使用される単純な文字列のリストです(例:production, test, v2-prompt) [18]。
•
カスタムID (Custom IDs): Langfuseでは、開発者がトレースやオブザベーションに独自のドメイン固有ID(例:外部システムのmessageId)を付与できます [25]。これは、他のシステムから対応するLangfuseトレースへのディープリンクを作成したり、外部の評価結果を正しい実行にリンクさせたりする上で非常に重要です [25]。
想定される場面:Langfuseの主要機能であるトレーシングの概念と、LLMの処理がどのように記録・可視化されるかを理解したい場合。特に、複雑なLLMパイプラインのデバッグや最適化を検討しているエンジニア向け。
Python実装例:SDKによる実践的な実装
LangfuseのPython SDKを使用すると、LLMアプリケーションのトレースデータを簡単に記録できます。以下に基本的な実装例と高度な計測パターンを示します。
- SDKのインストールと初期化
Bash
pip install langfuse
クライアントはpublic_keyとsecret_keyを提供して初期化されます。セキュリティと移植性の観点から、これは通常、環境変数(LANGFUSE_PUBLIC_KEY, LANGFUSE_SECRET_KEY, LANGFUSE_HOST)を介して行われます [30]。
Python
from langfuse import Langfuse
APIキーを使用してLangfuseクライアントを初期化
環境変数からの読み込みが推奨されます
langfuse = Langfuse(
secret_key="sk-...", # あなたのシークレットキー
public_key="pk-..." # あなたのパブリックキー
)
Langfuseクライアントはシングルトンであり、get_client()を介してアプリケーション全体でグローバルにアクセスでき、単一の共有インスタンスを保証します [31]。
- 計測パターン:デコレータ、コンテキストマネージャ、手動オブザベーション
Langfuseは、制御と複雑さのレベルに応じて複数の計測パターンを提供します [16]。
•
@observe デコレータ: 最もシンプルな方法です。このデコレータを関数に適用すると、関数名でスパン(as_type="span")が自動的に作成され、関数の実行がトレースされます。関数の引数と戻り値は、それぞれスパンの入力と出力として記録されます [23]。
•
langfuse.trace() コンテキストマネージャ: より詳細な制御が必要な場合に適しています。with langfuse.trace(...) as trace:構文を使用すると、トレースの開始と終了を明示的に制御し、トレース全体にわたるカスタム属性(user_id, session_id, tagsなど)を設定できます [3]。
•
手動オブザベーション: trace.span(), trace.generation(), trace.event() などのメソッドを直接呼び出すことで、トレース内の個々の操作(スパン)、LLM呼び出し(ジェネレーション)、特定のイベントを細かく記録できます。これにより、複雑なLLMパイプラインの各ステップを正確に計測できます [16]。
以下に、Python SDKを使用した基本的なLLM呼び出しのトレース例を示します。
Python
新しいトレースを作成
trace = langfuse.trace(name="my-llm-flow")
LLMへのリクエストをシミュレート
response = my_llm_call(prompt) # ここに実際のLLM呼び出し処理が入ります
生成内容をトレースに記録
trace.generation(
input=prompt,
output=response
)
このコードにより、my-llm-flowという名前のトレースが作成され、その中にLLMへの入力(プロンプト)と出力(レスポンス)が記録されます。LangfuseのWeb UIでこのトレースの詳細を確認できます。
想定される場面:Langfuseを自身のPythonプロジェクトに組み込む際の具体的なコード例を知りたい場合。特に、LLMの入出力や処理フローをプログラムから記録する方法を学びたい開発者向け。
Web UIの機能
LangfuseのWeb UIは、記録されたトレースデータを視覚的に分析するための豊富な機能を提供します。主な機能は以下の通りです。
ダッシュボード
使用状況、コスト、パフォーマンスの概要を一覧で確認できます。
トレース一覧
記録されたすべてのトレースを時系列で表示し、フィルタリングや検索機能を使って特定のトレースを素早く見つけることができます。
トレース詳細
個々のトレースの処理フローをツリー構造で可視化し、各ステップの入出力、実行時間、コストなどを詳細に確認できます。
アノテーション
トレースや個々のジェネレーションに対して、手動で評価スコアやコメントを付与できます。これにより、LLMの応答品質を評価し、改善のためのフィードバックを記録できます。
データセット
重要なトレースをデータセットとして保存し、後で再利用したり、モデルの評価やテストに活用したりできます。
想定される場面:LangfuseのWeb UIを使って、記録されたLLMの挙動をどのように分析・管理できるかを知りたい場合。特に、ダッシュボードやトレース詳細画面の活用方法に関心がある運用担当者や開発者向け。
スコアリングと評価
Langfuseでは、LLMの応答品質を評価するための多様なスコアリング機能を提供しています。これにより、LLMアプリケーションの性能改善サイクルを加速できます。
評価方法
•
手動評価: LangfuseのWeb UI上で、特定のトレースやジェネレーションを選択し、直接スコアやコメントを付与します。ユーザーの主観的な評価を反映させる場合に有効です。
•
API経由の評価: Langfuse SDKを使用して、プログラム的に評価を記録できます。これにより、自動テストや外部システムからの評価結果を統合することが可能です。
•
自動評価: LLM自身を使った自動評価や、特定のルールに基づいた評価を設定できます。これにより、大量のトレースデータを効率的に評価し、傾向を把握できます。
評価タイプ
•
数値スコア: 0-1、1-5、1-10など、数値で評価を表現します。例えば、応答の正確性や関連性を数値で示すことができます。
link(
Langfuse Evaluation / Scores Data Model
Langfuse
https://langfuse.com › docs › data-...)
•
カテゴリ選択: Good/Bad、正確/不正確、関連あり/なしなど、定義済みのカテゴリから選択して評価します。特定の品質基準に合致するかどうかを判断するのに役立ちます。
•
テキストコメント: 詳細なフィードバックや、特定の挙動に関するメモをテキストで残します。デバッグや改善のための具体的な情報を提供できます。
想定される場面:LLMの応答品質をどのように評価し、改善に繋げるかを知りたい場合。特に、評価指標の設定や、手動・自動評価の導入を検討している品質管理担当者や開発者向け。
評価のカスタム性について
Langfuseでは、カスタムスコア (Custom Scores) を使用することで、評価を柔軟にカスタマイズできます。これは、Langfuseの評価ワークフローを実装する上で最も柔軟な方法とされています。
主な特徴:
•
評価対象: Traces (トレース全体)、Observations (個々のLLM呼び出し)、Sessions (セッション)、DatasetRuns (データセット実行) に対して評価メトリクスを割り当てることができます。
•
取り込み方法: Langfuse SDK (Python/TypeScript) またはAPIを介してスコアを取り込みます。
•link(
Langfuse Evaluation / Scores Data Model
Langfuse
https://langfuse.com › docs › data-...)
データ型: スコアは以下の3つのデータ型をサポートしています。
•
Numeric (数値): 例: 0.9, 1.0など。
•
Categorical (カテゴリ): 例: Good/Bad, 正確/不正確など。
•
Boolean (真偽): 例: True/False (1/0)など。
•
スコア設定の強制: ScoreConfigを事前に定義し、スコア作成時にconfigIdを指定することで、スコアのデータ型や値の範囲、カテゴリなどを強制し、評価の一貫性を保つことができます。ScoreConfigはLangfuseのWeb UIまたはAPIを介して定義可能です。
想定される場面: ユーザーフィードバックの収集、カスタム評価データパイプラインの構築、ガードレールやセキュリティチェック、カスタムの内部ワークフローツール(Human-in-the-loopなど)の構築、ランタイムでのカスタム評価(例: 生成されたSQLコードが実際に動作したか、出力が有効なJSONであったかなど)といった多様なユースケースで活用できます。
参考資料: Custom Scores - Langfuse
APIを叩かずにスコアが表示されるかについて
Langfuseでは、APIを直接叩かなくてもスコアを表示させることは可能です。
•
手動でのスコア投入: LangfuseのWeb UI上でトレースに対して手動でスコアやコメントを付与した場合、そのスコアは即座にWeb UIのスコアテーブルに表示されます。
•
SDK経由でのスコア投入: SDKを使用してスコアを投入する場合、trace_idを指定してスコアをリンクさせることができます。この際、対象のトレースがまだ作成されていなくても、スコアはLangfuseに記録され、後から同じtrace_idを持つトレースが作成された際に自動的にリンクされます。これにより、リアルタイムでなくてもスコアがシステムに反映され、Web UIで確認できるようになります。
つまり、Web UIからの手動入力、またはSDK経由での非同期的なスコア投入であれば、明示的にAPIを叩くコードを書かなくてもスコアがWeb UIに表示されます。APIは、より高度な自動化や外部システムとの連携を行う際に利用されます。
想定される場面:Langfuseのスコア表示の仕組みを理解し、開発者がどのようにスコアをシステムに反映させるかを知りたい場合。特に、API呼び出しの必要性や、手動・SDK経由でのデータ投入方法に関心がある開発者向け。
Langfuseのデータセット
Langfuseのデータセットは、LLMアプリケーションの評価の基準となる「正解データ」の集まりです。各データセットアイテムは、一般的に入力 (input) と期待される出力 (expected_output) のペアで構成されます。このデータセットを基準に、モデルの出力がどれだけ優れているかを測定します。
データセットの定義と構成
•
定義: データセットは、入力と期待される出力の集まりであり、アプリケーションをテストするために使用されます。(Datasets - Langfuse)
•
構成: 各データセットアイテムは、入力、期待される出力、およびメタデータを含みます。データセットのアイテムは、入力と期待される出力のペアです。(Dataset Run Comparison View - Langfuse, Datasets v2 - Langfuse)
自分の解釈ではここで正解のデータを設定することでoutputとの比較を行うことができる
データセットの利用目的
データセットは、主に以下の目的で使用されます。
•
アプリケーションのテスト: モデルの出力が期待される出力とどれだけ一致するかを測定し、アプリケーションの品質を評価します。
•
プロンプト実験: 異なるプロンプトやモデル設定が、データセットに対する出力にどのような影響を与えるかを比較・分析します。
•
モデルの評価: 新しいモデルやファインチューニングされたモデルの性能を、既知のデータセットで評価します。
これらの機能により、LangfuseはLLMアプリケーションの継続的な改善と品質管理を支援します。
想定される場面:Langfuseにおけるデータセットの役割と、それがLLMアプリケーションの評価やテストにどのように活用されるかを理解したい場合。特に、評価データの管理やプロンプトエンジニアリングに関心がある開発者向け。
他ツールとの連携
Langfuseの大きな強みは、その高い連携性です。主要なLLM開発フレームワークやツールとシームレスに統合できるため、既存のワークフローに容易に組み込むことができます。
Langflowとの連携例
LangChainベースのノーコードLLM開発ツールであるLangflowとの連携は特に簡単です。環境変数を設定するだけで、Langflowで実行された処理が自動的にLangfuseにトレースデータとして連携されます。これにより、コードを一切書かずにLangflowで構築したLLMアプリケーションの挙動をLangfuseで可視化・分析できます。
連携ステップ:
LangflowのサービスにLangfuseのAPIキーとホストを環境変数として設定します。
Langflowコンテナを起動します。
Langflowで実行されたLLM処理が自動的にLangfuseに連携されます。
連携可能な主なツール
•
LangChain
•
LlamaIndex
•
Langflow
•
Flowise
•
Haystack
•
OpenAI SDK
•
Anthropic SDK
•
Instructor
想定される場面:既存のLLM開発環境やツールとLangfuseを連携させたい場合。特に、Langflowのようなノーコードツールとの連携方法や、Langfuseがサポートする他の主要なLLMツールを知りたい開発者向け。
活用事例とメリット
Langfuseを導入することで、LLMアプリケーションの開発・運用において以下のような具体的なメリットが得られます。
•
デバッグの効率化: 複雑なLLMパイプラインのどこで問題が発生しているのかを視覚的に把握できるため、問題の特定と修正が迅速に行えます。
•
品質モニタリングの強化: LLMの応答品質を継続的に評価し、パフォーマンスの低下や異常を早期に検知できます。これにより、ユーザー体験の向上に繋がります。
•
コストの可視化と最適化: LLMのAPI呼び出しにかかるコストを詳細に追跡し、無駄なコストを削減するための洞察を得られます。
•
パフォーマンスの最適化: 応答時間やトークン使用量などのメトリクスを分析することで、LLMアプリケーション全体のパフォーマンスを向上させるためのボトルネックを特定できます。
•
データセットの構築と再利用: 評価済みのトレースをデータセットとして保存し、モデルの再学習や新しいプロンプトのテストに活用できます。
想定される場面:Langfuseを導入することで具体的にどのような効果が得られるかを知りたい場合。特に、LLMアプリケーションの品質、コスト、パフォーマンス改善に関心があるマネージャーや開発者向け。
Langfuseの凡例について
今回の調査では、Langfuseの凡例(グラフや図の要素が何を表しているかを示す説明)に関する直接的なドキュメントは見つかりませんでした。しかし、LangfuseのWeb UIは直感的であり、各ダッシュボードやトレース詳細画面のグラフや表示要素には、通常、その意味を示すラベルやツールチップが備わっていると考えられます。具体的な凡例の意味を知るには、LangfuseのWeb UIを実際に操作し、各要素にマウスオーバーしたり、関連するドキュメント(FAQやGetting Startedガイドなど)を確認することが最も確実です。
引き続き、凡例に関する情報が見つかれば追記します。
想定される場面:LangfuseのWeb UIの利用を検討しているユーザーが、表示されるグラフや図の要素の意味を理解したい場合。特に、凡例に関する公式ドキュメントが不足している場合の対処法を知りたいユーザー向け。
まとめ
Langfuseは、LLMアプリケーションの透明性を高め、開発から運用までのライフサイクル全体を効率化するための強力なツールです。そのトレーシング機能、Web UI、評価システム(カスタムスコア、APIなしでのスコア表示)、データセット、そして幅広いツール連携により、LLMの挙動を深く理解し、品質とパフォーマンスを継続的に改善することが可能になります。
LLMアプリケーションの検証と運用に課題を感じている方は、ぜひLangfuseの導入を検討してみてください。
想定される場面:Langfuseの主要な利点と、LLM開発におけるその重要性を再確認したい場合。Langfuseの導入を検討している読者への最後のメッセージ。
参考文献
[1] Langfuse - The open-source LLM engineering platform. https://langfuse.com/
[2] Langfuse Docs - Quickstarts. https://langfuse.com/docs/quickstarts
[3] Langfuse Docs - Tracing. https://langfuse.com/docs/tracing
[4] Langfuse Docs - Self-host. https://langfuse.com/docs/deployment/self-host
[5] Langfuse Docs - Architecture. https://langfuse.com/docs/architecture
[6] Langfuse Docs - Tracing. https://langfuse.com/docs/tracing
[7] Langfuse Docs - Self-host with Docker Compose. https://langfuse.com/docs/deployment/self-host#docker-compose
[9] Langfuse Docs - Enterprise. https://langfuse.com/docs/enterprise
[11] Langfuse Docs - Kubernetes. https://langfuse.com/docs/deployment/kubernetes
[12] Langfuse GitHub Repository. https://github.com/langfuse/langfuse
[13] Langfuse Docs - Headless Initialization. https://langfuse.com/docs/deployment/self-host#headless-initialization
[16] Langfuse Docs - Tracing. https://langfuse.com/docs/tracing
[17] Langfuse Python SDK Reference - auth_check. https://langfuse.com/docs/sdk/python/low-level#auth_check
[18] Langfuse Docs - Tags. https://langfuse.com/docs/tracing#tags
[20] Langfuse Docs - Sessions. https://langfuse.com/docs/tracing#sessions
[22] Langfuse Docs - Scores. https://langfuse.com/docs/scores
[23] Langfuse Python SDK Reference - @observe. https://langfuse.com/docs/sdk/python/decorators#observe
[24] Langfuse Docs - Metadata. https://langfuse.com/docs/tracing#metadata
[25] Langfuse Docs - Custom IDs. https://langfuse.com/docs/tracing#custom-ids
[26] Langfuse API Reference. https://langfuse.com/docs/api
[28] Langfuse Docs - Evaluations. https://langfuse.com/docs/evaluations
[29] Langfuse Python SDK Reference - Installation. https://langfuse.com/docs/sdk/python/installation
[30] Langfuse Python SDK Reference - Initialization. https://langfuse.com/docs/sdk/python/initialization
[31] Langfuse Python SDK Reference - get_client. https://langfuse.com/docs/sdk/python/low-level#get_client
[32] Langfuse Docs - LangChain Integration. https://langfuse.com/docs/integrations/langchain
[33] Langfuse Python SDK Reference - LangChain CallbackHandler. https://langfuse.com/docs/sdk/python/integrations/langchain#callbackhandler
[35] Langfuse Docs - LlamaIndex Integration. https://langfuse.com/docs/integrations/llamaindex
[36] OpenInference - LlamaIndex Instrumentation. https://github.com/Arize-ai/openinference/tree/main/python/openinference-instrumentation/src/openinference/instrumentation/llamaindex
[38] Langfuse Docs - Scores. https://langfuse.com/docs/scores
[39] Langfuse Docs - Datasets. https://langfuse.com/docs/datasets
[40] Langfuse Python SDK Reference - create_score. https://langfuse.com/docs/sdk/python/low-level#create_score
[41] Langfuse Python SDK Reference - score. https://langfuse.com/docs/sdk/python/decorators#score
[43] Langfuse Docs - Human Annotation. https://langfuse.com/docs/scores/human-annotation
[46] Langfuse Docs - LLM-as-a-Judge. https://langfuse.com/docs/scores/llm-as-a-judge
[49] Langfuse Docs - Dataset Runs. https://langfuse.com/docs/datasets/runs
[50] Langfuse Python SDK Reference - Datasets. https://langfuse.com/docs/sdk/python/datasets
[52] Ragas - Synthetic Data Generation. https://docs.ragas.io/en/stable/concepts/testset_generation.html
[54] Langfuse Docs - Remote Dataset Runs. https://langfuse.com/docs/datasets/runs#remote-dataset-runs
[55] Langfuse Docs - Create Dataset from Traces. https://langfuse.com/docs/datasets#create-dataset-from-traces
[56] Langfuse Docs - Dataset Run Comparison. https://langfuse.com/docs/datasets/runs#comparison-view
[57] Langfuse Docs - CSV Upload. https://langfuse.com/docs/datasets#csv-upload
[59] Langfuse Docs - Dataset Run Comparison View. https://langfuse.com/changelog/2024-11-18-dataset-runs-comparison-view
[60] Langfuse Docs - Native Dataset Runs. https://langfuse.com/docs/datasets/runs#native-dataset-runs-prompt-experiments
[64] Langfuse Docs - Langflow Integration. https://langfuse.com/docs/integrations/langflow
[68] Langfuse Docs - Integrations. https://langfuse.com/docs/integrations
[75] Langfuse Docs - Cost Management. https://langfuse.com/docs/cost-management