top of page

Langfuseによるプロンプト管理 (前半) - 基本 & 管理編

執筆者の写真: KAMON NobuchikaKAMON Nobuchika

更新日:3月8日


[前回の記事] では、プロンプト管理の重要性にくわえて、コード埋め込みやGit または データベースによる管理の課題について解説しました。今回は、それらの問題を解決すべく「Langfuse」を活用したプロンプト管理の方法を具体的に解説します。


Langfuseとは?:LLMの開発と運用に特化したオープンプラットフォーム


Langfuseは、生成AIアプリケーションの開発や運用に特化したオープンソースのプラットフォームです。可視化やテストなど生成AIアプリケーションのライフサイクル全体を管理するものですが、今回は特にプロンプト管理に焦点を当ててご紹介をしていきます。


Langfuseによるプロンプト管理の主な特徴は以下のとおりです。


  • 使いやすいUI: 直感的なインターフェースで、プロンプトの作成、編集、比較、テストが容易に行えます。

  • バージョン管理: 変更履歴を自動的に記録し、過去のバージョンとの比較やコピー、修正などが簡単に行えます。

  • 詳細な分析: プロンプトのパフォーマンス(応答時間、コスト、品質スコアなど)を詳細に分析し、改善点を見つけやすくします。

  • 柔軟な評価: LLM as a judge などによる自動評価指標に加えて、人間による評価 (Human Annotation) も組み合わせて、多角的にプロンプトを評価できます。

  • チームでの共有: プロンプトをチーム内で共有し、共同で作業できます。


実践!Langfuseによるプロンプト管理の具体的なステップ


  1. 前提: Prompt はLangfuse から取ってくる


Langfuseを使うと、プロンプト管理はどのように変わるのでしょうか?

まず前提としてアプリケーションコードに埋め込む形とは異なり、Prompt 本体はLangfuse に格納され、それをプログラム側から fetch する形となります。



アプリケーションはLangfuse に格納されているPrompt を取りに行き、適切なものを入手します。なお本番運用した際に都度取得をする必要は必ずしも無いので、TTL を設定してキャッシュする運用が現実的だと思います (デフォルト60 sec、0で即時反映)。


以下はPython のコード例です。極めてシンプルな実装が可能です。

この場合、wweという名前で管理されているPrompt をfetch してきます。


from langfuse import Langfuse
 
# Initialize Langfuse client
langfuse = Langfuse()
 
prompt = langfuse.get_prompt("wwe")

TTLを設定する場合や、特定のラベルのPrompt を取得したい場合は以下のようになります。ラベルについては後述します。


# TTL を 300に指定
prompt = langfuse.get_prompt("wwe", cache_ttl_seconds=300)

# the-rock-is-cooking というラベルの Promptを取得
prompt = langfuse.get_prompt("wwe", label="the-rock-is-cooking")

その他のオプションや記述例はLangfuse の公式ドキュメントに豊富な例が用意されていますので、参考にしてみてください。



余談ですが、同サイトの右上にある Search 欄から、Ask AI (Cmd + k) で日本語で質問することも可能です。日本語でも精度が高いので、ぜひ使ってみてください。




さてこれから、実際のプロンプト管理を見ていきましょう。


  1. Prompt の作成とバージョン管理


LangfuseのUI上では、直感的にプロンプトを直接作成・編集できます。

変更を加えるたびに、自動的に新しいバージョンが作成され、変更履歴が記録されます。


以下は プロンプト管理画面のサンプルです。



これは toyidea という名前のプロンプトで、右側で各バージョンを確認することができます。現在、Production に適用されているのは Version 2 のプロンプトです。

また、latest ラベルがついている Version 3 にはコメントがついており、"独自アイディアの追加プロンプト試行" とコメントがついています。併せて作業者もそれぞれ情報として付加されており、いつ誰が何のためにバージョンを変えたのかも非常に分かりやすくなっています。


ラベルについては最新のものには自動で latest がつきますが、この画像のように自分で任意の名前をつけ、前述のサンプルのように指定したものを fetch することもできます。



Version 間での詳細を比較したい場合には、GUI 上でDiff をすることもできます。相違部分がハイライトされおり、一目で差異が分かります。



またPrompt にはConfig として、以下のように任意の情報を持たせておくことができます。モデル名, Temperature などをPrompt と一緒に取得することで、管理を一元化し、結果の整合性を維持することが期待されます。



例えばPrompt はLangfuse から持ってきても、コードの中で別のモデルを指定していると、テストしておいた結果と実際の結果は異なってしまいますが、管理をまとめることでそのような問題を防ぐことができ、コード自体もシンプルになります。


作成したプロンプト活用して、別のアプリケーションなどのために新たなプロンプトを作りたいこともあるでしょう。その際には、Duplicate 機能で任意のVersion だけ あるいはすべてのバージョンを含んでコピーを作ることができます。新たに Prompt を作る際に、どこからか Copy and Paste したり、新規で書く必要はありません。過去に作られている資産を使って作業を効率化することが可能なのです。



まとめ:Langfuseで簡単だけど効果的な プロンプト管理


他にも便利な機能がありますが、それらの紹介は別の機会に譲るとして、今回は一旦ここまでとしたいと思います。見ていただいた通り、Git でのオペレーションもSQL も不要かつ、非常に効果的な管理ができます。


本記事では、プロンプト管理の前提としてLangfuse で管理をする構成やどのように管理をされるのかという点について、いくつかの主要機能について説明をしていきました。

ぜひ参考にしていただき、プロンプトをハードコードする構成ではなく、LLM Ops を実現される一助になれば幸いです。


次回は Langfuse における実際のプロンプトの開発と評価について紹介します。

管理に加えて非常に有意義な機能を簡単に使うことができますので、ぜひご覧ください。


 
 
 

Comentarios


bottom of page