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
としてグループ化することで「このユーザは全体としてどのような会話を行ったのか?」といった分析が可能になる。
langfuse_context
って何?
2. 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日、これまで有料プランでのみ提供していた機能を含む、すべての機能がオープンソース化された。
素晴らしい!
5. ローカルで Langfuse を使いたくないときどうすれば?
開発中はトレーシングを無効にしたいが、本番環境では有効にしたい、というケースは頻繁にある。
LANGFUSE_TRACING_ENABLED=False
を指定するだけで、トレーシング機能を無効化できる。
Discussion