Closed7

Pydanticのオブザーバビリティプラットフォーム「Logfire」を試す

kun432kun432

以下でPydanticAIを試している中で出てきた。

https://zenn.dev/kun432/scraps/83e7570920a802

公式サイト
https://pydantic.dev/

GitHubレポジトリ

https://github.com/pydantic/logfire

Pydantic Logfire — 簡単な観測性

Pydanticを手掛けたチームが提供するLogfireは、私たちのオープンソースライブラリと同じ信念に基づいて構築された観測性プラットフォームです。それは、「最も強力なツールは使いやすい」という考え方です。

Logfireの特徴:

  • シンプルかつ強力
    Logfireのダッシュボードは、その提供する強力な機能に比してシンプルに設計されており、エンジニアリングチーム全員が実際に利用できるようにしています。
  • Python中心のインサイト
    Pythonオブジェクトのリッチな表示、イベントループのテレメトリ、Pythonコードやデータベースクエリのプロファイリングなど、LogfireはPythonアプリケーションの挙動を徹底的に可視化します。
  • SQL対応
    標準的なSQLを使用してデータをクエリ可能です。多くのエンジニアにとって新しい学習は不要で、既存のBIツールやデータベースクエリライブラリでデータを扱うことも可能です。
  • OpenTelemetry
    Logfireは、OpenTelemetryをラップする独自の設計を採用しており、一般的なPythonパッケージ用の既存のツール、インフラ、計測を活用できます。また、ほぼすべてのプログラミング言語をサポートする柔軟性も備えています。
  • Pydantic統合
    Pydanticモデルを通じて流れるデータを理解し、バリデーションに関する組み込みの分析機能を提供します。

詳細はドキュメントをご覧ください。

Logfireに関する問題の報告や質問は、このリポジトリで受け付けています!

このリポジトリには、LogfireのPython SDKとドキュメントが含まれています。データの記録と表示を行うサーバーアプリケーションはクローズドソースです。

上記にある通り、有償のプラットフォームサービスの様子。料金は以下にある。

https://pydantic.dev/pricing

  • Freeプラン: $0
    • 月間1,000万のスパン/メトリクスが無料
    • 無期限で無料利用可能
    • いつでも上位プランにアップグレード可能
  • Proプラン: $2/100万件
    • 月間1,000万のスパン/メトリクスが無料
    • それ以降は100万件ごとに$2 USD
    • いつでも下位プランにダウングレード可能
    • ゼロスケールまで縮小可能

上記ページのFAQ

  • Spanとは何ですか?
    Spanは、トレースの構成要素であり、Logfireのライブビューに表示される1行のデータです。例として、特定の川を渡る鳥の数を測定する状況を考えてみてください。川の境界にカウンターを設置し、そのセンサーが反応するたびに1つのSpanが生成されるイメージです。
  • Metricとは何ですか?
    Metricは1つのデータポイントを指し、「サンプル」や「メトリック記録」と呼ばれることもあります。先ほどの例を続けると、今回は鳥の高度をゲージメトリックで測定すると仮定します。この場合、ゲージメトリックは川の近くにいる鳥の高度ごとの数を示し、そこから川を渡る動きを推測することができます。
  • 無料枠を超えた場合どうなりますか?
    無料プランでは、使用量に応じてメールやアプリ内アラートを送信します。無料枠を大幅に超過した場合、新しいデータの保存が停止されますが、アプリケーションには影響がありません。stdout/stderrにLogfire APIの4XXレスポンスに関する警告が表示される可能性があります。
  • 無料プランを本番環境で使用できますか?
    はい!無料プランはLogfireのテストやサイドプロジェクトに適しており、本番環境でも利用可能です。ただし、無料枠を超えた場合にデータが失われる点を問題としない場合に限ります。
  • Logfireでデータはどのくらい保存されますか?
    データの保持期間は1か月です。今年中に有料ユーザー向けの延長オプションを提供予定です。今すぐより長い保持期間が必要な場合は、有料プランを契約し、リクエストをコメントしてください。
  • Pydanticは無料のままですか?
    Pydanticライブラリは(これまでも、これからも)完全に無料で、MITライセンスのもとで許可されています。このページに記載されている価格は、Pydantic Logfireにのみ適用されます。

無料プランでも一定量は使えそうなので、少し試してみる。PydanticAIもあるし、今回はLLMアプリのオブザーバビリティという観点で。

kun432kun432

アカウント・プロジェクトの作成

まずPydantic Logfireでアカウントを作成する。公式サイトから"Log in"をクリック。

現状はGitHubアカウントのOAuthのみになっているみたい。

権限を許可したあと、ユーザ名を設定、利用規約等に同意して、アカウント作成

ログインできたら、プロジェクトを作成

Logfireでは”Production”と"Development"で認証が異なる様子で、Productionだとトークンを発行してアクセスする様子。とりあえず今回は"Development"で。

"Development"ではCLIで認証してアクセスするという形みたい。

kun432kun432

Get Started

Get Startedに従ってやってみる。Colabtoratoryで。

パッケージインストール

!pip install logfire
!pip freeze | grep -i logfire
出力
logfire==2.6.2

これでCLIが使えるようになる。

!logfire -h
出力
usage: logfire [-h] [--version]  ...

