Phase2:LLMプロバイダーアーキテクチャ設計

LLMプロバイダーアーキテクチャ設計

LLMプロバイダーアーキテクチャ設計

このドキュメントでは、LLMプロバイダーの実装アーキテクチャについて説明します。システムは抽象クラスを使用した継承ベースの設計と、ファクトリーパターンを組み合わせて実装されています。

クラス図

classDiagram class ILLMProvider { <<abstract>> #characterLimit: CharacterLimitOptions +sendMessage(message: string, faqData?: Array)*$ Promise~string~ +verifyResponse(response: string, userMessage: string, faqData: Array)*$ Promise~boolean~ +generateEmbedding(text: string)*$ Promise~number[]~ +getConfig()*$ object +setUserId(userId: string)*$ void #summarizeResponse(response: string)*$ Promise~string~ #processResponse(response: string)$ Promise~string~ #checkResponseLength(response: string)$ object #truncateText(text: string)$ string } class OpenAIProvider { -model: string -temperature: number -maxTokens: number -client: OpenAI -promptHistoryService?: IPromptHistoryService -currentUserId?: string +constructor(config: OpenAIConfig) +sendMessage()$ Promise~string~ +verifyResponse()$ Promise~boolean~ +generateEmbedding()$ Promise~number[]~ +getConfig()$ object +setUserId(userId: string)$ void #summarizeResponse()$ Promise~string~ -isO3MiniModel()$ boolean -getTokenLimitParamName()$ string -buildRequestParameters()$ object -preprocessUserMessage()$ string -logLLMInteraction()$ void -handleOpenAIError()$ Error } class GeminiProvider { -model: string -temperature: number -maxTokens: number -client: GenerativeModel -promptHistoryService?: IPromptHistoryService -currentUserId?: string +constructor(config: GeminiConfig) +sendMessage()$ Promise~string~ +verifyResponse()$ Promise~boolean~ +generateEmbedding()$ Promise~number[]~ +getConfig()$ object +setUserId(userId: string)$ void #summarizeResponse()$ Promise~string~ -preprocessUserMessage()$ string -logLLMInteraction()$ void -handleGeminiError()$ Error } class LLMFactory { -instance: LLMFactory -config: LLMConfig -activeProvider: string -fallbackProvider: string -providers: Map~string, ILLMProvider~ -promptHistoryService: PromptHistoryService -initialized: boolean -constructor() +getInstance()$ LLMFactory +initialize()$ Promise~void~ +createProvider(providerName?: string)$ ILLMProvider +createFallbackProvider()$ ILLMProvider +setActiveProvider(provider: string)$ void +setFallbackProvider(provider: string)$ void +getActiveProvider()$ string +getFallbackProvider()$ string +getAvailableProviders()$ string[] +clearCache()$ void } ILLMProvider <|-- OpenAIProvider ILLMProvider <|-- GeminiProvider LLMFactory ..> ILLMProvider LLMFactory ..> OpenAIProvider LLMFactory ..> GeminiProvider

シーケンス図(ファクトリーパターン)

sequenceDiagram participant Client participant LLMFactory participant OpenAIProvider participant GeminiProvider Client->>LLMFactory: getInstance() activate LLMFactory alt インスタンスが未作成の場合 LLMFactory->>LLMFactory: new LLMFactory() end LLMFactory-->>Client: factoryインスタンス deactivate LLMFactory Client->>LLMFactory: initialize() activate LLMFactory LLMFactory->>LLMFactory: 初期化処理 LLMFactory-->>Client: deactivate LLMFactory Client->>LLMFactory: createProvider("openai") activate LLMFactory alt キャッシュにインスタンスが存在する場合 LLMFactory-->>Client: キャッシュされたインスタンス else キャッシュにインスタンスが存在しない場合 LLMFactory->>LLMFactory: config.getProviderConfig() alt provider == "openai" LLMFactory->>OpenAIProvider: new OpenAIProvider(config) OpenAIProvider-->>LLMFactory: providerインスタンス else provider == "gemini" LLMFactory->>GeminiProvider: new GeminiProvider(config) GeminiProvider-->>LLMFactory: providerインスタンス end LLMFactory->>LLMFactory: providers.set(provider, instance) LLMFactory-->>Client: 新しいproviderインスタンス end deactivate LLMFactory

実装の詳細

ILLMProvider(抽象クラス)

LLMプロバイダーの基底クラスとして機能し、以下の主要な機能を定義します:

  • メッセージの送受信(sendMessage)
  • 応答の検証(verifyResponse)
  • テキストのエンベディング生成(generateEmbedding)
  • 設定の取得(getConfig)
  • ユーザーIDの設定(setUserId)
  • レスポンスの要約(summarizeResponse)

また、以下のユーティリティメソッドを提供します:

  • レスポンスの処理(processResponse)
  • レスポンス長のチェック(checkResponseLength)
  • テキストの切り詰め(truncateText)

具象クラス(OpenAIProvider, GeminiProvider)

ILLMProviderを継承し、それぞれのAPIに特化した実装を提供します:

OpenAIProvider

  • OpenAI APIを使用したLLM機能の実装
  • o3-miniモデル対応の特殊処理
  • OpenAI特有のエラーハンドリング

GeminiProvider

  • Google Gemini APIを使用したLLM機能の実装
  • Gemini特有のリクエスト形式対応
  • Gemini特有のエラーハンドリング

LLMFactory(ファクトリークラス)

シングルトンパターンとファクトリーパターンを組み合わせた実装で、以下の機能を提供します:

  • プロバイダーインスタンスの生成と管理
  • アクティブプロバイダーとフォールバックプロバイダーの切り替え
  • プロバイダーインスタンスのキャッシュ管理
  • 設定の一元管理

使用例

// ファクトリーインスタンスの取得
const factory = LLMFactory.getInstance();

// ファクトリーの初期化
await factory.initialize();

// OpenAIプロバイダーの取得
const openaiProvider = factory.createProvider("openai");

// Geminiプロバイダーの取得
const geminiProvider = factory.createProvider("gemini");

// メッセージの送信
const response = await openaiProvider.sendMessage("こんにちは");

この設計により、以下のメリットが得られます:

  1. 新しいLLMプロバイダーの追加が容易
  2. プロバイダー間の切り替えが簡単
  3. 共通機能の重複を防止
  4. プロバイダー固有の実装を隠蔽
  5. テスト容易性の向上

0 件のコメント:

コメントを投稿