T-CREATOR

Dify の内部アーキテクチャ超図解:エージェント・ワークフロー・データストアの関係

Dify の内部アーキテクチャ超図解:エージェント・ワークフロー・データストアの関係

AI 開発プラットフォームとして急速に注目を集めている Dify ですが、その内部アーキテクチャを深く理解することで、より効果的な活用が可能になります。本記事では、Dify の核となる 3 つのコンポーネント「エージェント」「ワークフロー」「データストア」の内部構造と、それらが織りなす複雑な相互関係について、図解を交えながら詳しく解説いたします。

Dify アーキテクチャの全体像

システム構成の概要

Dify は 2025 年に導入された「Beehive アーキテクチャ」を採用しており、ハチの巣のような六角形構造を模倣したモジュラー設計が特徴です。この設計により、各コンポーネントが独立して開発・テスト・デプロイ可能となり、システム全体に影響を与えることなく部分的な調整や拡張を実現しています。

以下の図は、Dify の全体アーキテクチャ構成を示しています。

mermaidflowchart TB
    subgraph "Dify Beehive Architecture"
        subgraph "Frontend Layer"
            WebUI[Web UI]
            API_Gateway[API Gateway]
        end

        subgraph "Core Services"
            Agent[Agent System]
            Workflow[Workflow Engine]
            DataStore[Data Store]
        end

        subgraph "Infrastructure Layer"
            Docker[Docker Containers]
            Database[TiDB Database]
            Vector[Vector Store]
            Cache[Redis Cache]
        end

        subgraph "External Integration"
            LLM[LLM Models]
            Plugins[Plugin Marketplace]
            Webhooks[External APIs]
        end
    end

    WebUI --> API_Gateway
    API_Gateway --> Agent
    API_Gateway --> Workflow
    API_Gateway --> DataStore

    Agent <--> Workflow
    Agent <--> DataStore
    Workflow <--> DataStore

    Agent --> LLM
    Workflow --> LLM
    DataStore --> Database
    DataStore --> Vector

    Agent --> Plugins
    Workflow --> Webhooks

この図では、各レイヤーが明確に分離され、疎結合な設計となっていることがわかります。

主要コンポーネントの役割

Dify の主要コンポーネントは以下の 3 つに分類されます。

コンポーネント主要機能技術的特徴
エージェントシステムAI モデルとの対話、自律的判断Function Calling、プラグイン連携
ワークフローエンジンタスクオーケストレーションDAG 処理、並列実行制御
データストアデータ管理、検索機能ベクター検索、RAG 実装

各コンポーネントは独立性を保ちながらも、API 経由で密接に連携しています。特に注目すべきは、単一の責任を持つマイクロサービス設計により、システム全体の可用性と保守性が大幅に向上している点です。

Docker ベースのデプロイメント構成では、nginx、API、Worker、Beat、データベースの各コンポーネントがコンテナ化され、AWS 環境では Application Load Balancer との組み合わせにより、高可用性とスケーラビリティを実現しています。

エージェントシステムの内部構造

エージェントの実装メカニズム

Dify のエージェントシステムは、v1.0.0 で大幅な進化を遂げました。従来の単純な応答生成から、予め定義された「エージェント戦略」による自動ツール呼び出しと、複数ステップにわたる推論の自動実行が可能になっています。

エージェントの内部構造を理解するため、以下の図をご覧ください。

mermaidflowchart LR
    subgraph "Agent Core Engine"
        Input[User Input] --> Parser[Intent Parser]
        Parser --> Strategy[Agent Strategy]
        Strategy --> Reasoning[Reasoning Engine]
        Reasoning --> Tools[Tool Selection]
        Tools --> Execution[Execution Layer]
        Execution --> Response[Response Generator]
    end

    subgraph "External Integrations"
        LLM_Models[LLM Models]
        Plugin_Registry[Plugin Registry]
        Function_Library[Function Library]
    end

    Strategy --> LLM_Models
    Tools --> Plugin_Registry
    Execution --> Function_Library

    Response --> Output[Final Output]

エージェントの核となるのは「Reasoning Engine」です。このエンジンは、ユーザーの入力を解析し、適切なツールの選択と実行順序を自律的に決定します。

処理フローとライフサイクル

エージェントの処理フローは、以下の 5 つのステップで構成されています。

