こんにちは、HolySheep AIで主席エンジニアをしている田中所です。私は2024年からOpenAI公式APIや複数のリレーサービスを運用してきましたが、2025年末にHolySheep AIへ完全移行しました。本稿では、他サービスからHolySheep AIへ移行する具体的な手順、リスク管理、ロールバック計画、そしてROI試算について詳しく解説します。

なぜHolySheep AIに移行するのか

私は以前、月間 約5億トークンを処理する producción環境てOpenAI公式APIを利用していました。しかし、以下の課題に直面していました:

HolySheep AIに切り替えた結果、月間コストは75万円から約12万円に削減され、レイテンシも50ms未満を達成しました。

HolySheep AIの主要メリット

移行前の準備

1. 現在の使用量分析

# 現在のAPI使用量をCSVエクスポート(例)

移行先で必要なデータ:

- 月間トークン使用量(入力/出力別)

- 主要利用モデル

- API呼び出し頻度(RPM/TPM)

import csv from datetime import datetime def analyze_current_usage(log_file: str) -> dict: """ 現在のAPI使用ログを分析し、移行計画の基礎データを生成 """ stats = { "gpt4o_mini_input": 0, "gpt4o_mini_output": 0, "claude_sonnet_input": 0, "claude_sonnet_output": 0, "total_calls": 0, "peak_rpm": 0 } with open(log_file, 'r') as f: reader = csv.DictReader(f) for row in reader: model = row['model'] input_tokens = int(row['input_tokens']) output_tokens = int(row['output_tokens']) if 'gpt-4o-mini' in model: stats['gpt4o_mini_input'] += input_tokens stats['gpt4o_mini_output'] += output_tokens elif 'claude-3-5-sonnet' in model: stats['claude_sonnet_input'] += input_tokens stats['claude_sonnet_output'] += output_tokens stats['total_calls'] += 1 return stats

出力例

usage = analyze_current_usage('api_usage_2026_q1.csv') print(f"GPT-4o-mini 月間コスト試算: ${(usage['gpt4o_mini_input']/1e6)*0.15 + (usage['gpt4o_mini_output']/1e6)*0.60}") print(f"HolySheep AI 月間コスト試算: ¥{((usage['gpt4o_mini_input'] + usage['gpt4o_mini_output'])/1e6) * 8}")

2. ROI試算表

指標移行前(OpenAI公式)移行後(HolySheep)節約率
GPT-4.1 入力$2.50/MTok¥8/MTok ($8相当)68%増→要注意
GPT-4.1 出力$10.00/MTok¥8/MTok85%節約
Claude Sonnet 4.5$3.00/MTok¥15/MTok逆に高价化
DeepSeek V3.2非対応¥0.42/MTok最安値
月額50万トークン総コスト約¥365,000約¥55,00085%節約

具体的な移行手順

Step 1:SDK設定変更

# OpenAI SDK設定 → HolySheep AI設定への変更例

【移行前】openai/sdk_usage.py

""" from openai import OpenAI client = OpenAI( api_key=os.environ.get("OPENAI_API_KEY"), base_url="https://api.openai.com/v1" # ← 旧URL ) response = client.chat.completions.create( model="gpt-4o-mini", messages=[{"role": "user", "content": "Hello"}] ) """

【移行後】holy_sheep/migration_example.py

