分散人工知能：黒板モデル



## 黒板モデル（Blackboard Model）
複数のコンポーネント（エージェントや知識源）が共有のデータ構造（黒板）を用いて問題を解決するためのAIのアーキテクチャです。このモデルでは、各エージェントは黒板上のデータを監視し、そのデータに基づいて独立して動作し、黒板に情報を追加または修正します。エージェント間で直接通信するのではなく、共有された黒板を通じて協調して作業します。

## 黒板モデルの特徴

特徴は以下の通りです。

**共有データ構造**： 黒板は共有データ構造で、全てのエージェントが情報を読み書きする場所です。

**モジュラー性**： システムは独立したエージェントで構成されており、各エージェントは特定のタスクや問題領域を担当します。

**動的な相互作用**： エージェントは黒板上の情報の変化に基づいて動作を決定し、黒板に新しい情報を書き込むことで他のエージェントに影響を与えます。

**柔軟性と適応性**： 黒板モデルは、異なる種類の問題や状況に対してエージェントが適応し、協力して作業することを可能にします。


特に複雑な問題や多分野にまたがるタスクに適しており、AIの研究や実用的なシステム開発で応用されています。

# 現実世界に例えると...

黒板モデルを現実世界に例えるなら、大規模なプロジェクトに取り組む多様な専門家のチームが集まる状況に似ています。この例えにおいて、黒板はプロジェクトのステータスや情報を共有する中央の掲示板となります。


以下に具体例を示します。

**プロジェクトチーム**： それぞれ異なる専門分野のエキスパートが、共通の目標に向けて協力します。黒板モデルでは、これらの専門家が個々のエージェントに相当します。

**中央掲示板（黒板）**： チームメンバーが情報を共有し、プロジェクトの進捗状況や重要なデータを掲示する場所です。プロジェクトに関するすべての重要な情報がここに集約され、メンバーはここから必要な情報を取得します。

**協調とコミュニケーション**： チームメンバーは中央掲示板を通じて間接的にコミュニケーションを取り、情報を共有します。個々の専門家は自分の知識とスキルを活用して情報を解析し、新たな洞察や提案を掲示板に追加します。

**動的な進化**： プロジェクトの進行に伴い、掲示板上の情報は常に更新されます。新しいデータが追加されたり、新たな問題が発生したりすると、チームメンバーはそれに対応して新しいアクションをとります。

```mermaid
graph TD
    A[エージェントA: 専門家1] -->|情報を読み書きする| B[中央の黒板]
    C[エージェントB: 専門家2] -->|情報を読み書きする| B[中央の黒板]
    D[エージェントC: 専門家3] -->|情報を読み書きする| B[中央の黒板]

    B -.->|情報を反映する| A
    B -.->|情報を反映する| C
    B -.->|情報を反映する| D

```

## 黒板に階層を設ける
黒板モデルにおける黒板の階層性を以下のように例に示します。

| 分類       | 知識源名          | 機能              | 説明                                                  |
|----------|----------------|-----------------|----------------------------------------------------|
| 高レベル    | 戦略的決定        | ゴール設定と計画       | このレベルの知識源は、プロジェクトの全体的な目標と戦略を定義します。          |
| 中レベル    | タスク管理        | タスクの分配と調整     | ここでは、具体的なタスクが割り当てられ、エージェント間での協力が調整されます。   |
| 低レベル    | 問題解決エージェント | 実際の問題解決        | 各エージェントはこのレベルで具体的な問題を解決し、解決策を黒板に提供します。    |
| データレベル | データ収集        | 情報収集と更新       | 実世界のデータやプロジェクトの進捗状況など、必要な情報が収集・更新されます。   |


エージェントの動きは以下のようになります。

```mermaid
graph TD
    subgraph "高レベルの黒板"
        B1[戦略的決定: ゴール設定と計画]
    end

    subgraph "中レベルの黒板"
        B2[タスク管理: タスクの分配と調整]
    end

    subgraph "低レベルの黒板"
        B3[問題解決エージェント: 実際の問題解決]
    end

    subgraph "データレベルの黒板"
        B4[データ収集: 情報収集と更新]
    end

    A[エージェントA: 専門家1] -->|情報を読み書きする| B3
    C[エージェントB: 専門家2] -->|情報を読み書きする| B3
    D[エージェントC: 専門家3] -->|情報を読み書きする| B3

    B3 -->|情報を反映する| B2
    B2 -->|情報を反映する| B1
    B1 -->|全体の戦略を伝達する| B2
    B2 -->|タスクの指示を伝達する| B3
    B3 -->|情報を反映する| B4

    B4 -->|情報を提供する| A
    B4 -->|情報を提供する| C
    B4 -->|情報を提供する| D

```

```mermaid

graph LR
    PM[USER]

    subgraph フロントエンド
        UI["UI<br>AWS Amplify/Elastic Beanstalk"]
    end

    subgraph バックエンド
        BB["黒板<br>DynamoDB"]
        KS1["エージェント1<br>Amazon EC2/Lambda"]
        KS2["エージェント2<br>Amazon EC2/Lambda"]
        KS3["エージェント3<br>Amazon EC2/Lambda"]
        SCH["実行スケジューラ（Scheduler）<br>AWS Step Functions"]
        DB["データベース／記憶ストレージ<br>DynamoDB"]
    end

    SCH -->|制御| KS1
    SCH -->|制御| KS2
    SCH -->|制御| KS3
    KS1 -->|読み書き| BB
    KS2 -->|読み書き| BB
    KS3 -->|読み書き| BB
    BB -->|状態情報| SCH
    UI -->|入力| BB
    BB -->|出力| UI
    DB -->|データ提供| BB
    BB -->|データ保存| DB
    PM -->|インタラクション| UI


```

# 問題領域の分類



| 項目           | CA/NA（完全正確、ほぼ自律）         | FA/C（機能的正確、協力的）           |
|--------------|---------------------------------|---------------------------------|
| **入力データ**     | 高精度、詳細なデータが必要            | 汎用的なデータ、状況に応じたデータが使用される |
| **中間データ**     | 複雑な処理と分析による中間データ       | 単純な処理で得られる中間データ              |
| **最終結果**     | 高い精度と信頼性の結果               | 機能的に適切な結果、柔軟な解釈可能          |
| **データの所在**   | 主にローカルシステムに依存            | 分散システムや外部システムとの連携          |
| **通信同期**    | 自律的動作のため最小限の通信          | 頻繁な通信と協調が必要                      |
| **通信方式**    | 限定的または必要最小限の通信          | 協力的な環境でのオープンな通信              |
| **問題解決**    | 独立して高度な問題解決能力            | 協力とチームワークによる問題解決            |


## 併せて読みたい記事

https://qiita.com/yakigac/items/1a4e3983031f385719e4

https://speakerdeck.com/masatoto/llmmarutiezientowofu-kan-suru