typescript// エージェント初期化処理
interface AgentConfig {
  strategy: AgentStrategy;
  tools: ToolRegistry[];
  memory: ContextMemory;
  llmConfig: LLMConfiguration;
}

class DifyAgent {
  constructor(config: AgentConfig) {
    this.strategy = config.strategy;
    this.tools = config.tools;
    this.memory = config.memory;
    this.llm = new LLMConnector(config.llmConfig);
  }
}
  1. 入力解析段階: ユーザーの自然言語入力を構造化データに変換
  2. 意図認識段階: 解析結果から実行すべきタスクを特定
  3. 戦略選択段階: 定義済みエージェント戦略から最適なアプローチを選択
  4. ツール実行段階: 選択されたツールを順次または並列実行
  5. 結果統合段階: 各ツールの実行結果を統合し、最終的な応答を生成
typescript// エージェント実行プロセス
async executeAgent(input: string): Promise<AgentResponse> {
  // Step 1: 入力解析
  const parsedInput = await this.parseInput(input);

  // Step 2: 意図認識
  const intent = await this.recognizeIntent(parsedInput);

  // Step 3: 戦略選択
  const strategy = this.selectStrategy(intent);

  // Step 4: ツール実行
  const toolResults = await this.executeTools(strategy);

  // Step 5: 結果統合
  return this.generateResponse(toolResults);
}

この段階的なアプローチにより、複雑なタスクでも確実に処理できる仕組みとなっています。

他コンポーネントとの連携

エージェントシステムは、他のコンポーネントとの密接な連携により、その真価を発揮します。

ワークフローとの連携では、エージェントがワークフロー内の一つのノードとして動作することも、独立したワークフローを呼び出すことも可能です。この柔軟性により、単純なタスクから複雑な業務プロセスまで、幅広いユースケースに対応できます。

typescript// エージェント→ワークフロー連携
interface WorkflowInvocation {
  workflowId: string;
  inputVariables: Record<string, any>;
  executionMode: 'sync' | 'async';
}

class AgentWorkflowBridge {
  async invokeWorkflow(
    invocation: WorkflowInvocation
  ): Promise<WorkflowResult> {
    const workflow = await this.workflowEngine.getWorkflow(
      invocation.workflowId
    );
    return await workflow.execute(
      invocation.inputVariables
    );
  }
}

データストアとの連携では、エージェントが RAG(Retrieval-Augmented Generation)機能を活用し、ナレッジベースから関連情報を取得して応答の精度を向上させます。

ワークフローエンジンの仕組み

ワークフロー実行アーキテクチャ

Dify のワークフローエンジンは、DAG(有向非環グラフ)処理を基盤とした堅牢なオーケストレーションシステムです。複数のトリガー方式に対応し、柔軟で拡張性の高いワークフロー実行を実現しています。

ワークフローエンジンの内部アーキテクチャを以下の図で示します。

mermaidstateDiagram-v2
    [*] --> TriggerDetection
    TriggerDetection --> WorkflowLoading
    WorkflowLoading --> NodeValidation
    NodeValidation --> ExecutionPlanning
    ExecutionPlanning --> ParallelExecution
    ParallelExecution --> ConditionalBranching
    ConditionalBranching --> ErrorHandling
    ErrorHandling --> ResultAggregation
    ResultAggregation --> [*]

    ErrorHandling --> RetryLogic
    RetryLogic --> ParallelExecution

    ConditionalBranching --> ParallelExecution : 条件分岐
    ExecutionPlanning --> VariableManagement
    VariableManagement --> ParallelExecution

このワークフローエンジンは 3 つのトリガー方式を提供しています。

トリガー方式の詳細実装

**Human Trigger(ヒューマントリガー)**は、チャット入力やボタン押下など、ユーザーの直接的なアクションによって実行されます。

typescript// Human Triggerの実装例
interface HumanTriggerConfig {
  triggerType: 'chat' | 'button' | 'form';
  inputSchema: JSONSchema;
  validationRules: ValidationRule[];
}

class HumanTrigger {
  async execute(input: UserInput): Promise<TriggerResult> {
    // 入力検証
    const validatedInput = await this.validateInput(input);

    // ワークフロー実行開始
    return await this.startWorkflow(validatedInput);
  }
}

**Schedule Trigger(スケジュールトリガー)**では、時間ベースの自動実行が可能です。

