LangfuseでAgentのプロンプトを管理する
Langfuseのプロンプト管理がAgent開発において結構便利だったので、記事にしました。
Langfuseとは
Langfuseは、LLMやAIアプリケーションのモニタリングと分析を提供するプラットフォームです。
要するにいい感じにプロンプトを管理したり、LLMのレスポンスを分析したりできるサービスです。
Langfuseのプロンプト管理
Langfuseではプロンプト管理という機能があり、プロンプトのバージョン管理ができます。プロンプト管理では、画像のようにプロンプトの一覧が表示され、各プロンプトのバージョン履歴や使用されたトレースの数など、確認することができます。
さらに、各プロンプトですが、ディレクトリのようにまとめることも可能で、マルチエージェントやプロジェクトごとに整理することも可能です。
プロンプトの詳細を見てみると、production
ラベルやlatest
ラベルがわかると思います。
本番はproduction
ラベルをつけたバージョンを使い、開発中はlatest
ラベルをつけたバージョンを使うなど、運用ルールを決めておけばそれぞれの環境に応じたプロンプトを簡単に切り替えることができます。
また、プロンプトは変更の差分を確認することができるので、プロンプトのどこを変更したかもわかります。今回だと、「なり」という単語を追加したことがわかります。
ここで使用したプロンプトは、トレースの際にも確認することができます。
プロンプトのバージョンまで確認できるので、どのプロンプトでレスポンスが生成されたのかがわかります。プロンプトを更新したときに実際に反映されているか確認できるため、非常に便利です。
実際に使ってみる
Langfuseのプロンプトは、以下のコードで簡単に使用できます。
from langfuse import Langfuse
prompt_name = "test"
langfuse = Langfuse()
prompt = langfuse.get_prompt(prompt_name)
# 環境によってラベルを切り替え
prompt = langfuse.get_prompt(prompt_name, label="production")
prompt = langfuse.get_prompt(prompt_name, label="latest")
使用するプロンプトがディレクトリ構成の場合は、以下のように記載する必要があります。
prompt_name = "dir1/dir2/test"
prompt = langfuse.get_prompt(prompt_name)
このプロンプト管理機能を使って、ADK(Google Agent Development Kit)で作成したAgentのinstructions
を管理してみました。
from google.adk.agents import Agent
from langfuse import Langfuse
# 実際の運用では環境変数から取得することを推奨します
LANGFUSE_PUBLIC_KEY = "<YOUR_PUBLIC_KEY>"
LANGFUSE_SECRET_KEY = "<YOUR_SECRET_KEY>"
LANGFUSE_HOST = "<YOUR_HOST>"
langfuse = Langfuse(
public_key=LANGFUSE_PUBLIC_KEY,
secret_key=LANGFUSE_SECRET_KEY,
host=LANGFUSE_HOST
)
prompt_name = "test"
prompt = langfuse.get_prompt(prompt_name)
root_agent = Agent(
name="agent_test",
model="gemini-2.0-flash",
instruction=prompt.prompt
)
Langfuseのプロンプトでは、「語尾をナリにしてください。」という指示を追加しました。
適用されているか確認してみましょう。
きちんと語尾がナリになっていますね。
このように、Langfuseのプロンプト管理を使うことで、Agentのプロンプトを簡単にバージョン管理できるようになります。
Langfuseのプロンプト管理のメリット
プロンプトをLangfuseで管理すると、以下のようなメリットがあります。
デプロイ不要でプロンプトを更新できる
コードで管理していると、プロンプトを変更するたびに再デプロイが必要になります。Langfuseで管理すれば、デプロイなしでプロンプトを更新できるため、開発効率が大幅に向上します。特に、プロンプトのチューニングを繰り返す際に、この手軽さは非常に便利だと思います。
環境ごとのプロンプト切り替えが簡単
本番環境にはproduction
ラベル、開発環境にはlatest
ラベルをつけることで、環境に応じたプロンプトの切り替えが簡単になります。開発時にうまくいったプロンプトにproduction
ラベルをつけるだけで本番環境に適用されます。
逆に、本番でうまくいかない場合も、ラベルを戻すだけで即座にロールバックできるため、運用リスクを最小限に抑えられます。
チーム全体でプロンプトを改善できる
Langfuseの画面からプロンプトを編集できるため、非エンジニアのメンバーもプロンプトのチューニングに参加できます。これにより、ドメイン知識を持つメンバーが直接プロンプトを改善できるようになり、チーム全体での開発スピードが向上します。
簡単にA/Bテストができる
ドキュメントに記載されていますが、Langfuseを使用すると簡単にA/Bテストを実施できます。異なるプロンプトのラベルを作成し、下記のようなコードで指定するだけで、A/Bテストが可能です。
# Fetch prompt versions
prompt_a = langfuse.get_prompt("my-prompt-name", label="prod-a")
prompt_b = langfuse.get_prompt("my-prompt-name", label="prod-b")
# Randomly select version
selected_prompt = random.choice([prompt_a, prompt_b])
実際はrandom.choice
を使用しているだけなので、weights=[70, 30]
のように重み付けなども自由に実装可能です。自分の好きなようにチューニングしてみてください。
まとめ
Langfuseでプロンプトを管理することで、非エンジニアでもAgentの検証がしやすくなりました。
差分も確認できるので、プロンプト変更の履歴もわかりやすく、個人的におすすめです。
Discussion