本記事では、OEM(Original Equipment Manufacturer)提供を前提としたLLMアプリケーションの設計について、マルチテナント架構、動的ブランディング機能、API設計の観点から実務的なベストプラクティスをご紹介します。LLMサービスのOEM提供では、複数の顧客企業が独自ブランドで同一プラットフォームを展開するため、従来のSaaS設計とは異なる配慮が必要となります。

マルチテナント設計の基本戦略

テナント分離レベルの選択

OEM向けLLMアプリケーションでは、以下の分離レベルから適切な戦略を選択する必要があります:

実装例として、PostgreSQLを使用したスキーマレベル分離を示します:

-- テナント固有スキーマの動的作成
CREATE SCHEMA tenant_{{tenant_id}};

-- テナント別のテーブル配置
CREATE TABLE tenant_{{tenant_id}}.conversations (
    id UUID PRIMARY KEY,
    user_id UUID NOT NULL,
    llm_model VARCHAR(100),
    created_at TIMESTAMP DEFAULT NOW()
);

テナント識別機構

APIリクエスト時のテナント識別には以下の手法が有効です:

動的ブランディング切り替え機能

フロントエンド資産管理

OEM顧客ごとに異なるUI/UXを提供するため、以下の設計パターンを採用します:

// テナント別テーマ設定の管理
interface TenantTheme {
  primaryColor: string;
  logoUrl: string;
  fontFamily: string;
  customCSS?: string;
}

// 動的スタイル適用
const applyTenantTheme = (tenantId: string) => {
  const theme = await fetchTenantTheme(tenantId);
  document.documentElement.style.setProperty('--primary-color', theme.primaryColor);
  // その他のスタイル適用...
};

コンテンツ管理システム(CMS)統合

OEM顧客が独自にコンテンツを管理できるよう、HeadlessCMSとの統合を検討します。Strapiやその他のCMSを活用し、テナント固有のコンテンツ配信を実現します。

スケーラブルなAPI設計

RESTful API設計原則

OEM環境では標準化されたAPI設計が重要です。以下の構造を推奨します:

GET    /api/v1/tenants/{tenant_id}/models
POST   /api/v1/tenants/{tenant_id}/completions
GET    /api/v1/tenants/{tenant_id}/usage
PUT    /api/v1/tenants/{tenant_id}/settings

レート制限とクォータ管理

テナント別のリソース使用量制御には、Redisを活用したスライディングウィンドウ方式が効果的です:

// Redis-based rate limiting
const rateLimitKey = `rate_limit:${tenantId}:${userId}`;
const currentCount = await redis.incr(rateLimitKey);
if (currentCount === 1) {
  await redis.expire(rateLimitKey, 3600); // 1時間のウィンドウ
}
if (currentCount > tenantQuota) {
  throw new Error('Rate limit exceeded');
}

セキュリティ考慮事項

テナント間データ漏洩防止

データベースアクセス時には、必ずテナントIDによるフィルタリングを実装します。ORM使用時は、グローバルスコープ機能を活用してテナント分離を自動化します。

重要:すべてのデータアクセスにおいて、テナントIDによる暗黙的フィルタリングを実装し、意図しないクロステナントアクセスを防止する必要があります。

API認証・認可設計

JWT トークンにテナント情報を含め、各リクエストでテナント権限を検証します:

{
  "sub": "user123",
  "tenant_id": "tenant_abc",
  "role": "admin",
  "permissions": ["read:models", "write:completions"]
}

まとめ

OEM提供LLMアプリケーションの設計では、マルチテナント分離、動的ブランディング、スケーラブルなAPI設計が成功の鍵となります。特に重要なのは、テナント間の完全なデータ分離とセキュリティの確保です。これらのベストプラクティスを適用することで、企業顧客のニーズに対応した堅牢なOEMサービスの構築が可能になります。