typescript// Schedule Triggerの設定例
interface ScheduleConfig {
  type: 'hourly' | 'daily' | 'cron';
  cronExpression?: string;
  timezone: string;
  enabled: boolean;
}

// 毎日午前9時に実行する設定
const dailySchedule: ScheduleConfig = {
  type: 'cron',
  cronExpression: '0 9 * * *',
  timezone: 'Asia/Tokyo',
  enabled: true,
};

**Event Trigger(イベントトリガー)**は、外部システムからの Webhook 受信によって起動されます。

ノード処理の内部動作

ワークフローを構成する各ノードは、特定の機能を持つ独立したモジュールとして実装されています。

ノードタイプ機能実装特徴
Start/End ノードワークフローの開始・終了フロー制御、変数初期化
LLM ノードAI 推論処理モデル選択、プロンプト管理
ナレッジ検索ノードRAG 検索実行ベクター類似性検索
条件分岐ノードif/else 判定論理演算、変数評価
コード実行ノードカスタムロジックサンドボックス実行
HTTP リクエストノード外部 API 呼び出し認証、レート制限
typescript// LLMノードの実装例
interface LLMNodeConfig {
  modelProvider: 'openai' | 'anthropic' | 'local';
  modelName: string;
  temperature: number;
  maxTokens: number;
  systemPrompt: string;
}

class LLMNode {
  async execute(input: NodeInput): Promise<NodeOutput> {
    // プロンプト構築
    const prompt = this.buildPrompt(input.variables);

    // LLM実行
    const response = await this.llmProvider.generate(
      prompt
    );

    // 結果を次のノードに渡す
    return {
      content: response.content,
      usage: response.usage,
      variables: this.updateVariables(
        input.variables,
        response
      ),
    };
  }
}

条件分岐と並列処理

ワークフローエンジンの最も強力な機能の一つが、条件分岐と並列処理の組み合わせです。

typescript// 条件分岐の実装
interface ConditionalBranch {
  condition: string; // JavaScript式
  trueBranch: WorkflowNode[];
  falseBranch: WorkflowNode[];
}

class ConditionalNode {
  async execute(input: NodeInput): Promise<NodeOutput> {
    // 条件評価(サンドボックス内で安全に実行)
    const conditionResult = await this.evaluateCondition(
      this.config.condition,
      input.variables
    );

    // 条件に基づいて分岐選択
    const selectedBranch = conditionResult
      ? this.config.trueBranch
      : this.config.falseBranch;

    // 選択された分岐を実行
    return await this.executeBranch(selectedBranch, input);
  }
}

並列処理では、複数のノードを同時実行することで、処理時間の大幅な短縮を実現しています。

typescript// 並列実行の実装
class ParallelExecutor {
  async executeParallel(
    nodes: WorkflowNode[],
    input: NodeInput
  ): Promise<NodeOutput[]> {
    // 全ノードを並列実行
    const promises = nodes.map((node) =>
      node.execute(input)
    );

    // 全ての実行完了を待機
    const results = await Promise.allSettled(promises);

    // エラーハンドリングと結果統合
    return this.processResults(results);
  }
}

データストア設計と管理

データベース構成

Dify のデータストアは、統合ストレージアーキテクチャを採用し、TiDB を中核とした高性能なデータ管理システムを構築しています。この設計により、50 万近いデータベースコンテナを単一 TiDB に統合し、運用複雑性を大幅に削減しました。

データストアの構成を以下の図で示します。

mermaidgraph TB
    subgraph "Dify Data Store Architecture"
        subgraph "Storage Layer"
            TiDB[(TiDB Cluster)]
            VectorDB[(Vector Database)]
            DocumentStore[(Document Store)]
        end

        subgraph "Processing Layer"
            TextSplitter[Text Splitter]
            EmbeddingEngine[Embedding Engine]
            SearchEngine[Search Engine]
        end

        subgraph "Cache Layer"
            Redis[(Redis Cache)]
            MemoryCache[Memory Cache]
        end

        subgraph "Data Sources"
            Files[Files Upload]
            WebCrawl[Web Crawling]
            APIs[External APIs]
            Databases[External DBs]
        end
    end

    Files --> TextSplitter
    WebCrawl --> TextSplitter
    APIs --> TextSplitter
    Databases --> TextSplitter

    TextSplitter --> EmbeddingEngine
    EmbeddingEngine --> VectorDB
    EmbeddingEngine --> DocumentStore

    VectorDB --> TiDB
    DocumentStore --> TiDB

    SearchEngine --> VectorDB
    SearchEngine --> Redis
    SearchEngine --> MemoryCache

