本記事では、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リクエスト時のテナント識別には以下の手法が有効です:
- サブドメイン方式:
customer-a.yourapi.com - APIキー埋め込み:
X-Tenant-IDヘッダー - パス埋め込み:
/api/v1/tenant/{tenant_id}/chat
動的ブランディング切り替え機能
フロントエンド資産管理
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サービスの構築が可能になります。