日本語
AITracer

導入ガイド(クイックスタート)

たった3行のコードでAITracerを導入できます。所要時間:約5分

1アカウント作成とAPIキー取得

まず、AITracerのアカウントを作成し、APIキーを取得します。

  1. AITracerでアカウントを作成(無料)
  2. ダッシュボードにログイン
  3. 「設定」→「APIキー」から新しいキーを発行
  4. 発行されたAPIキー(at-xxxx...)をコピー
APIキーは安全に管理してください
APIキーは環境変数で管理し、コードに直接記述しないことを推奨します。

2SDKのインストール

お使いの言語に合わせてSDKをインストールしてください。

Python
PHP
TypeScript

pip でインストール:

pip install aitracer

Python 3.8 以上が必要です。

Composer でインストール:

composer require haro/aitracer

PHP 8.0 以上が必要です。

npm または yarn でインストール:

# npm
npm install @haro/aitracer

# yarn
yarn add @haro/aitracer

Node.js 18 以上が必要です。

3コードに組み込む

既存のLLMクライアントをAITracerでラップするだけで、自動的にログが記録されます。

Python
PHP
TypeScript

OpenAI

from aitracer import AITracer
from openai import OpenAI

tracer = AITracer(api_key="at-xxxx", project="my-project")
client = tracer.wrap_openai(OpenAI())

response = client.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": "Hello!"}]
)

Anthropic

from aitracer import AITracer
from anthropic import Anthropic

tracer = AITracer(api_key="at-xxxx", project="my-project")
client = tracer.wrap_anthropic(Anthropic())

response = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello!"}]
)

Google Gemini

from aitracer import AITracer
import google.generativeai as genai

tracer = AITracer(api_key="at-xxxx", project="my-project")
model = tracer.wrap_gemini(genai.GenerativeModel("gemini-pro"))

response = model.generate_content("Hello!")

LangChain

from aitracer.integrations.langchain import AITracerCallbackHandler
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage

# LangChainのコールバックハンドラーを設定
handler = AITracerCallbackHandler(api_key="at-xxxx", project="my-project")

llm = ChatOpenAI(model="gpt-4", callbacks=[handler])
response = llm.invoke([HumanMessage(content="Hello!")])

OpenAI

<?php
use AITracer\AITracer;
use OpenAI;

$tracer = new AITracer(['api_key' => 'at-xxxx', 'project' => 'my-project']);
$client = $tracer->wrapOpenAI(OpenAI::client('your-openai-key'));

$response = $client->chat()->create([
    'model' => 'gpt-4',
    'messages' => [
        ['role' => 'user', 'content' => 'Hello!']
    ]
]);

Anthropic

<?php
use AITracer\AITracer;
use Anthropic\Anthropic;

$tracer = new AITracer(['api_key' => 'at-xxxx', 'project' => 'my-project']);
$client = $tracer->wrapAnthropic(Anthropic::client('your-anthropic-key'));

$response = $client->messages()->create([
    'model' => 'claude-sonnet-4-20250514',
    'max_tokens' => 1024,
    'messages' => [
        ['role' => 'user', 'content' => 'Hello!']
    ]
]);

Google Gemini

<?php
use AITracer\AITracer;
use Gemini\Client as GeminiClient;

$tracer = new AITracer(['api_key' => 'at-xxxx', 'project' => 'my-project']);
$client = $tracer->wrapGemini(GeminiClient::factory()->withApiKey('your-gemini-key')->make());

$response = $client->geminiPro()->generateContent('Hello!');

OpenAI

import { AITracer } from '@haro/aitracer';
import OpenAI from 'openai';

const tracer = new AITracer({ apiKey: 'at-xxxx', projectId: 'my-project' });
const openai = new OpenAI();

const start = Date.now();
const response = await openai.chat.completions.create({
  model: 'gpt-4',
  messages: [{ role: 'user', content: 'Hello!' }]
});

// ログを記録
await tracer.log({
  model: 'gpt-4',
  provider: 'openai',
  inputData: { messages: [{ role: 'user', content: 'Hello!' }] },
  outputData: response.choices[0].message,
  inputTokens: response.usage?.prompt_tokens,
  outputTokens: response.usage?.completion_tokens,
  latencyMs: Date.now() - start
});

Anthropic

import { AITracer } from '@haro/aitracer';
import Anthropic from '@anthropic-ai/sdk';

const tracer = new AITracer({ apiKey: 'at-xxxx', projectId: 'my-project' });
const anthropic = new Anthropic();

const start = Date.now();
const response = await anthropic.messages.create({
  model: 'claude-sonnet-4-20250514',
  max_tokens: 1024,
  messages: [{ role: 'user', content: 'Hello!' }]
});

// ログを記録
await tracer.log({
  model: 'claude-sonnet-4-20250514',
  provider: 'anthropic',
  inputData: { messages: [{ role: 'user', content: 'Hello!' }] },
  outputData: response.content,
  inputTokens: response.usage.input_tokens,
  outputTokens: response.usage.output_tokens,
  latencyMs: Date.now() - start
});
環境変数を使う場合
AITRACER_API_KEYAITRACER_PROJECT を設定すれば、パラメータを省略できます。

4動作確認

コードを実行したら、AITracerダッシュボードでログを確認しましょう。

  1. ダッシュボードにアクセス
  2. 「ログ」タブを開く
  3. 先ほど実行したリクエストが表示されていれば成功です