このアーキテクチャでは、ベクターストアとドキュメントストアが統合されており、効率的なデータ管理を実現しています。

キャッシュ戦略

Dify は多層キャッシュ戦略を採用し、検索性能の最適化を図っています。

typescript// キャッシュ戦略の実装
interface CacheStrategy {
  level: 'memory' | 'redis' | 'disk';
  ttl: number; // Time To Live (秒)
  maxSize: number;
  evictionPolicy: 'LRU' | 'LFU' | 'FIFO';
}

class CacheManager {
  private memoryCache: Map<string, CacheEntry>;
  private redisCache: RedisClient;

  async get(key: string): Promise<any> {
    // Level 1: Memory Cache
    let result = this.memoryCache.get(key);
    if (result) return result.value;

    // Level 2: Redis Cache
    result = await this.redisCache.get(key);
    if (result) {
      this.memoryCache.set(key, {
        value: result,
        timestamp: Date.now(),
      });
      return result;
    }

    // Level 3: Database
    return null;
  }
}

データフロー管理

RAG(Retrieval-Augmented Generation)実装では、以下のプロセスでデータフローを管理しています。

  1. 文書前処理段階: アップロードされた文書をテキストチャンクに分割
  2. 埋め込み生成段階: 各チャンクを埋め込みモデルでベクター変換
  3. インデックス作成段階: ベクターデータベースにインデックス登録
  4. 検索実行段階: クエリベクターとの類似性計算で関連チャンク取得
typescript// RAG処理の実装例
interface RAGProcessor {
  chunkSize: number;
  overlapSize: number;
  embeddingModel: string;
}

class RAGDataManager {
  async processDocument(document: Document): Promise<void> {
    // Step 1: テキスト分割
    const chunks = await this.splitDocument(document, {
      chunkSize: 1000,
      overlapSize: 200,
    });

    // Step 2: 埋め込み生成
    const embeddings = await Promise.all(
      chunks.map((chunk) => this.generateEmbedding(chunk))
    );

    // Step 3: データベース保存
    await this.saveToVectorDB(chunks, embeddings);
  }

  async search(
    query: string,
    limit: number = 5
  ): Promise<SearchResult[]> {
    // クエリの埋め込み生成
    const queryEmbedding = await this.generateEmbedding(
      query
    );

    // 類似性検索実行
    return await this.vectorDB.similaritySearch(
      queryEmbedding,
      limit
    );
  }
}

2025 年の拡張機能では、階層メタデータ対応、意味クラスタリング実装、複数ラベル付与とフィルタリング検索が追加され、より高度なデータ管理が可能になっています。

3 つのコンポーネント間の連携

エージェント ⇔ ワークフロー連携

Dify における最も革新的な機能の一つが、エージェントとワークフローの密接な連携です。この連携により、単純なタスク処理から複雑な業務プロセスまで、シームレスに対応できます。

以下の図は、エージェント、ワークフロー、データストア間の相互作用を示しています。

mermaidsequenceDiagram
    participant User as ユーザー
    participant Agent as エージェント
    participant Workflow as ワークフロー
    participant DataStore as データストア
    participant LLM as LLMモデル

    User->>Agent: タスク依頼
    Agent->>DataStore: 関連情報検索
    DataStore-->>Agent: 検索結果
    Agent->>LLM: 推論実行
    LLM-->>Agent: 判断結果

    alt 複雑なタスクの場合
        Agent->>Workflow: ワークフロー呼び出し
        Workflow->>DataStore: データ取得
        DataStore-->>Workflow: データ応答
        Workflow->>LLM: LLM処理
        LLM-->>Workflow: 処理結果
        Workflow-->>Agent: 完了通知
    end

    Agent-->>User: 最終結果

この連携メカニズムでは、エージェントが自律的に判断し、必要に応じてワークフローを呼び出すことができます。

