😎

Langfuseに入門しないか? ~ローカルホストで使ってみよう~

に公開

今回からLangfuseも取り扱っていこうと思います。Langfuseを利用することで、LLMの挙動をトレースすることができます。

Langfuseとは?

Langfuseは、オープンソースのLLMエンジニアリングプラットフォームです。チームがLLMアプリケーションを共同でデバッグや分析、反復開発するのを支援してくれます。また、プラットフォームのすべての機能はネイティブに統合されており、開発ワークフローを加速します。Langfuseはオープンで、セルフホスト可能、そして拡張性に優れています。

https://langfuse.com/docs

主なインテグレーションについては以下にまとめられていますが、LangChainやLlamaIndex、LiteLLMをはじめBedrockやLangflowとの連携など、多数の機能と連携することができます。

https://github.com/langfuse/langfuse

LangSmithとの違いは?

こちらで述べられている違いをまとめてみます。

  • LangfuseはオープンソースだがLangSmithはクローズドソースプロジェクト
  • LangSmithはLangChainチームによって開発されており、LangChainフレームワークとの統合性に優れている。一方、LangfuseもLangchainとの統合を維持しているが、LangchainとLanggraphフレームワークのみを使用して開発する予定であれば、LangSmithを選択する方が適しているとのこと。LangChainチームの最近のレポートによると、LangSmithユーザー全体のうち、84.3%がLangchainフレームワークを使用し、84.7%がPythonを使用しているらしい
  • Langfuseは多くのフレームワークやライブラリとの統合を多数維持
  • Langfuseは無料でセルフホスティングできるが、LangSmithをセルフホスティングするには購入が必要

LangfuseはLangSmithやLangchainとは独立しています。LangfuseはLangchainフレームワークと統合されていますが、開発組織織は別であり、関連性はないとのことです。LangfuseとLangSmithは同じ分野で活動しており、開発者がLLMアプリケーションを改善し、反復開発できるよう支援しているという意味では同じような役割を担っています。

完全にLangChainエコシステムで活動している場合はLangSmithでいいでしょうし、LlamaIndexなどさまざまなフレームワークの組み合わせであればLangfuseも選択肢でしょう。また、料金プランなども異なっているんで、多方面での比較が必要です。以下の記事がまとまっていていいと思い共有させていただきます(Fujiwara様とても参考になりました)。

https://zenn.dev/aidemy/articles/13ceca39b0ea6c

使ってみる

今回はLangfluseをローカルホストしてみます。なお、モデルとしてOpenAIのモデルを利用するのでAPIキーを用意してください。

サーバの建て方

公式GitHubをcloneし、docker compose upを実行するとサーバを立てることができます。

git clone https://github.com/langfuse/langfuse
cd langfuse
docker compose up

起動したらlocalhost:3000にアクセスするとログインが求められます。サインアップしてもらい組織の設定をすると利用可能状態になります。トップ画面に行くと以下のよ画面に行くと以下のような画面が表示されます。

次に、サイドバーからSettingsAPI KeysからAPIキーを作成してください。パブリックキーとシークレットキーが発行されます。

APIキーを取得できたら、.envファイルに以下の内容を記載します。

LANGFUSE_SECRET_KEY="sk-..."
LANGFUSE_PUBLIC_KEY="pk-..."
LANGFUSE_BASE_URL="http://localhost:3000"
OPENAI_API_KEY="..."

チャットのやり取りを記録する

それではチャットのやり取りを記録してみましょう。まずはPython環境を構築します。langfuseをインストールします。

uv init langfuse_quickstart -p 3.12
cd langfuse_quickstart
uv add langfuse python-dotenv

次にOpenAモデルにアクセスするコードを書きます。ポイントとしては、langfuse.openaiからOpenAIモデルを利用することにより、自動的にLangfuseに記録が送信されます。

chat.py
from dotenv import load_dotenv

load_dotenv()

from langfuse.openai import openai

completion = openai.chat.completions.create(
  name="test-chat",
  model="gpt-4o",
  messages=[
      {"role": "system", "content": "You are a very accurate calculator. You output only the result of the calculation."},
      {"role": "user", "content": "1 + 1 = "}],
  metadata={"someMetadataKey": "someValue"},
)

OpenAIのモデルを使う時はopenaiライブラリを使うことが多いですが、今回はlangfuse.openaiでモデルを利用し、モデルはgpt-4oを指定しています。

それでは早速このコードを実行してみましょう。

uv run chat.py

実行してからlocalhost:3000にアクセスしTracingを確認すると以下のようにtest-chatという名前でログが作成されています。

その中からtest-chatをクリックすると以下のように詳細なトレース記録が取られています。結果を見ると入出力はもちろんですがテレメトリの取得方法なども詳細に記録されています。

まとめ

今回はLangfuseの紹介とローカルホストで簡単なチャットを記録させてみました。今回はとてもシンプルなものでしたが、次回以降はエージェントのトレースなどをしていく予定です!

Discussion