導入完了!
これで、すべてのLLM呼び出しが自動的に記録されます。トークン数、コスト、レイテンシがリアルタイムで確認できます。

対応プロバイダー別の設定

プロバイダー メソッド 対応SDK
OpenAI tracer.wrap_openai(client) Python, PHP
Anthropic tracer.wrap_anthropic(client) Python, PHP
Google Gemini tracer.wrap_gemini(model) Python, PHP
LangChain AITracerCallbackHandler Python
手動ログ tracer.log() Python, PHP, TypeScript

設定オプション

初期化時に以下のオプションを指定できます:

基本設定

オプション 説明 デフォルト
api_key string AITracer APIキー 環境変数 AITRACER_API_KEY
project string プロジェクト名(詳細ガイド None
enabled bool ログ記録の有効/無効 true
base_url string APIエンドポイント https://api.aitracer.co

送信設定

オプション 説明 デフォルト
sync bool 同期送信モード(Lambda/Cloud Functions推奨) false
batch_size int バッチ送信のサイズ(非同期時) 10
flush_interval float 自動フラッシュ間隔(秒、非同期時) 5.0
flush_on_exit bool プロセス終了時に自動フラッシュ true

PII(個人情報)設定

オプション 説明 デフォルト
pii_detection bool PII検出の有効/無効 false
pii_action string PII検出時のアクション(mask, redact, hash, none) mask
pii_types array 検出対象のPIIタイプ ["email", "phone", "credit_card", "ssn"]

設定例

from aitracer import AITracer

tracer = AITracer(
    api_key="at-xxxx",
    project="my-chatbot",

    # PII設定
    pii_detection=True,
    pii_action="mask",

    # 送信設定
    batch_size=20,
    flush_interval=10.0,

    # 同期モード(サーバーレス向け)
    sync=False
)
Lambda / Cloud Functions をお使いの場合
サーバーレス環境では sync=True を設定してください。ログの欠損を防げます。

セッション追跡

ユーザーセッション単位でログを集約し、会話フローを可視化できます。

# with 文でセッションを管理(自動で開始・終了)
with tracer.session(
    session_id="session-abc123",
    user_id="user-456",
    metadata={"channel": "web", "device": "mobile"}
) as session:

    # セッション内の全リクエストが自動でグループ化
    response1 = client.chat.completions.create(...)
    response2 = client.chat.completions.create(...)

    # ユーザーフィードバックを記録
    session.thumbs_up()  # 最後のレスポンスに対して

# with ブロック終了時に自動でセッション終了

セッション分析機能:

アプリユーザー追跡

アプリユーザー機能を使うと、あなたのAIアプリケーションのエンドユーザー単位で利用状況を追跡できます。ユーザーごとのコスト・使用量・行動パターンを把握し、課金設計やユーザー体験の改善に活用できます。

Starterプラン以上で利用可能
アプリユーザー分析機能はStarterプラン以上でご利用いただけます。

user_id の指定方法

セッション開始時に user_id を指定すると、そのユーザーのログが自動的に集約されます。

# セッションでユーザーを指定(推奨)
with tracer.session(
    session_id="session-abc123",
    user_id="user-456",       # あなたのアプリのユーザーID
) as session:
    # このセッション内の全リクエストが user-456 に紐づく
    response = client.chat.completions.create(...)

または、メタデータで個別に指定することもできます。

# メタデータでuser_idを指定
response = client.chat.completions.create(
    model="gpt-4",
    messages=[...],
    extra_body={
        "aitracer_metadata": {
            "user_id": "user-456"
        }
    }
)

ダッシュボードでの確認

ダッシュボードの「アプリユーザー」メニューから、ユーザー一覧と詳細を確認できます。

活用例

ユースケース 説明
従量課金 ユーザーごとのAPI使用コストを把握し、課金額を算出
利用制限 ヘビーユーザーを特定し、レート制限の設計に活用
エラー調査 特定ユーザーで発生するエラーの原因を調査
体験改善 レイテンシが高いユーザーの特定と改善

詳細はダッシュボードの使い方 - アプリユーザー分析をご覧ください。

トレース機能

複数のAPI呼び出しを1つのトレースにグループ化できます。RAGパイプラインやマルチステップ処理に便利です。

# 複数のAPI呼び出しを1つのトレースにグループ化
with tracer.trace("user-query-123") as trace:
    # 最初のAPI呼び出し
    response1 = client.chat.completions.create(
        model="gpt-4",
        messages=[{"role": "user", "content": "Summarize this article..."}]
    )

    # 2番目のAPI呼び出し(同じトレースに属する)
    response2 = client.chat.completions.create(
        model="gpt-4",
        messages=[{"role": "user", "content": f"Translate: {response1.choices[0].message.content}"}]
    )

    # メタデータを追加
    trace.set_metadata({
        "user_id": "user-456",
        "feature": "summarization",
        "article_id": "article-789"
    })

カスタムメタデータ

リクエスト単位で任意のメタデータを付与できます。後から検索・フィルタリングに利用できます。

# リクエスト単位でメタデータを付与
response = client.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": "Hello!"}],
    extra_body={
        "aitracer_metadata": {
            "user_id": "user-456",
            "session_id": "session-abc",
            "feature": "chat",
            "version": "2.0"
        }
    }
)

メタデータは最大10キーまで、各値は最大1000文字までです。