typescript// エージェント内でのワークフロー呼び出し
class IntelligentAgent {
  async processComplexTask(
    task: Task
  ): Promise<TaskResult> {
    // タスクの複雑性を評価
    const complexity = await this.assessComplexity(task);

    if (complexity > this.WORKFLOW_THRESHOLD) {
      // 複雑なタスクはワークフローに委譲
      const workflowId = await this.selectOptimalWorkflow(
        task
      );
      return await this.workflowEngine.execute(workflowId, {
        input: task.input,
        context: task.context,
      });
    } else {
      // 単純なタスクは直接処理
      return await this.directProcess(task);
    }
  }
}

データストアとの相互作用

3 つのコンポーネントすべてがデータストアと密接に連携し、情報の一貫性と可用性を保証しています。

エージェントとデータストアの連携では、リアルタイムでのナレッジ検索と文脈理解が可能になります。

typescript// エージェントによるRAG検索
class AgentRAGIntegration {
  async enhanceResponseWithKnowledge(
    query: string
  ): Promise<EnhancedResponse> {
    // 関連ナレッジを検索
    const relevantDocs = await this.dataStore.search(
      query,
      {
        limit: 5,
        threshold: 0.8,
        filters: {
          category: this.currentContext.category,
          language: 'ja',
        },
      }
    );

    // LLMプロンプトに検索結果を統合
    const enhancedPrompt = this.buildPrompt(
      query,
      relevantDocs
    );

    return await this.llm.generate(enhancedPrompt);
  }
}

ワークフローとデータストアの連携では、処理中のデータ変更をリアルタイムで反映し、一貫性を保ちます。

イベント駆動アーキテクチャ

Dify のコンポーネント間連携は、イベント駆動アーキテクチャを基盤としています。この設計により、疎結合でありながら高度に協調するシステムを実現しています。

typescript// イベント駆動システムの実装
interface DifyEvent {
  type: string;
  source: 'agent' | 'workflow' | 'datastore';
  payload: any;
  timestamp: number;
  correlationId: string;
}

class EventBus {
  private subscribers: Map<string, EventHandler[]> =
    new Map();

  subscribe(
    eventType: string,
    handler: EventHandler
  ): void {
    const handlers = this.subscribers.get(eventType) || [];
    handlers.push(handler);
    this.subscribers.set(eventType, handlers);
  }

  async publish(event: DifyEvent): Promise<void> {
    const handlers = this.subscribers.get(event.type) || [];

    // 非同期でイベントハンドラを実行
    await Promise.all(
      handlers.map((handler) => handler.handle(event))
    );
  }
}

このイベント駆動システムにより、以下のような高度な連携が可能になります。

  • リアルタイム同期: データ変更が即座に全コンポーネントに反映
  • 非同期処理: 重い処理をバックグラウンドで実行
  • 障害隔離: 一つのコンポーネントの障害が他に波及しない
  • 拡張性: 新しいコンポーネントの追加が容易

パフォーマンスと拡張性

スケーラビリティ設計

Dify のスケーラビリティは、Beehive アーキテクチャによるモジュラー設計と、Kubernetes ベースの高可用性デプロイメントによって実現されています。

以下の図は、Dify のスケーラブルな展開構成を示しています。

mermaidgraph LR
    subgraph "Load Balancer Layer"
        ALB[Application Load Balancer]
    end

    subgraph "Frontend Tier"
        UI1[Web UI Pod 1]
        UI2[Web UI Pod 2]
        UI3[Web UI Pod 3]
    end

    subgraph "API Gateway Tier"
        API1[API Gateway Pod 1]
        API2[API Gateway Pod 2]
        API3[API Gateway Pod 3]
    end

    subgraph "Service Tier"
        Agent1[Agent Service Pod 1]
        Agent2[Agent Service Pod 2]
        Workflow1[Workflow Service Pod 1]
        Workflow2[Workflow Service Pod 2]
        DataStore1[DataStore Service Pod 1]
        DataStore2[DataStore Service Pod 2]
    end

    subgraph "Data Tier"
        TiDB_Master[(TiDB Master)]
        TiDB_Slave1[(TiDB Slave 1)]
        TiDB_Slave2[(TiDB Slave 2)]
        Redis_Cluster[(Redis Cluster)]
    end

    ALB --> UI1
    ALB --> UI2
    ALB --> UI3

    UI1 --> API1
    UI2 --> API2
    UI3 --> API3

    API1 --> Agent1
    API1 --> Workflow1
    API2 --> Agent2
    API2 --> Workflow2
    API3 --> DataStore1
    API3 --> DataStore2

    Agent1 --> TiDB_Master
    Agent2 --> TiDB_Slave1
    Workflow1 --> TiDB_Slave2
    DataStore1 --> Redis_Cluster

