プロジェクトとは
プロジェクトは、AITracerでログを論理的にグループ化するための仕組みです。プロジェクトを使うことで:
- ログの分離:環境別・機能別・チーム別にログを整理
- コスト分析:プロジェクト単位でコストを把握
- アラート設定:プロジェクトごとに異なるアラートルールを設定
- アクセス制御:チームメンバーにプロジェクト単位で権限を付与
プロジェクトは無料プランでも利用可能
すべてのプランでプロジェクト機能を利用できます。プロジェクト数に制限はありません。
すべてのプランでプロジェクト機能を利用できます。プロジェクト数に制限はありません。
SDKでのプロジェクト指定
Python
from aitracer import AITracer
# コンストラクタでプロジェクトを指定
tracer = AITracer(
api_key="at-xxxx",
project="my-chatbot-production"
)
# 以降のすべてのログがこのプロジェクトに記録される
client = tracer.wrap_openai(OpenAI())
PHP
<?php
use AITracer\AITracer;
// コンストラクタでプロジェクトを指定
$tracer = new AITracer([
'api_key' => 'at-xxxx',
'project' => 'my-chatbot-production'
]);
$client = $tracer->wrapOpenAI(OpenAI::client($apiKey));
TypeScript
import { AITracer } from '@haro/aitracer';
// コンストラクタでプロジェクトを指定
const tracer = new AITracer({
apiKey: 'at-xxxx',
projectId: 'my-chatbot-production'
});
環境変数での設定
環境変数を使うと、コードを変更せずに環境ごとにプロジェクトを切り替えられます。
環境変数
| 変数名 | 説明 | 例 |
|---|---|---|
AITRACER_API_KEY |
APIキー | at-xxxx... |
AITRACER_PROJECT |
プロジェクト名 | my-chatbot-production |
.env ファイルの例
# 本番環境 (.env.production)
AITRACER_API_KEY=at-xxxx
AITRACER_PROJECT=my-chatbot-production
# ステージング環境 (.env.staging)
AITRACER_API_KEY=at-xxxx
AITRACER_PROJECT=my-chatbot-staging
# 開発環境 (.env.development)
AITRACER_API_KEY=at-xxxx
AITRACER_PROJECT=my-chatbot-development
環境変数を使ったコード
from aitracer import AITracer
# 環境変数から自動で読み込む(パラメータ省略可)
tracer = AITracer()
# または明示的に環境変数から取得
import os
tracer = AITracer(
api_key=os.getenv("AITRACER_API_KEY"),
project=os.getenv("AITRACER_PROJECT")
)
推奨:環境変数を使う
コードにプロジェクト名をハードコードせず、環境変数で管理することで、同じコードを複数環境で使い回せます。
コードにプロジェクト名をハードコードせず、環境変数で管理することで、同じコードを複数環境で使い回せます。
プロジェクトの動的切り替え
同一アプリケーション内で、状況に応じてプロジェクトを切り替えることもできます。
リクエスト単位でプロジェクトを指定
# 手動ログの場合、リクエスト単位でプロジェクトを指定可能
tracer.log({
"model": "gpt-4",
"provider": "openai",
"project": "special-feature", # このログだけ別プロジェクトに
"input_data": {...},
"output_data": {...}
})
複数のTracerインスタンスを使う
from aitracer import AITracer
from openai import OpenAI
# プロジェクトごとにTracerを作成
tracer_chat = AITracer(project="chatbot")
tracer_search = AITracer(project="search-feature")
tracer_summary = AITracer(project="summarization")
# 機能ごとに異なるクライアントを使用
chat_client = tracer_chat.wrap_openai(OpenAI())
search_client = tracer_search.wrap_openai(OpenAI())
summary_client = tracer_summary.wrap_openai(OpenAI())
with文でプロジェクトを一時的に切り替え
# デフォルトプロジェクト
tracer = AITracer(project="main-app")
client = tracer.wrap_openai(OpenAI())
# 通常のリクエスト(main-app に記録)
response = client.chat.completions.create(...)
# 一時的にプロジェクトを変更
with tracer.project("experimental-feature"):
# このブロック内のログは experimental-feature に記録
response = client.chat.completions.create(...)
# ブロック外では元のプロジェクトに戻る
response = client.chat.completions.create(...) # main-app に記録
設計パターン
プロジェクトの設計方法は、チームの規模やアプリケーションの構成によって異なります。代表的なパターンを紹介します。
環境別パターン
開発・ステージング・本番などの環境ごとにプロジェクトを分離。最もシンプルで一般的。
myapp-development
myapp-staging
myapp-production
myapp-staging
myapp-production
機能別パターン
アプリケーションの機能ごとにプロジェクトを分離。機能単位でのコスト分析に有効。
chatbot
search
summarization
translation
search
summarization
translation
チーム別パターン
開発チームごとにプロジェクトを分離。チーム単位での予算管理に有効。
team-alpha
team-beta
team-gamma
team-beta
team-gamma
複合パターン
環境×機能など、複数の軸を組み合わせ。大規模プロジェクト向け。
chatbot-production
chatbot-staging
search-production
search-staging
chatbot-staging
search-production
search-staging
パターン選択の指針
| 状況 | 推奨パターン | 理由 |
|---|---|---|
| 小規模チーム、単一アプリ | 環境別 | シンプルで管理しやすい |
| 複数機能を持つアプリ | 機能別 or 複合 | 機能ごとのコスト把握が可能 |
| 複数チームで開発 | チーム別 or 複合 | チーム単位での予算管理 |
| マイクロサービス構成 | サービス別 + 環境別 | サービスごとの監視が可能 |
ベストプラクティス
1. 命名規則を統一する
プロジェクト名は一貫した命名規則で付けましょう。
# 良い例:ケバブケースで統一
my-chatbot-production
my-chatbot-staging
search-api-production
# 避けるべき例:命名規則がバラバラ
MyChatBot
my_chatbot_staging
searchAPI-prod
2. 環境変数を活用する
プロジェクト名をコードにハードコードせず、環境変数で管理しましょう。
# 悪い例:ハードコード
tracer = AITracer(project="my-chatbot-production")
# 良い例:環境変数
tracer = AITracer(project=os.getenv("AITRACER_PROJECT"))
3. 本番と開発を必ず分ける
最低限、本番環境と開発環境は別プロジェクトにしましょう。
- 開発時のテストログが本番データに混ざらない
- 本番のコスト・パフォーマンスを正確に把握できる
- 本番用のアラートが開発ログで発火しない
4. メタデータと組み合わせる
プロジェクトで大分類、メタデータで詳細分類という使い分けが効果的です。
# プロジェクト:アプリ+環境で大分類
tracer = AITracer(project="chatbot-production")
# メタデータ:詳細な属性を付与
response = client.chat.completions.create(
model="gpt-4",
messages=[...],
extra_body={
"aitracer_metadata": {
"user_id": "user-123",
"feature": "customer-support",
"version": "2.1.0"
}
}
)
5. プロジェクトごとにアラートを設定
本番環境のプロジェクトには必ずアラートを設定しましょう。
- エラー率が5%を超えたら通知
- 月間コストが予算の80%に達したら警告
- P95レイテンシが閾値を超えたら通知
プロジェクト名の変更に注意
一度記録されたログのプロジェクトは変更できません。プロジェクト名を変更する場合は、新しいプロジェクトとして記録されます。
一度記録されたログのプロジェクトは変更できません。プロジェクト名を変更する場合は、新しいプロジェクトとして記録されます。
ダッシュボードでの管理
プロジェクトの作成
- ダッシュボードにログイン
- 左メニューの「プロジェクト」をクリック
- 「+ 新規プロジェクト」をクリック
- プロジェクト名と説明を入力
- 「作成」をクリック
プロジェクト設定
| 設定項目 | 説明 |
|---|---|
| 名前・説明 | プロジェクトの識別情報 |
| デフォルトアラート | プロジェクト作成時に自動設定するアラート |
| データ保持期間 | ログの保持期間(Enterpriseのみカスタム可) |
| アクセス権限 | チームメンバーのアクセス権限 |
プロジェクトでフィルタリング
ダッシュボードの各画面で、プロジェクトをフィルターとして使用できます。
- ホーム:プロジェクト別の統計を表示
- ログ:プロジェクトでログを絞り込み
- 分析:プロジェクト別のコスト・パフォーマンス分析
- アラート:プロジェクト固有のアラートルール
ダッシュボードで作成しなくても使える
SDKでプロジェクト名を指定すると、そのプロジェクトが自動的に作成されます。ダッシュボードでの事前作成は必須ではありません。
SDKでプロジェクト名を指定すると、そのプロジェクトが自動的に作成されます。ダッシュボードでの事前作成は必須ではありません。