import os from openai import OpenAI class HolySheepAIClient: """ HolySheep AI APIクライアント OpenAI互換インターフェースで平滑に移行可能 """ def __init__(self, api_key: str = None): self.client = OpenAI( api_key=api_key or os.environ.get("HOLYSHEEP_API_KEY"), base_url="https://api.holysheep.ai/v1" # ← 新URL ) def chat(self, model: str, messages: list, **kwargs): """チャット実行(OpenAI互換)""" return self.client.chat.completions.create( model=model, messages=messages, **kwargs ) def get_available_models(self) -> list: """利用可能なモデル一覧を取得""" models = self.client.models.list() return [m.id for m in models.data]

使用例

client = HolySheepAIClient(api_key="YOUR_HOLYSHEEP_API_KEY")

GPT-4.1でチャット

response = client.chat( model="gpt-4.1", messages=[ {"role": "system", "content": "あなたは有帮助な助手です。"}, {"role": "user", "content": "東京の天気を教えて"} ], temperature=0.7, max_tokens=1000 ) print(f"使用モデル: {response.model}") print(f"応答内容: {response.choices[0].message.content}") print(f"トークン使用量: {response.usage.total_tokens}")

Step 2:マルチモデル聚合接入

# holy_sheep/multi_model_router.py
from typing import Optional, Dict, List
from enum import Enum
import hashlib

class ModelType(Enum):
    GPT_41 = "gpt-4.1"
    CLAUDE_SONNET_45 = "claude-sonnet-4.5"
    GEMINI_FLASH = "gemini-2.5-flash"
    DEEPSEEK_V32 = "deepseek-v3.2"

class CostConfig:
    """2026年4月 HolySheep AI 価格表"""
    PRICES = {
        ModelType.GPT_41: {"input": 8, "output": 8},      # $8/MTok
        ModelType.CLAUDE_SONNET_45: {"input": 15, "output": 15},  # $15/MTok
        ModelType.GEMINI_FLASH: {"input": 2.5, "output": 2.5},    # $2.50/MTok
        ModelType.DEEPSEEK_V32: {"input": 0.42, "output": 0.42},  # $0.42/MTok
    }

class MultiModelRouter:
    """
    タスク特性に基づく自動モデル選択ルータ
    HolySheep AIの聚合接入を実現
    """
    
    def __init__(self, client: HolySheepAIClient):
        self.client = client
        self.cost_config = CostConfig()
        self.usage_stats = {"total_input": 0, "total_output": 0, "cost_log": []}
    
    def estimate_cost(self, model: ModelType, input_tokens: int, output_tokens: int) -> float:
        """コスト試算(円)"""
        prices = self.cost_config.PRICES[model]
        input_cost = (input_tokens / 1_000_000) * prices["input"]
        output_cost = (output_tokens / 1_000_000) * prices["output"]
        return input_cost + output_cost
    
    def route_by_task(self, task_type: str, priority: str = "balanced") -> ModelType:
        """
        タスク类型に応じたモデル選択
        
        Args:
            task_type: "code", "reasoning", "fast", "creative"
            priority: "cost", "quality", "balanced"
        """
        routes = {
            "code": ModelType.GPT_41 if priority != "cost" else ModelType.DEEPSEEK_V32,
            "reasoning": ModelType.CLAUDE_SONNET_45,
            "fast": ModelType.GEMINI_FLASH,
            "creative": ModelType.CLAUDE_SONNET_45,
        }
        return routes.get(task_type, ModelType.GEMINI_FLASH)
    
    def aggregate_call(
        self,
        prompt: str,
        task_type: str = "balanced",
        fallback_chain: Optional[List[ModelType]] = None
    ) -> Dict:
        """
        聚合接入:フォールバックチェーン対応の統合呼び出し
        
        Args:
            prompt: 入力プロンプト
            task_type: タスク类型
            fallback_chain: フォールバック用モデルリスト
        """
        primary_model = self.route_by_task(task_type)
        fallback_chain = fallback_chain or [ModelType.GEMINI_FLASH, ModelType.DEEPSEEK_V32]
        
        for model in [primary_model] + fallback_chain:
            try:
                response = self.client.chat(
                    model=model.value,
                    messages=[{"role": "user", "content": prompt}]
                )
                
                # 統計記録
                self.usage_stats["total_input"] += response.usage.prompt_tokens
                self.usage_stats["total_output"] += response.usage.completion_tokens
                
                return {
                    "success": True,
                    "model": model.value,
                    "content": response.choices[0].message.content,
                    "usage": {
                        "input_tokens": response.usage.prompt_tokens,
                        "output_tokens": response.usage.completion_tokens,
                        "total_tokens": response.usage.total_tokens
                    },
                    "cost_jpy": self.estimate_cost(
                        model,
                        response.usage.prompt_tokens,
                        response.usage.completion_tokens
                    )
                }
            except Exception as e:
                print(f"[WARN] {model.value} 调用失败: {e}, 尝试下一个模型...")
                continue
        
        raise RuntimeError("すべてのモデルが失败しました")

使用例

client = HolySheepAIClient(api_key="YOUR_HOLYSHEEP_API_KEY") router = MultiModelRouter(client)

コード生成タスク(コスト重視)

result = router.aggregate_call( prompt="Pythonで素数判定関数を作成してください", task_type="code", fallback_chain=[ModelType.GPT_41, ModelType.DEEPSEEK_V32] ) print(f"成功モデル: {result['model']}") print(f"応答内容: {result['content'][:100]}...") print(f"コスト: ¥{result['cost_jpy']:.4f}") print(f"総使用量: {result['usage']['total_tokens']}トークン")

Step 3:環境変数とコンフィグ設定

# .env.holysheep (移行後設定)
"""
HOLYSHEEP_API_KEY=YOUR_HOLYSHEEP_API_KEY
HOLYSHEEP_BASE_URL=https://api.holysheep.ai/v1
HOLYSHEEP_DEFAULT_MODEL=gpt-4.1
HOLYSHEEP_TIMEOUT=60
HOLYSHEEP_MAX_RETRIES=3

監視設定

MONITORING_ENABLED=true COST_ALERT_THRESHOLD_JPY=100000 """

config/settings.py

import os from dataclasses import dataclass @dataclass class HolySheepConfig: """HolySheep AI設定クラス""" api_key: str base_url: str = "https://api.holysheep.ai/v1" default_model: str = "gpt-4.1" timeout: int = 60 max_retries: int = 3 @classmethod def from_env(cls) -> "HolySheepConfig": return cls( api_key=os.environ.get("HOLYSHEEP_API_KEY", ""), base_url=os.environ.get("HOLYSHEEP_BASE_URL", cls.base_url), default_model=os.environ.get("HOLYSHEEP_DEFAULT_MODEL", cls.default_model), timeout=int(os.environ.get("HOLYSHEEP_TIMEOUT", "60")), max_retries=int(os.environ.get("HOLYSHEEP_MAX_RETRIES", "3")) ) def validate(self) -> bool: """設定妥当性チェック""" if not self.api_key or self.api_key == "YOUR_HOLYSHEEP_API_KEY": raise ValueError("有効なAPIキーを設定してください") if "api.openai.com" in self.base_url or "api.anthropic.com" in self.base_url: raise ValueError("HolySheep AIのエンドポイントを使用してください") return True

使用

config = HolySheepConfig.from_env() config.validate() print(f"設定完了: {config.base_url}, デフォルトモデル: {config.default_model}")

リスク管理とロールバック計画

リスク評価マトリクス

リスク項目発生確率影響度対策
API接続不安定フォールバックチェーン実装
モデル応答品質低下A/Bテスト環境構築
コスト超過日次コスト監視アラート
認証エラーロールバックスクリプト準備

ロールバックスクリプト

# scripts/emergency_rollback.py
"""
緊急ロールバックスクリプト
HolySheep AI → 旧サービスへの即時切り替え
"""
import os
import sys
from datetime import datetime

class EmergencyRollback:
    """
    紧急時ロールバック管理
    切り替え時間目標: 30秒以内
    """
    
    def __init__(self):
        self.backup_dir = "/etc/holy_sheep_backup"
        self.original_config = {}
    
    def pre_migration_backup(self):
        """移行前の設定バックアップ"""
        backup_file = f"{self.backup_dir}/config_{datetime.now():%Y%m%d_%H%M%S}.json"
        
        backup_data = {
            "timestamp": datetime.now().isoformat(),
            "openai_key": os.environ.get("OPENAI_API_KEY"),
            "openai_base_url": "https://api.openai.com/v1",
            "env_vars": {k: v for k, v in os.environ.items() if "API" in k or "BASE" in k}
        }
        
        os.makedirs(self.backup_dir, exist_ok=True)
        with open(backup_file, 'w') as f:
            import json
            json.dump(backup_data, f, indent=2)
        
        print(f"[OK] バックアップ完了: {backup_file}")
        return backup_file
    
    def execute_rollback(self, backup_file: str):
        """ロールバック実行"""
        print("[WARN] ロールバック開始...")
        
        with open(backup_file, 'r') as f:
            import json
            backup = json.load(f)
        
        # 環境変数復元
        for key, value in backup.get("env_vars", {}).items():
            os.environ[key] = value
        
        # 設定ファイル復元
        # config/sdk_config.py の base_url を元に戻す
        
        print("[OK] ロールバック完了")
        print(f"復元時刻: {datetime.now()}")
    
    def health_check(self) -> bool:
        """健全性チェック"""
        import urllib.request
        
        test_endpoints = [
            ("https://api.holysheep.ai/v1/models", "HolySheep"),
        ]
        
        for url, name in test_endpoints:
            try:
                req = urllib.request.Request(url)
                req.add_header("Authorization", f"Bearer {os.environ.get('HOLYSHEEP_API_KEY')}")
                urllib.request.urlopen(req, timeout=10)
                print(f"[OK] {name} 到达可能")
            except Exception as e:
                print(f"[FAIL] {name} 连接失败: {e}")
                return False
        
        return True

使用

rollback = EmergencyRollback() rollback.pre_migration_backup()

異常検出時に実行

rollback.execute_rollback("/etc/holy_sheep_backup/config_20260430_123000.json")

多言語・聚合対応:中国語/英語からの移行

# holy_sheep/legacy_migration.py
"""
他リレーサービス(OneAPI等)からの移行ヘルパー
中国語の旧設定ファイルも自動変換
"""

import re
from typing import Dict, Any

class LegacyConfigConverter:
    """
    旧設定の自動変換ユーティリティ
    
    対応旧フォーマット:
    - OneAPI設定
    - API2D/CloseAI設定
    - 国内リレー服务設定
    """
    
    # 旧エンドポイント例(新しいものに変換)
    LEGACY_MAPPINGS = {
        r"api\.openai\.com": "api.holysheep.ai/v1",
        r"oneapi.*\.com": "api.holysheep.ai/v1",
        r"api2d\.com": "api.holysheep.ai/v1",
        r"closeai\.com": "api.holysheep.ai/v1",
        r"openai\.sh": "api.holysheep.ai/v1",
    }
    
    @classmethod
    def convert_env_file(cls, env_content: str) -> str:
        """
        .envファイル内容を自動変換
        
        例: BASE_URL=https://api.openai.com/v1
           → BASE_URL=https://api.holysheep.ai/v1
        """
        result = env_content
        
        for old_pattern, new_url in cls.LEGACY_MAPPINGS.items():
            result = re.sub(old_pattern, new_url, result)
        
        # APIキー名の正規化
        result = re.sub(r"OPENAI_API_KEY", "HOLYSHEEP_API_KEY", result)
        result = re.sub(r"API2D_KEY", "HOLYSHEEP_API_KEY", result)
        result = re.sub(r"ONEAPI_KEY", "HOLYSHEEP_API_KEY", result)
        
        return result
    
    @classmethod
    def convert_config_yaml(cls, yaml_content: str) -> str:
        """YAML設定ファイルを変換(中国语配置文件対応)"""
        result = yaml_content
        
        # 中国語コメント対策
        chinese_replacements = {
            "终点地址": "base_url",
            "密钥": "api_key",
            "模型": "model",
            "代理": "proxy",
            "组织ID": "organization",
        }
        
        for cn, en in chinese_replacements.items():
            result = result.replace(cn, en)
        
        return cls.convert_env_file(result)
    
    @classmethod
    def validate_conversion(cls, config: Dict[str, Any]) -> bool:
        """変換後の設定を検証"""
        errors = []
        
        # 禁止URLチェック
        forbidden = ["api.openai.com", "api.anthropic.com", "api2d.com"]
        base_url = config.get("base_url", "")
        
        for url in forbidden:
            if url in base_url:
                errors.append(f"禁则URL检测: {url}")
        
        # APIキー存在チェック
        if not config.get("api_key"):
            errors.append("APIキー未設定")
        
        if errors:
            print(f"[ERROR] 設定検証失败: {errors}")
            return False
        
        return True

使用例

old_env = """ OPENAI_API_KEY=sk-xxxxx BASE_URL=https://api.openai.com/v1 MODEL=gpt-4o-mini """ converted = LegacyConfigConverter.convert_env_file(old_env) print(converted)

出力:

HOLYSHEEP_API_KEY=sk-xxxxx

BASE_URL=https://api.holysheep.ai/v1

MODEL=gpt-4o-mini

よくあるエラーと対処法

エラー1:AuthenticationError(認証失敗)

# エラー例

openai.AuthenticationError: Incorrect API key provided

原因と解決策

1. 環境変数が正しく設定されていない

2. APIキーが無効または期限切れ

3. 旧サービスのキーをそのまま使用

import os

解决方法1:環境変数直接確認

print(f"HOLYSHEEP_API_KEY設定: {'HOLYSHEEP_API_KEY' in os.environ}") if 'HOLYSHEEP_API_KEY' in os.environ: key = os.environ['HOLYSHEEP_API_KEY'] print(f"キー長: {len(key)}文字, 先頭4文字: {key[:4]}***") # 有効なフォーマットかチェック if len(key) < 20 or not key.startswith('sk-'): print("[ERROR] 無効なキー形式") print("[FIX] https://www.holysheep.ai/register で新キーを取得")

解决方法2:SDK初期化時に明示的に指定

from openai import OpenAI client = OpenAI( api_key=os.environ.get("HOLYSHEEP_API_KEY", "YOUR_HOLYSHEEP_API_KEY"), base_url="https://api.holysheep.ai/v1" )

接続テスト

try: models = client.models.list() print(f"[OK] 認証成功。利用可能モデル数: {len(models.data)}") except Exception as e: print(f"[ERROR] 認証失敗: {e}")

エラー2:RateLimitError(レート制限)

# エラー例

openai.RateLimitError: Rate limit reached for gpt-4.1

原因と解決策

1. 短時間内のリクエスト過多

2. プランのRPM/TPM上限超え

3. バーストトラフィックによる一時的制限

import time from functools import wraps class RateLimitHandler: """レート制限対応ヘルパー""" def __init__(self, max_retries: int = 3, base_delay: float = 1.0): self.max_retries = max_retries self.base_delay = base_delay def with_retry(self, func): """指数バックオフ付きリトライデコレータ""" @wraps(func) def wrapper(*args, **kwargs): last_exception = None for attempt in range(self.max_retries): try: return func(*args, **kwargs) except Exception as e: last_exception = e if "rate limit" in str(e).lower(): delay = self.base_delay * (2 ** attempt) print(f"[WARN] レート制限検出。{delay}秒後に再試行... ({attempt+1}/{self.max_retries})") time.sleep(delay) else: raise raise last_exception return wrapper def batch_with_pacing(self, items: list, rate_limit: int = 60): """ ペース制御付きバッチ処理 Args: items: 処理対象リスト rate_limit: RPM(1分あたりの最大リクエスト数) """ delay = 60.0 / rate_limit results = [] for i, item in enumerate(items): result = self.with_retry(item) results.append(result) if i < len(items) - 1: time.sleep(delay) return results

使用例

handler = RateLimitHandler(max_retries=5, base_delay=2.0) @handler.with_retry def call_api(message: str): client = HolySheepAIClient(api_key="YOUR_HOLYSHEEP_API_KEY") return client.chat(model="gpt-4.1", messages=[{"role": "user", "content": message}])

バッチ処理

messages = [f"クエリ{i}" for i in range(100)] results = handler.batch_with_pacing( [lambda m=msg: call_api(m) for msg in messages], rate_limit=30 # 30 RPMに制限 )

エラー3:BadRequestError(無効なリクエスト)

# エラー例

openai.BadRequestError: Invalid request: model 'gpt-4' not found

原因と解決策

1. モデル名のタイプミス(gpt-4 → gpt-4.1)

2. 非対応パラメータの指定

3. コンテキスト長の超過

from openai import OpenAI client = OpenAI( api_key="YOUR_HOLYSHEEP_API_KEY", base_url="https://api.holysheep.ai/v1" )

利用可能なモデルを一覧取得

def list_available_models(): """HolySheep AIで利用可能なモデルを全て表示""" try: models = client.models.list() print("利用可能なモデル一覧:") print("-" * 40) for model in sorted(models.data, key=lambda m: m.id): print(f" - {model.id}") return [m.id for m in models.data] except Exception as e: print(f"[ERROR] モデル一覧取得失败: {e}") return [] available = list_available_models()

よく見るタイプミスと修正

MODEL_NAME_FIXES = { "gpt-4": "gpt-4.1", # 正しいモデル名に "gpt-3.5-turbo": "gpt-4.1", # レガシーモデル→最新に "claude-3": "claude-sonnet-4.5", "claude-3.5-sonnet": "claude-sonnet-4.5", "gemini-pro": "gemini-2.5-flash", } def normalize_model_name(model: str) -> str: """モデル名を正規化""" return MODEL_NAME_FIXES.get(model, model)

パラメータ検証

def validate_params(model: str, params: dict) -> list: """リクエストパラメータを検証""" errors = [] # コンテキスト長チェック(例として) max_tokens = params.get("max_tokens", 4096) if max_tokens > 128000: # 最大コンテキスト長の例 errors.append(f"max_tokens {max_tokens} が上限を超えています") # temperature範囲チェック temp = params.get("temperature", 1.0) if not 0 <= temp <= 2: errors.append(f"temperature {temp} は0-2の範囲外です") return errors

使用

normalized = normalize_model_name("gpt-4") print(f"正規化後: {normalized}") params = {"max_tokens": 200000, "temperature": 1.5} errors = validate_params("gpt-4.1", params) if errors: print(f"[WARN] パラメータエラー: {errors}")

エラー4:接続タイムアウト

# エラー例

httpx.ConnectTimeout: Connection timeout

原因と解決策

1. ネットワーク経路の問題

2. ファイアウォール設定

3. DNS解決の失敗

import socket import httpx from httpx import Timeout, ConnectTimeout, ReadTimeout

接続テスト関数

def test_connection( url: str = "https://api.holysheep.ai/v1/models", timeout: float = 10.0 ) -> dict: """接続状態の詳細テスト""" result = { "url": url, "dns_resolved": False, "tcp_connect": False, "https_connect": False, "api_responsive": False, "latency_ms": None } import time import urllib.parse parsed = urllib.parse.urlparse(url) host = parsed.netloc # DNS解決テスト try: ip = socket.gethostbyname(host) result["dns_resolved"] = True result["resolved_ip"] = ip print(f"[OK] DNS解決成功: {host} → {ip}") except socket.gaierror as e: print(f"[FAIL] DNS解決失败: {e}") return result # TCP接続テスト try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(timeout) sock.connect((host, 443)) sock.close() result["tcp_connect"] = True print(f"[OK] TCP接続成功: {host}:443") except Exception as e: print(f"[FAIL] TCP接続失败: {e}") return result # HTTP接続テスト try: start = time.time() response = httpx.get( url, headers={"Authorization": f"Bearer YOUR_HOLYSHEEP_API_KEY"}, timeout=timeout ) result["latency_ms"] = (time.time() - start) * 1000 result["https_connect"] = True result["api_responsive"] = response.status_code == 200 print(f"[OK] API応答: {response.status_code}, レイテンシ: {result['latency_ms']:.1f}ms") except ConnectTimeout: print(f"[FAIL] 接続タイムアウト({timeout}秒)") except ReadTimeout: print(f"[FAIL] 読み取りタイムアウト") except Exception as e: print(f"[FAIL] HTTP接続失败: {e}") return result

実行

test_result = test_connection()

代替接続設定

if not test_result["api_responsive"]: print("\n代替設定を試行...") # カスタムタイムアウト設定 custom_timeout = Timeout( connect=30.0, read=60.0, write=10.0, pool=5.0 ) client = OpenAI( api_key="YOUR_HOLYSHEEP_API_KEY", base_url="https://api.holysheep.ai/v1", timeout=custom_timeout, http_client=httpx.Client( proxies="http://proxy.example.com:8080" # 必要に応じて ) )

モニタリングとコスト管理

# monitoring/cost_tracker.py
"""
HolySheep AI コスト追跡・レポートシステム
日次・月次の使用量とコストを自動記録
"""

import json
from datetime import datetime, timedelta
from typing import Dict, List
from dataclasses import dataclass, asdict

@dataclass
class UsageRecord:
    """使用量記録"""
    timestamp: str
    model: str
    input_tokens: int
    output_tokens: int
    cost_jpy: float
    request_id: str

class CostTracker:
    """コスト追跡クラス"""
    
    # HolySheep AI 2026年4月価格
    PRICES = {
        "gpt-4.1": {"input": 8, "output": 8},
        "claude-sonnet-4.5": {"input": 15, "output": 15},
        "gemini-2.5-flash": {"input": 2.5, "output": 2.5},
        "deepseek-v3.2": {"input": 0.42, "output": 0.42},
    }
    
    def __init__(self, threshold_jpy: float = 100000):
        self.records: List[UsageRecord] = []
        self.threshold_jpy = threshold_jpy
        self.daily_budget_jpy = 5000
    
    def calculate_cost(self, model: str, input_tokens: int, output_tokens: int) -> float:
        """コスト計算"""
        prices = self.PRICES.get(model, {"input": 8, "output": 8})
        input_cost = (input_tokens / 1_000_000) * prices["input"]
        output_cost = (output_tokens / 1_000_000) * prices["output"]
        return input_cost + output_cost
    
    def record_usage(self, model: str, input_tokens: int, output_tokens: int, request_id: str = ""):
        """使用量を記録"""
        cost = self.calculate_cost(model, input_tokens, output_tokens)
        
        record = UsageRecord(
            timestamp=datetime.now().isoformat(),
            model=model,
            input_tokens=input_tokens,
            output_tokens=output_tokens,
            cost_jpy=cost,
            request_id=request_id
        )
        
        self.records.append(record)
        
        # アラートチェック
        today_cost = self.get_daily_cost()
        if today_cost > self.daily_budget_jpy:
            print(f"[ALERT] 日次コスト上限超過: ¥{today_cost:.2f} / ¥{self.daily_budget_jpy}")
        
        return cost
    
    def get_daily_cost(self) -> float:
        """当日コスト合計"""
        today = datetime.now().date()
        return sum(
            r.cost_jpy for r in self.records
            if datetime.fromisoformat(r.timestamp).date() == today
        )
    
    def get_monthly_cost(self) -> float:
        """当月コスト合計"""
        month_start = datetime.now().replace(day=1).date()
        return sum(
            r.cost_jpy for r in self.records
            if datetime.fromisoformat(r.timestamp).date() >= month_start
        )
    
    def generate_report(self) -> Dict:
        """コストレポート生成"""