🍊

Langfuse って何?とりあえずトレースだけやってみたメモ

に公開

環境情報:
OS:macOS Sequoia 15.6.1
Python:3.13.5

langfuse?

https://langfuse.com/docs
LLMやエージェントのプロンプト、レスポンス、ツール実行、レイテンシ、コスト
といった実行ログをLangfuseに送ってあとから見返したり、比較したり、評価したりできるようにするツール、という理解です
※↑ってここで書いてますが、執筆時点ではわかっていませんでしたw

langfuseの環境

クラウド(私、こっちでやりました

https://cloud.langfuse.com/auth/sign-up
サインアップ後、Langfuseの管理画面に入れます

docker

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

で、dockerコンテナが起動したら

http://localhost:3000
↑で、アクセスできます、楽ちん!

langfuseを使ってみる

Organizations(組織)を作成


今回は「batton-pj」というOrganizations(組織)を作成します

Projectを作成


Organizationsを作成したら画面右上に「New project」から作成します
今回は「test-general」とします

APIキーを作成しよう!

これ、最初なんだ?って思いました
LLMのAPIキー?え、違うの?
あ、私の実行ログをlangfuseに送るのか!
「LLM/エージェントの実行トレース(プロンプト・レスポンス・ツール・レイテンシ・コスト)を langfuseに送信する」ってことね
※ここでちょっとだけ理解w
 LLMやエージェントの実行を観測・記録・評価するためのプラットフォームなんだな〜って



Projectを作り終えるとProject Settings画面に遷移します
ここからCreate new API keysから作成します
※作成完了後、Secret KeyとPublic Keyと.envの内容をコピってメモしておきましょう!

何ができるの?・・・とりあえず、トレースしてみよ

https://langfuse.com/docs/observability/get-started

STEP1. Langfuseプロジェクト&APIキー準備

準備済み

STEP2. ローカル環境にSDKを入れる

お好きなディレクトリに移動

python3 -m venv .venv # 仮想環境設定
source ./.venv/bin/activate # 仮想環境構築
pip install langfuse openai python-dotenv # 必要なモジュールをインストール

STEP3. .envを作成

touch .env
vi .env

LANGFUSE_SECRET_KEY="sk-lf-..."
LANGFUSE_PUBLIC_KEY="pk-lf-..."
LANGFUSE_BASE_URL="https://us.cloud.langfuse.com"
LOCAL_LLM_API_KEY="sk-..."

STEP4. コード作成

※今回はOpenAI互換のAPIのローカルLLMをトレースしてみおうと思います
 OpenAIのAPI発行についてはChatGPTに相談するとすぐでしたw


コマンド:
touch app.py
vi app.py

コード:
# app.py
import os
from dotenv import load_dotenv
from langfuse.openai import OpenAI

load_dotenv()

client = OpenAI(
    api_key=os.environ["LOCAL_LLM_API_KEY"],
)

def main():
    resp = client.chat.completions.create(
        model="gpt-4o-mini",  # 好きなモデル
        messages=[
            {"role": "user", "content": "Langfuse経由でのテストです。自己紹介して。"},
        ],
        name="openai-langfuse-test",
        metadata={"env": "local", "feature": "batton-pj"},
    )
    print(resp.choices[0].message.content)

if __name__ == "__main__":
    # .env読めてるかチェック
    print("LANGFUSE_PUBLIC_KEY =", os.environ.get("LANGFUSE_PUBLIC_KEY"))
    main()

STEP6. 実行!(この瞬間が一番好き!、エラー何なるか!(9割)

ターミナルで以下を実行
python3 app.py

実行結果:
LANGFUSE_PUBLIC_KEY = pk-...
こんにちは!私はAIアシスタントで、さまざまな質問に答えたり、情報を提供したりするために設計されています。多くのトピックについて知識がありますので、何か聞きたいことがあればお気軽にどうぞ!あなたのサポートができることを楽しみにしています。

お!動いたw
一発でうまくいくのってちょっと、逆に疑いがw

STEP7. langfuseでトレースできてるか?

できてた(Good

なるほど!

※id系が映ってしまわないように気を使うとスクショがそっか?ってなる位しょぼいデータしかないのは察してくださいw

とりあえずトレースして、見て、比較していこうと思います!
またタイミングがあればA/Bテストとかもできるそうなのでやってみたいと思います!

Discussion