LangChainと共に使用できるLLM実験ツールの比較
はじめに
この記事で想定している読者の方
- LangChain経由でLLMを用いたchainを使用している方
- LangChainを用いた開発で実験の管理に悩んでいる方
「LangChain」はLLMをシステムに組み込む際に非常に便利なライブラリであり, 実際に開発に用いられている方も多いと思います。一方で, LangChainを用いた開発はLLMの性質上プロンプトやchainの構造などを変化させた実験が多くなり, その管理は非常に大変です。
そんな時に便利なLLMの実験管理ツールについて今回はLangChainから使用することを想定し, それぞれのツールの性質について比較を行なっていきたいと思います!
TL;DR
LangChainから使用することを考えると実験管理ツールは以下のLangSmith・Langfuseが良さそうです! それぞれのツールの強みは以下の通りです。
-
LangSmith
- 公式ツールでありLangChainとの相性が非常にいい
- chainに何も追加しなくてもトレースをできる
-
Langfuse
- 公式ツールではないものの, 多くのchainに対して安定したトレースができる
- コールバックを利用することでchainに無理なくトレースを組み込める
LangChainから使用できる主なLLM実験管理ツールについて
今回はよく名前を聞くLLMの実験管理ツールである以下の4つについて, 概要とLangChainから使用する際の複数のポイントについてまとめて行きます。
- LangSmith
- Langfuse
- PromptLayer
- promptfoo
各実験管理ツールのざっくり比較
以上の各実験管理ツールについて比較を行なった結果を以下の表にまとめました!
説明が必要な各要素については以下の通りです。
-
LangChainとの相性
以下の基準を用いて評価を行いました- 相性が悪く一部のchainなどについてトレースができない場合×
- トレースは可能だがその方法が一部LangChainのユースケースに噛み合わない場合△
- 問題無くどのchainに対しても実装を妨げない方式でトレースが可能な場合⚪︎
-
フルマネージドorセルフホスト
- LangSmithについてはセルフホストも可能ですが, Enterpriseプラン(最上位プラン)に加入しないと使用できないため記載上はフルマネージドのみとして記載しています。
- promptfooについてはパッケージがローカルで起動して記録を行うためサーバの構築などは必要ないものの, セルフホストの表記としています。
-
使用可能言語
prompt fooについては以下の2種類の形式のため「言語に依存しない」と記載しています。- 専用のcongfigdファイルに独自の記述方法で実験を記載する
- プログラム中のLLM呼び出しを実験したい場合はそのプログラムを指定し外部から実行する
-
Google Trends 相対人気度
Google Trendsの機能を用いて相対的な人気度を調査しました。人気度の推移は以下のグラフの通りとなっており, 表中には執筆時点で最新となる6月2日~6月8日の数値を記載しました。
LLM実験管理ツール全体として人気度が上昇していることが見て取れますが, 特にLangSmithは長い間最も注目されているツールであり, 次いでLangfuseが注目されていることがわかります。 -
記録方法
それぞれの具体的な方法は以下の通りです- インスタンス作成 : LLM呼び出し前にツールのインスタンスを作成する
- コールバック作成&組み込み : ツール専用のコールバックを作成し, chainを作成する際と実行する際に組み込む
- プログラム作成&外部実行 : コマンドライン引数としてプロンプトを受け取り, トレースしたいchainを用いて実行するPythonファイルを作成する。その後, ツールから事前に定義したテストケースを用いて実行する
各ツールの詳細比較
以上でざっくり比較を行なった各ツールについて詳細な情報を以下にまとめました!
LangSmithについて
LangSmithはLangChain社が公式で開発しているLLMの実験管理ツールであり, LangChainを用いたLLMの実験を非常に簡単に行うことができます。また, 使用する際にはフルマネージド版とセルフホスト版を選択することができ, 以下の2つの特長が主に挙げられます。
-
トレースが非常に簡単かつ安定
LangChain公式であるため, そのオブジェクトへのトレースは非常に簡単かつ安定しています。具体的にトレースは環境変数への複数埋め込みとclient=Client()
の1行をchain実行前に配置するのみで完了します。また, LangChainには数多くのchainの構造が定義されていますが, その多くについて安定したトレースを行うことができます。(詳細は後編をご参照ください。) -
公式ツールであるためドキュメント量が非常に豊富
同様に公式ツールであるため, LangChainを用いた場合のトレースについての公式ドキュメントが非常に豊富です。また, 非公式の記事などについてもLangChainと共にLangSmithを用いている記事が多い印象です。
Langfuseについて
LangfuseはPython・JavaScriptで使用できるライブラリであり, OpenAI SDKやLangChain・Llama-indexなどの複数の環境でのLLM呼び出しをトレースすることができます。また, 使用する際にはフルマネージド版とセルフホスト版を選択することができ, 以下の特長が主に挙げられます。
-
LangChain(v2.0.x)に対しての記録も安定
LangChain(v2.0.1)に対してもLangfuse公式に記載されている手法を用いて, 複数構造のchainのトレースを記録をできることが確認できます。また, LangChainにおいて以降が進んでいるlegacyなchainと新しいLCELを用いたchainのどちらに対しても正常なトレースを行えます。(こちらも詳細は後編をご参照ください。) -
LangChainでの使用に対する公式ドキュメントが十分
Langfuseの公式ページにおけるLangChainへのトレース方法を記載したドキュメントの量が十分に多いです。具体的にPython・JavaScriptでの使用に加えてLangServeやバージョン管理についてまで記載されています。
PromptLayerについて
PromptLayerはPython・JavaScriptで使用できるライブラリであり, OpenAIのAPIなどをラップしたオブジェクトを呼び出すことでそのLLM呼び出しの内容を記録することができるフルマネージドのLLM実験管理ツールです。実際に直接LLMのAPIを呼び出す際は非常に便利なのですが, LangChainから使用することを考えると以下の2つの不安要素が存在します。
-
LangChain(v2.0.x)との相性が悪く記録が不安定
LangChain(v2.0.1)の複数のChainに対する記録を行おうとした際に, PromptLayerの公式に示されているCallBacksを用いる方式(リンク)を用いた場合も, 複数のchainに対してエラーが出てしまい記録ができない現象が確認されます。 -
LangChainでの使用に対する公式ドキュメント不足
LangChainに対するPromptLayer公式でのドキュメントが少ない傾向が見られます。公式にプログラム例として記されている内容もLangChainのv2.0.xではDeprecationWarningが出てしまうものが多く, 今後のアップデートを待つ方が良いのではないかと考えられます。
promptfooについて
promptfooはプログラムの内部から呼び出すのではなく, 専用のconfigファイルにLLM呼び出しの条件などを書いて実行するプログラミング言語に依存しないセルフホストのLLM実験管理パッケージです。一度に複数の実験を実行できたり, 結果をコマンドライン上で確認できたりする点が特徴であり, 以下の2つのポイントが存在します。
-
LangChainに対する記録の方法が特殊
LangChainを経由したLLM呼び出しを記録する際はそのChainを呼び出すだけのpythonファイルを記述し, 実行時のコマンドライン引数としてchainへの入力を定義する必要があります。(公式のチュートリアルより) この記録方法に関して, テストケースを記述しておいて1度に実行する方式でのトレースを望む場合は問題ないのですが, LangChainのユースケースとして想定されるchatアプリでの実験をトレースする場合などには対応することができません。この点が他のツールの記録手法とは大きく異なります。 -
環境構築が必要な可能性がある
他のツールはpython環境でインストールできますが、promptfooを使用する際にはnode.js環境が必要です。そのためLangChainをPythonから使用している場合は、追加の環境構築が必要となってしまいます。
おわりに
今回は, LangChainから使用するLLMの実験管理ツールについて4つの候補の比較を行いました。結果として上の表を見ていただくと, LangSmithとLangfuseがLangChainとの相性・公式ドキュメント数の2点で非常に優れていることがお分かりいただけると思います。一方で, 今回はLangChainからの使用に限定して調査を行いましたがどのツールにもオリジナルの強みがありますので是非みなさんもお手元で動かしてみてください!
次回はこの記事にて選定したLangSmithとLangfuseについてより詳しい比較を実装と実験を交えながら行おうと思います。こちらの後編の記事も是非ご覧ください!
Discussion