LangChainから使用するLangSmithとLangfuseの詳細比較
はじめに
この記事で想定している読者の方
- LangChain経由でLLMを用いたchainを使用している方
- LangChainと共に使用するLLM実験管理ツールを迷っている方
「LangChain」はLLMをシステムに組み込む際に非常に便利なライブラリであり, 実際に開発に用いられている方も多いと思います。ですが, LLMの性質上プロンプトやchainの構造を変化させての実験が多くなってしまい, 記録・管理が大変になりがちです。そんな場合に使用したいLLMの実験管理ツールについて前編の記事にてLangChainから使用するために選定したLangSmithとLangfuseについて今回は実装を行った上で比較して行こうと思います!
TL;DR
今回は以下の画像のデモアプリを作成し3種類のchainについて実際に記録しLangSmithとLangfuseの比較を行いました!
デモアプリの入力画面
デモアプリの出力確認画面(LangSmith)
デモアプリの出力確認画面(Langfuse)
結論として簡単なおすすめは以下の通りです。
- セルフホストで使用したい場合 : Langfuse
- クラウドで1人で使用する, または金額よりも性能を重視したい : LangSmith
- クラウドで複数人で使用する, または性能よりも金額を重視したい : Langfuse
- クラウドで複数人使用し性能も重視したい... : この後の詳細比較をご覧ください!
調査による比較
まずLangSmithとLangfuseについて調査を行い, その相違点を以下の表にまとめました。
表中に※で記した, 説明が必要な各要素については以下の通りです。
-
フルマネージドorセルフホスト
LangSmithについてはセルフホストも可能ですが, Enterpriseプラン(最上位プラン)に加入しないと使用できないため記載上はフルマネージドのみとして記載しています。 -
ドキュメント量
LangSmithはLangChain公式の実験管理ツールということもあってLangChainのトレースに関する公式ドキュメント量は非常に多いです。一方で, Langfuseについては非公式のツールではありますが, LangChainのトレースに関する公式ドキュメントも十分に存在します。 -
有料プランの価格
どちらのツールも無料で使用することができますが, 有料プランに加入することもできます。有料プランに加入すると, トレース数の保管上限が増えたりする以外にも大人数での共同開発が可能になります。両ツールの有料プランの一覧は以下の通りです。-
Langsmith
- Plus : 39$/人月, 10人までの共同開発・各種性能の拡張
- Enterprise : 価格は要相談, 11人以上の共同開発・各種性能のさらなる拡張
-
Langfuse
- Pro : 59$/月, 無制限の人数とプロジェクト・各種性能の拡張
- Team : 値段は要相談(499$/月~), 無制限の人数とプロジェクト・各種性能さらなる拡張
-
-
トレース上限
それぞれのトレース数の上限についての詳細は以下の通りです。LangSmithは月あたりで細かく上限が決まっている一方でLangfuseは全体としての上限が大きく設定されています。-
LangSmith
1月あたりの上限数が決まっており, これを越した分はプランとは別で有料となる。その際の値段は14日間保存のトレースは0.5$/1kトレース, 400日間保存するトレースの場合は5$/1kトレース。 -
Langfuse
無料プランでは全体でトレースできる最大値が50,000件に決まっておりそれ以降の拡張は有料プランにアップグレードする必要がある。有料プランでは100,0000件を超えた分は追加で10$/100,0000トレースで拡張が可能。
-
LangSmith
-
トレース保持期間
それぞれのトレースの保持期間についての詳細は以下の通りです。-
LangSmith
有料プラン, 無料プランともにトレースごとに14日か400日かの保存期間を選択できます。上記の通り, トレース上限内のトレースに対してはどちらを選択しても値段は変わりませんが追加分に関しては価格が変化します。 -
Langfuse
有料プランと無料プランで保存できる日数が単純に異なります。
-
LangSmith
実験による比較
GitHubリポジトリ上のデモアプリを用いてLangSmithとLangfuseのより詳細なchainごとの機能比較を行います。この比較では主にchainの種類や構造をデモアプリ上で変えながら両者の記録を確認し, 確認できた特徴を最後に表にまとめます。
LangSmithのみの環境構築
- 公式サイトにてLangsmithのアカウントを作成しAPIキーを発行する
- 記録の管理に用いるプロジェクト名やAPIキーなどを以下の形式で環境変数に埋め込む
LANGCHAIN_TRACING_V2=true
LANGCHAIN_ENDPOINT=https://api.smith.langchain.com
LANGCHAIN_API_KEY=***(1で発行したAPIキー)
LANGCHAIN_PROJECT=***(任意のid)
- 以下のコードをトレースしたいchain呼び出しの前に置く
from langsmith import Client
client = Client()
Langfuseのみの環境構築
- Langfuseの公式サイトにてアカウントを作成する。
- プロジェクトを適当な名前で作成し, APIキー(secretとpublicの2種類)を発行しHOST NAME確認する。その後それらの情報を以下の形式で環境変数に埋め込む。
LANGFUSE_SECRET_KEY=***
LANGFUSE_PUBLIC_KEY=***
LANGFUSE_HOST=***
- 以下のコードによってコールバックハンドラーを作成し記録したいLLMチェインに組み込む
from langfuse.callback import CallbackHandler
callback_handler = CallbackHandler(
public_key=os.environ["LANGFUSE_PUBLIC_KEY"],
secret_key=os.environ["LANGFUSE_SECRET_KEY"],
host=os.environ["LANGFUSE_HOST"],
session_id=str(uuid4())[:8]
)
RAGの簡単な要約chain
このchainでは類似度検索した文書を一括でLLMに渡して回答を生成してもらうstuff chainを用いて質問応答を実装しています。この際の記録はLangSmith, Langfuse両方で以下の通りとなりました。
-
LangSmithの記録結果
-
Langfuseの記録結果
以上の記録結果を比較してみると, まずどちらのツールも調査通りにレイテンシ(青いブロック)とコスト計算(赤いブロック)ができていることが見て取れます。一方で, 相違点としてLangSmithでは「stuff_document_chain」のトレース前に「Retriever」のトレース(緑色の枠)ができている点が挙げられます。これは, LLM呼び出しには直接関係しないベクトルDBから関連する文書を取得するオブジェクトですが, LangChainのオブジェクトではあるため公式のLangSmithでは記録ができています。このトレースでは, 取得された文書を確認できることに加えてソースとなった文書(ローカルでのファイルパス)も確認できます。
RAGの複雑な質問応答chain
このchainでは類似度検索した文書を複数回にわたって再起的にLLMに渡して回答を生成するrefine chainを用いて質問応答を実装しました。この際の記録はLangSmith, Langfuse両方で以下の通りとなりました。
-
LangSmithの記録結果
-
Langfuseの記録結果
今回はLangSmith側でも詳細画面を開いた状態の写真となっていますが, 比較してみると図中の緑色のブロック内にてどちらのツールも1つのchain内部での複数回のLLM呼び出しを1つずつトレースできていることが見て取れます。また, どちらも3回呼び出されるchainと内部のLLMによる生成を別に記録しており, 前述したRetrieverオブジェクトの記録を除くとかなり似通った記録画面構成となっていることがわかると思います。
LLMエージェント
最後にLLMエージェントについて実験を行いました。このエージェントはweb検索と上記の2つでも使用されていたRetrieverの2つをツールとして使用することができます。今回は「今日の東京の天気を検索して教えて」というクエリを用いてweb検索のツールを使用した場合の以下2つの記録を比較します。
-
LangSmithの記録結果
-
Langfuseの記録結果
以上のトレースを比較するとどちらもかなり複雑なトレースになっていることが見て取れるかと思います。この原因としてはエージェントの動作として
- 「どのツールをどのように使うかLLMに決めてもらう」
- 「ツールを使う」
- 「結果をLLMに解釈してもらう」
の3ステップについてそれぞれフォーマットの整形などの処理が挟まることが挙げられます。そのような複雑なトレースであることを念頭においてそれぞれのトレース(緑色のブロック)を比較すると,
- LangSmithのトレースでは色分けの種類が多くLLMの動作なのかツールの動作なのかが分かりやすく, 全体としても短くトレースがまとまっている
- Langfuseのトレースでは, LLMの生成にのみ色がついておりその他の動作の種別判断が若干難しくなってしまっている・トレースが長く見切れてしまっている
といった特徴が見て取れます。
以上の実験による比較を通して, 両者の機能としての比較は以下の表の通りにまとめられます。
※UIの見やすさに関しては個人差があると思いますが, 個人的には情報がコンパクトがまとまっており, 必要な情報を選択して拡大できるLangSmithの使用感が良いように感じました。
比較の結論
以上の調査と実験によるLangSmithとLangfuseの比較を通して, 両者には以下の短所と長所があるということがわかりました。
-
LangSmith
- (長所) : 公式ツールなのでLLM呼び出し以外のLangChainオブジェクトのトレースも正確にできる。無料分トレースの保存期間が長い。
- (短所) : 2人以上で共有すると有料かつ, 10人以上でさらに値上がりする。
-
Langfuse
- (長所) : 3人まで無料で共有できる。セルフホストが可能で無料分トレースの量が多い。
- (短所) : トレースが一部見にくい, LLM呼び出し以外のトレースはできない。
おわりに
今回は, LangChainから使用するLLMの実験管理ツールについてLangSmithとLangfuseについて調査とデモアプリを通した実験で比較を行いました。どちらのツールも正確にトレースができ非常に扱いやすいですが, 一方でいくつかの違いがあることがわかっていただけたら幸いです。また, この記事は後編です。LangSmithとLangfuseについてその他の実験管理ツールから選定を行なった前編についてもぜひご覧ください!
少し長くなってしまいましたが, 最後までお読みいただきありがとうございました!
Discussion