Pydanticのオブザーバビリティプラットフォーム「Logfire」を試す
以下でPydanticAIを試している中で出てきた。
公式サイト
GitHubレポジトリ
Pydantic Logfire — 簡単な観測性
Pydanticを手掛けたチームが提供するLogfireは、私たちのオープンソースライブラリと同じ信念に基づいて構築された観測性プラットフォームです。それは、「最も強力なツールは使いやすい」という考え方です。
Logfireの特徴:
- シンプルかつ強力
Logfireのダッシュボードは、その提供する強力な機能に比してシンプルに設計されており、エンジニアリングチーム全員が実際に利用できるようにしています。- Python中心のインサイト
Pythonオブジェクトのリッチな表示、イベントループのテレメトリ、Pythonコードやデータベースクエリのプロファイリングなど、LogfireはPythonアプリケーションの挙動を徹底的に可視化します。- SQL対応
標準的なSQLを使用してデータをクエリ可能です。多くのエンジニアにとって新しい学習は不要で、既存のBIツールやデータベースクエリライブラリでデータを扱うことも可能です。- OpenTelemetry
Logfireは、OpenTelemetryをラップする独自の設計を採用しており、一般的なPythonパッケージ用の既存のツール、インフラ、計測を活用できます。また、ほぼすべてのプログラミング言語をサポートする柔軟性も備えています。- Pydantic統合
Pydanticモデルを通じて流れるデータを理解し、バリデーションに関する組み込みの分析機能を提供します。詳細はドキュメントをご覧ください。
Logfireに関する問題の報告や質問は、このリポジトリで受け付けています!
このリポジトリには、
Logfire
のPython SDKとドキュメントが含まれています。データの記録と表示を行うサーバーアプリケーションはクローズドソースです。
上記にある通り、有償のプラットフォームサービスの様子。料金は以下にある。
- 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アプリのオブザーバビリティという観点で。
アカウント・プロジェクトの作成
まずPydantic Logfireでアカウントを作成する。公式サイトから"Log in"をクリック。
現状はGitHubアカウントのOAuthのみになっているみたい。
権限を許可したあと、ユーザ名を設定、利用規約等に同意して、アカウント作成
ログインできたら、プロジェクトを作成
Logfireでは”Production”と"Development"で認証が異なる様子で、Productionだとトークンを発行してアクセスする様子。とりあえず今回は"Development"で。
"Development"ではCLIで認証してアクセスするという形みたい。
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のプロジェクトでもこんな感じで表示される。
LLMのリクエストをトレースする
以下に各種アプリケーションから連携する際のサンプルが用意されている。
FastAPI、Django、FlaskなどのWebフレームワーク、httpxやrequestsなどのhttpクライアント、SQLAlchemy、Psycopg、MySQLなどのデータベース、等いろいろな例があがっているが、LLMに関連するところだと、
OpenAI
Anthropic
があり、ここには載ってないが、冒頭で紹介したPydanticAIでも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
ログの海 情報の波が 夢を紡ぐ
こんな感じで記録される
その他の機能
メトリクスを可視化するダッシュボードを作成できる
メトリクスを元にアラートを上げる
ログの検索はSQLで行える。あと、AIに自然言語で指示を出すとSQL?を生成してくれるような機能もあるっぽい。
まとめ
触り部分しかやっていないけども、上でリストアップしたように、いろいろなインテグレーションが可能な汎用オブザーバビリティプラットフォーム、ただしPythonなものに限る、って感じかなぁ。LangSmithやLlamaTrace、Arize Phoenix、LangFuseなどのLLM特化のものとはちょっと趣が違うように自分には思える。
まあ仮にPythonでLLMアプリ書いたとて、FastAPIやPydantic、DB関連のものは使う事が多いと思うので、そのあたりをまとめてオブザーバビリティの仕組みを入れたいとか、っていうケースに良いのかもしれない。
ただ、今回のサンプルだと、Pydanticがやっているという意味があまり感じられないように思う。Pydanticを使うなら、たぶんこのあたりになるのかな。
いずれにせよ、自分はLLM中心のコンテキストで確認したいと思っているので、PydanticAIと連携させた場合にどんな感じでできるのか?というところを確認してみたい。
参考になる