この構成では、各層が独立してスケールでき、トラフィック増加に柔軟に対応できます。

非同期処理最適化

2025 年のアップデートで実装された Async WorkflowRun/WorkflowNodeRun により、典型的なワークフローの実行時間がほぼ半減しました。

typescript// 非同期ワークフロー実行の実装
class AsyncWorkflowExecutor {
  async executeAsync(
    workflowId: string,
    input: WorkflowInput
  ): Promise<ExecutionToken> {
    // 実行トークン生成
    const token = this.generateExecutionToken();

    // バックグラウンドで非同期実行開始
    this.backgroundExecutor.execute(async () => {
      try {
        const result = await this.executeWorkflow(
          workflowId,
          input
        );
        await this.notifyCompletion(token, result);
      } catch (error) {
        await this.notifyError(token, error);
      }
    });

    return token;
  }

  async getExecutionStatus(
    token: ExecutionToken
  ): Promise<ExecutionStatus> {
    return await this.statusManager.getStatus(token);
  }
}

Celery を活用した Worker 処理により、CPU 集約的なタスクと I/O 集約的なタスクを適切に分散し、全体的なシステム効率を向上させています。

ボトルネック解析

Dify システムにおける主要なボトルネックポイントと、その対策について解説します。

ボトルネック箇所原因対策
LLM API 呼び出し外部 API のレイテンシ結果キャッシュ、並列処理
ベクター検索大規模データセットの類似性計算インデックス最適化、分散検索
データベースアクセス同時接続数の増大読み書き分離、コネクションプール
メモリ使用量大容量ドキュメントの処理ストリーミング処理、メモリプール
typescript// ボトルネック監視システム
interface PerformanceMetrics {
  responseTime: number;
  throughput: number;
  errorRate: number;
  resourceUtilization: ResourceUsage;
}

class PerformanceMonitor {
  async analyzeBottlenecks(): Promise<BottleneckReport> {
    const metrics = await this.collectMetrics();

    const bottlenecks = [];

    // レスポンス時間チェック
    if (
      metrics.responseTime > this.RESPONSE_TIME_THRESHOLD
    ) {
      bottlenecks.push({
        type: 'high_latency',
        severity: 'warning',
        component: this.identifySlowComponent(metrics),
      });
    }

    // リソース使用率チェック
    if (metrics.resourceUtilization.memory > 0.8) {
      bottlenecks.push({
        type: 'memory_pressure',
        severity: 'critical',
        recommendation: 'scale_horizontally',
      });
    }

    return {
      bottlenecks,
      recommendations:
        this.generateRecommendations(bottlenecks),
    };
  }
}

まとめ

Dify の内部アーキテクチャは、AI 開発プラットフォームとして求められる高性能、拡張性、保守性を巧妙に実現した設計となっています。

Beehive アーキテクチャにより実現されたモジュラー設計は、各コンポーネントの独立性を保ちながら、密接な連携を可能にしています。エージェントシステムの自律的判断機能、ワークフローエンジンの柔軟なオーケストレーション、データストアの高性能検索機能が有機的に結合し、従来の AI 開発プラットフォームでは困難だった複雑なユースケースにも対応できます。

特に注目すべきは、イベント駆動アーキテクチャによる疎結合設計です。これにより、システム全体の可用性を損なうことなく、個別コンポーネントの更新や拡張が可能になっています。また、TiDB を中核とした統合ストレージアーキテクチャは、運用複雑性を大幅に削減しながら、エンタープライズグレードの性能を提供しています。

2025 年の進化では、非同期処理最適化により実行時間が大幅に短縮され、MCP(Model Context Protocol)対応により外部システムとの統合がさらに容易になりました。これらの技術革新により、Dify は単なる AI 開発ツールから、包括的な AI エコシステムプラットフォームへと進化を遂げています。

今後の AI 開発において、Dify のアーキテクチャ設計は重要な参考となるでしょう。特に、スケーラビリティと保守性を両立させたモジュラー設計のアプローチは、他の AI プラットフォーム開発においても大いに活用できる知見と言えます。

関連リンク