The CLI for Pydantic Logfire.

options:
  -h, --help  show this help message and exit
  --version   show the version and exit

commands:
  
    auth      Authenticate with Logfire.
    backfill  Bulk upload data to Logfire.
    clean     Remove the contents of the Logfire data directory.
    inspect   Inspect installed packages and recommend packages that might be useful.
    whoami    Show user authenticated username and the URL to your Logfire project.
    projects  Project management for Logfire.
    info      Show versions of logfire, OS and related packages.

See https://logfire.pydantic.dev/docs/reference/cli/ for more detailed documentation.

では認証を行う。

!logfire auth

ENTERキーを入力

出力
Welcome to Logfire! 🔥
Before you can send data to Logfire, we need to authenticate you.

Press Enter to open logfire.pydantic.dev in your browser...

認証のためのURLが発行されるので、ここにアクセスすることで認証を行うっぽい。

出力
Please open https://logfire.pydantic.dev/auth/device/XXXXXXXXXXXXXX in 
your browser to authenticate if it hasn't already.
Waiting for you to authenticate with Logfire..

URLにアクセスして(恐らく必要ならばログイン)認証OKなら、以下のように表示される。クレデンシャルがホームディレクトリに保存されている様子。

出力
Successfully authenticated!

Your Logfire credentials are stored in /root/.logfire/default.toml

プロジェクトをセットする。プロジェクト名は先ほど作成したものと同じものを指定。

!logfire projects use my-first-project
出力
Project configured successfully. You will be able to view it at: 
https://logfire.pydantic.dev/kun432/my-first-project

表示されたURLにアクセスするとこんな感じの画面。まだデータはなにもない状態。

ではGet Startedのサンプルをそのまま試してみる。

import logfire

logfire.configure()  
logfire.info('Hello, {name}!', name='world')
出力
11:54:49.799 Hello, world!
Logfire project URL: https://logfire.pydantic.dev/kun432/my-first-project

Logfireのプロジェクトでもこんな感じで表示される。

kun432kun432

LLMのリクエストをトレースする

以下に各種アプリケーションから連携する際のサンプルが用意されている。

https://logfire.pydantic.dev/docs/integrations/

FastAPI、Django、FlaskなどのWebフレームワーク、httpxやrequestsなどのhttpクライアント、SQLAlchemy、Psycopg、MySQLなどのデータベース、等いろいろな例があがっているが、LLMに関連するところだと、

OpenAI

https://logfire.pydantic.dev/docs/integrations/openai/

Anthropic

https://logfire.pydantic.dev/docs/integrations/anthropic/

があり、ここには載ってないが、冒頭で紹介したPydanticAIでもLogfireのインテグレーションが記載されていた。

https://ai.pydantic.dev/logfire/#pydantic-logfire

とりあえずシンプルにOpenAIで試してみる。

パッケージインストール。logfireと関係ないのだけども、どうやら現時点でOpenAIとhttpxでミスマッチがあるみたいで、OpenAIパッケージが動かないっぽい。詳しくはここ。workaroundとしてhttpxのバージョンを固定にする。

!pip install -U openai "httpx==0.27.2"
!pip freeze | grep -i openai
!pip freeze | grep -i openai
出力
openai==1.54.5

OpenAIのAPIキーを環境変数にセット

import os
from google.colab import userdata

os.environ['OPENAI_API_KEY'] = userdata.get('OPENAI_API_KEY')

リクエストを投げてみる。ちょっと古い書き方なので今の書き方に変えた。

from openai import OpenAI
import logfire

client = OpenAI()

# 以下を追加
logfire.configure()
logfire.instrument_openai(client)  

response = client.chat.completions.create(
    model='gpt-4o-mini',
    messages=[
        {
            'role': 'system',
            'content': 'あなたは親切な日本語のアシスタントです。'},
        {
            'role': 'user',
            'content': 'Pythonロギングについての俳句を1つ書いてください。'
        },
    ],
)
print(response.choices[0].message.content)
出力
12:27:02.039 Chat Completion with 'gpt-4o-mini' [LLM]
Logfire project URL: https://logfire.pydantic.dev/kun432/my-first-project
ログの海 情報の波が 夢を紡ぐ

こんな感じで記録される

kun432kun432

まとめ

触り部分しかやっていないけども、上でリストアップしたように、いろいろなインテグレーションが可能な汎用オブザーバビリティプラットフォーム、ただしPythonなものに限る、って感じかなぁ。LangSmithやLlamaTrace、Arize Phoenix、LangFuseなどのLLM特化のものとはちょっと趣が違うように自分には思える。

まあ仮にPythonでLLMアプリ書いたとて、FastAPIやPydantic、DB関連のものは使う事が多いと思うので、そのあたりをまとめてオブザーバビリティの仕組みを入れたいとか、っていうケースに良いのかもしれない。

ただ、今回のサンプルだと、Pydanticがやっているという意味があまり感じられないように思う。Pydanticを使うなら、たぶんこのあたりになるのかな。

https://logfire.pydantic.dev/docs/integrations/pydantic/#third-party-modules

いずれにせよ、自分はLLM中心のコンテキストで確認したいと思っているので、PydanticAIと連携させた場合にどんな感じでできるのか?というところを確認してみたい。

このスクラップは12日前にクローズされました