😺

Langfuse の使い始めに引っかかったこと 5 選

に公開

Langfuse を使い始めたときに、特に引っかかった 5 つのポイントをまとめた。

1. "Session" と "Trace" の違いがよく分からない...

まず結論から言うと、最初は Trace だけを意識すれば良い

公式ドキュメントにも「セッションは"オプション"である」と明記されている。

Optionally, traces can be grouped into sessions.
(出典: Langfuse Docs - Tracing Data Model)

Trace は LLM アプリケーションにおける一連の処理のまとまりと考えると分かりやすい。
以下のようなものが Trace に対応する。

  • チャットでのユーザーからの質問とそれに対する LLM の応答(1 ラリー)
  • AI エージェントが、複数のツールを呼び出しながら最終的な答えを生成するまでの一連の流れ

基本的に LLM アプリケーションの処理はある入力に対しある出力を返す関数であり、その一連の流れを記録するための Trace だけで事足りる。

じゃあ Session はいつ使うのか?と言えば、複数の Trace を横断して分析(GUI 上で表示)したいときに使う。

例えば特定ユーザが行った複数回のチャットやり取り(複数の Trace)を一つの Session としてグループ化することで「このユーザは全体としてどのような会話を行ったのか?」といった分析が可能になる。

2. langfuse_context って何?

Langfuse のトレーシングは @observe デコレータを関数に付与することで始まる※。

langfuse_context@observe で包まれた関数内で情報を引き継いでいくための「グローバル変数」 である。
ざっくり理解だと、Goとか他のフレームワークにおける context と似たような役割を担っている。

@observe で包まれた関数内では明示的に langfuse_context を受け渡さなくても参照が可能であり、入れ子になった関数から langfuse_context を通じて Trace の情報を参照できる。
例えばTrace のメタデータを後から更新(update)することも可能で、その場合は後から実行したもので更新されていく。

また langfuse_context.get_current_langchain_handler() を使うことで、現在実行中の Trace に LangChain の処理を加えることができる。
これにより、自前の処理と LangChain の処理をシームレスに一つの Trace として記録できる。

※ 例外として @observe で包まずに LangChain や LangGraph に直接コールバックを渡す場合もある

3. セルフホスト版であればデータは収集されない?安全?

「自前のサーバで動かすんだから Langfuse 社にデータ送られることないっすよね?」問題。

結論として、文献を追う限り、デフォルトでは個人データや機密情報が Langfuse 社に送信されることはない

Langfuse は匿名化された利用統計情報(テレメトリ)を収集しているが、これは簡単に無効化できる。

テレメトリの無効化: Self-Hosted Telemetry

公式の Discord でも、この点について明確な回答がされている。

No personal data touches Langfuse if you self-host (+ opt-out of aggregate telemetry).
(出典: Langfuse Discord)

4. セルフホスト版にも有料プランがあるっぽいけど違いは?

セルフホストだったとしても課金しないと全機能使えないんですよ...と書こうと思っていたが、2025年6月4日、これまで有料プランでのみ提供していた機能を含む、すべての機能がオープンソース化された。
素晴らしい!

参考: Doubling Down on Open Source

5. ローカルで Langfuse を使いたくないときどうすれば?

開発中はトレーシングを無効にしたいが、本番環境では有効にしたい、というケースは頻繁にある。

LANGFUSE_TRACING_ENABLED=False を指定するだけで、トレーシング機能を無効化できる。

参考: Enable/disable tracing

とある通信会社の有志

Discussion