Milvus
Zilliz
  • Home
  • Blog
  • OpenAgents x Milvus: メモリを共有する、よりスマートなマルチエージェントシステムを構築する方法

OpenAgents x Milvus: メモリを共有する、よりスマートなマルチエージェントシステムを構築する方法

  • Tutorials
November 24, 2025
Min Yin

ほとんどの開発者は、エージェント・システムを単一のエージェントから始め、後になって、基本的に非常に高価なチャットボットを構築してしまったことに気づきます。単純なタスクの場合、ReActスタイルのエージェントは問題なく動作するが、すぐに限界に達する。並行してステップを実行することができず、長い推論チェーンを見失い、ミックスに多くのツールを追加するとバラバラになる傾向がある。マルチエージェントのセットアップは、これを解決することを約束するが、協調のオーバーヘッド、もろいハンドオフ、モデルの品質を静かに侵食する共有コンテキストの膨張といった、独自の問題をもたらす。

OpenAgentsは、マルチエージェントシステムを構築するためのオープンソースのフレームワークであり、AIエージェントが協力し、リソースを共有し、永続的なコミュニティ内で長期的なプロジェクトに取り組む。単一の中央オーケストレーターの代わりに、OpenAgentsはエージェントがより分散された方法でコラボレーションすることを可能にします。

Milvusベクトルデータベースと組み合わせることで、このパイプラインはスケーラブルで高性能な長期メモリレイヤーを獲得します。Milvusは、高速なセマンティック検索、HNSWやIVFのような柔軟なインデックス作成、パーティショニングによるクリーンな分離でエージェントのメモリを強化し、エージェントがコンテキストに溺れたり、お互いのデータを踏んだりすることなく、知識を保存、検索、再利用できるようにします。

この投稿では、OpenAgentsがどのように分散マルチエージェントコラボレーションを可能にするのか、なぜMilvusがスケーラブルなエージェントメモリの重要な基盤なのか、そして、どのようにそのようなシステムを構築するのか、順を追って説明します。

実世界のエージェントシステム構築における課題

現在主流のエージェントフレームワークの多く(LangChain、AutoGen、CrewAIなど)は、タスク中心のモデルで構築されています。エージェントのセットを立ち上げ、彼らに仕事を与え、ワークフローを定義し、実行させます。これは、狭い範囲や短期間のユースケースではうまく機能するが、実際の生産環境では、3つの構造的な限界を露呈する:

  • 知識はサイロ化されたまま。エージェントの経験は、そのエージェント自身のデプロイメントに限定される。エンジニアリングのコードレビューエージェントは、実現可能性を評価するプロダクトチームのエージェントと学んだことを共有しません。すべてのチームがゼロから知識を再構築することになり、非効率でもろい。

  • コラボレーションは硬直的である。マルチエージェントフレームワークであっても、協力は通常、事前に定義されたワークフローに依存する。コラボレーションが変化する必要があるとき、これらの静的なルールは適応できず、システム全体の柔軟性を低下させる。

  • 永続的な状態の欠如。ほとんどのエージェントは、開始→実行→シャットダウンというシンプルなライフサイクルに従う。エージェントは、コンテキスト、関係、決定、インタラクションの履歴など、実行の間にすべてを忘れてしまう。永続的な状態がなければ、エージェントは長期的な記憶を構築することも、行動を進化させることもできない。

これらの構造的な問題は、エージェントをより広範な協調的ネットワークの参加者としてではなく、孤立したタスク実行者として扱うことから生じる。

OpenAgentsチームは、将来のエージェントシステムには、より強力な推論以上のものが必要だと考えています。エージェントがお互いを発見し、関係を構築し、知識を共有し、ダイナミックに協働できるメカニズムが必要なのです。そして決定的に重要なのは、これは単一の中央コントローラに依存すべきではないということです。インターネットが機能するのは、それが分散型だからであり、単一のノードがすべてを決定することはなく、システムは成長するにつれてより強固でスケーラブルになる。マルチエージェントシステムは、同じ設計原理から恩恵を受けています。これが、OpenAgentsが万能のオーケストレーターという考えを取り除き、代わりに分散化されたネットワーク主導の協力を可能にする理由です。

OpenAgentsとは?

OpenAgentsは、AIエージェントネットワークを構築するためのオープンソースのフレームワークであり、AIエージェントが協力してリソースを共有し、長期的なプロジェクトに取り組むオープンなコラボレーションを可能にします。エージェントが何百万もの他のエージェントとオープンにコラボレーションし、永続的に成長するコミュニティを形成する、エージェントのインターネットのインフラを提供します。技術レベルでは、システムは3つのコア・コンポーネントを中心に構成されている:エージェントネットワーク、ネットワークモッズ、トランスポートです。

1.エージェントネットワークコラボレーションのための共有環境

エージェントネットワークは、複雑なタスクを解決するために、複数のエージェントが接続、通信、共同作業ができる共有環境です。主な特徴は以下の通りです:

  • 永続的な運用:一度作成されたネットワークは、単一のタスクやワークフローから独立してオンライン状態を維持します。

  • 動的エージェント:エージェントは、ネットワークIDを使用していつでも参加できます。

  • マルチプロトコルのサポート:統一された抽象化レイヤーは、WebSocket、gRPC、HTTP、libp2p による通信をサポートします。

  • 自律的な設定:各ネットワークは、独自の権限、ガバナンス、およびリソースを維持します。

たった 1 行のコードで Network を立ち上げることができ、どのエージェントも標準インタフェースからすぐに参加できます。

2.ネットワークモッズ:コラボレーションのためのプラグイン可能な拡張機能

Mods は、コアシステムから切り離されたコラボレーション機能のモジュールレイヤーを提供します。各ユースケースに合わせたコラボレーションパターンを可能にします。

Mod目的ユースケース
ワークスペースメッセージングリアルタイムのメッセージコミュニケーションストリーミング応答、インスタントフィードバック
フォーラム非同期ディスカッションプロポーザルレビュー、複数ラウンドの審議
ウィキ共有知識ベース知識集約、文書コラボレーション
ソーシャル関係グラフエキスパートルーティング、トラストネットワーク

すべてのModは統一されたイベントシステム上で動作するため、必要なときにいつでもフレームワークを拡張したり、カスタムビヘイビアを導入したりすることが容易です。

3.トランスポートプロトコルに依存しない通信チャネル

トランスポートは、異種エージェントが OpenAgents ネットワーク内で接続し、メッセージを交換するための通信プロトコルです。OpenAgents は、同じネットワーク内で同時に実行できる複数のトランスポートプロトコルをサポートしています:

  • HTTP/REST(幅広い、言語横断的な統合のために

  • 低レイテンシ、双方向通信のためのWebSocket

  • 大規模クラスタに適した高性能 RPC 用gRPC

  • 分散型ピアツーピアネットワーキングのためのlibp2p

  • A2A: エージェント間通信のために特別に設計された新しいプロトコル。

すべてのトランスポートは、統一されたイベントベースのメッセージフォーマットで動作し、プロトコル間のシームレスな変換を可能にします。ピアエージェントがどのプロトコルを使用するか心配する必要はありません-フレームワークが自動的に処理します。どんな言語やフレームワークで構築されたエージェントでも、既存のコードを書き換えることなく、OpenAgents ネットワークに参加することができます。

OpenAgentsとMilvusの統合によるエージェントの長期記憶

OpenAgentsはエージェントがどのようにコミュニケーションし、お互いを発見し、コラボレーションするかという課題を解決しますが、コラボレーションだけでは十分ではありません。エージェントは、洞察、意思決定、会話履歴、ツールの結果、ドメイン固有の知識を生成します。永続的なメモリレイヤーがなければ、エージェントがシャットダウンした瞬間にそのすべてが蒸発してしまう。

そこでMilvusが不可欠となる。Milvusは、エージェントとの対話を耐久性があり再利用可能なメモリに変えるために必要な、高性能なベクトルストレージとセマンティック検索を提供します。OpenAgentsネットワークに統合されると、3つの大きな利点があります:

Milvusは、HNSWやIVF_FLATのようなインデックスアルゴリズムを使用して、高速なセマンティック検索を提供します。エージェントはキーワードではなく、意味に基づいて最も関連性の高い過去の記録を検索することができ、以下のことが可能になります:

  • 以前の決定や計画を思い出す、

  • 作業の繰り返しを避ける、

  • セッションをまたいだ長期的なコンテキストの維持。

これは、エージェントの記憶のバックボーンである、高速で、関連性のある、文脈に沿った検索である。

2.億スケールの水平スケーラビリティ

実際のエージェントネットワークは大量のデータを生成します。Milvusは、このスケールで快適に動作するように構築されており、以下のものを提供します:

  • 数十億のベクトルに対する保存と検索、

  • < 高スループットのTop-K検索でも30ミリ秒以下のレイテンシ、

  • 需要の増加に応じてリニアにスケールする完全分散アーキテクチャ。

数十人のエージェントでも、数千人のエージェントでも、Milvusは高速で一貫性のある検索を実現します。

3.マルチテナント分離

Milvusは、単一のコレクション内のメモリをセグメント化する軽量なパーティショニングメカニズムであるパーティションキーにより、きめ細かなマルチテナント分離を提供します。これにより

  • 異なるチーム、プロジェクト、またはエージェントコミュニティが独立したメモリ空間を維持することができます、

  • 複数のコレクションを管理するのに比べ、オーバーヘッドを劇的に削減、

  • 共有ナレッジが必要な場合、オプションでパーティションをまたいだ検索が可能。

この分離は、検索速度を犠牲にすることなくデータの境界を尊重しなければならない大規模なマルチエージェント展開において極めて重要です。

OpenAgentsは、Milvus APIを直接呼び出すカスタムModを通してMilvusに接続します。エージェントメッセージ、ツール出力、インタラクションログは自動的にベクターに埋め込まれ、Milvusに保存されます。開発者はカスタマイズすることができます:

  • 埋め込みモデル

  • 保存スキーマとメタデータ

  • そして検索戦略(ハイブリッド検索、分割検索など)をカスタマイズすることができます。

これにより、各エージェントコミュニティは、スケーラブルで、永続的で、セマンティック推論に最適化されたメモリレイヤーを得ることができます。

OpenAgentとmilvusでマルチエージェントチャットボットを構築する方法

具体的にするために、Python の専門家、データベースの専門家、DevOps エンジニアなど、複数の専門家エージェントが協力して技術的な質問に回答する開発者サポートコミュニティを構築するデモを見てみましょう。単一の過重労働のジェネラリストエージェントに依存する代わりに、各エキスパートはドメイン固有の推論に貢献し、システムは自動的に最適なエージェントにクエリをルーティングします。

この例では、MilvusをOpenAgentsのデプロイメントに統合し、技術的なQ&Aのための長期記憶を提供する方法を示します。エージェントとの会話、過去の解決策、トラブルシューティングのログ、ユーザーからの問い合わせはすべてベクトル埋め込みに変換され、Milvusに保存されます:

  • 以前の回答を記憶

  • 以前の技術的な説明を再利用

  • セッション間の一貫性の維持

  • より多くのインタラクションが蓄積されるにつれて改善されます。

前提条件

  • python3.11+

  • conda

  • Openai-key

1.依存関係の定義

プロジェクトに必要なPythonパッケージを定義します:

# Core framework
openagents>=0.6.11
# Vector database
pymilvus>=2.5.1
# Embedding model
sentence-transformers>=2.2.0
# LLM integration
openai>=1.0.0
# Environment config
python-dotenv>=1.0.0

2.環境変数

環境設定のテンプレートです:

# LLM configuration (required)
OPENAI_API_KEY=your_openai_api_key_here
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4o
# Milvus configuration
MILVUS_URI=./multi_agent_memory.db
# Embedding model configuration
EMBEDDING_MODEL=text-embedding-3-large
EMBEDDING_DIMENSION=3072
# Network configuration
NETWORK_HOST=localhost
NETWORK_PORT=8700
STUDIO_PORT=8050

3.OpenAgents ネットワークの設定

エージェントネットワークの構造と通信設定を定義します:

# Network transport protocol (HTTP on port 8700)
# Multi-channel messaging system (general, coordination, expert channels)
# Agent role definitions (coordinator, python_expert, etc.)
# Milvus integration settings
network:
  name: "Multi-Agent Collaboration Demo"
  transports:
    - type: "http"
      config:
        port: 8700
        host: "localhost"
  mods:
    - name: "openagents.mods.workspace.messaging"
      config:
        channels:
          - name: "general"          # User question channel
          - name: "coordination"     # Coordinator channel
          - name: "python_channel"   # Python expert channel
          - name: "milvus_channel"   # Milvus expert channel
          - name: "devops_channel"   # DevOps expert channel
  agents:
    coordinator:
      type: "coordinator"
      description: "Coordinator Agent, responsible for analyzing queries and dispatching tasks to expert agents"
      channels: ["general", "coordination"]
    python_expert:
      type: "expert"
      domain: "python"

4.マルチエージェントコラボレーションの実装

以下は、コアのコードスニペットです(完全な実装ではありません)。

# SharedMemory: Milvus’s SharedMemory system
# CoordinatorAgent: Coordinator Agent, responsible for analyzing queries and dispatching tasks to expert agents
# PythonExpertAgent: Python Expert
# MilvusExpertAgent: Milvus Expert
# DevOpsExpertAgent: DevOps Expert
import os
import asyncio
import json
from typing import List, Dict
from dotenv import load_dotenv
from openagents.agents.worker_agent import WorkerAgent
from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType
import openai
load_dotenv()
class SharedMemory:
    """SharedMemory in Milvus for all Agents"""
    def __init__(self):
        connections.connect(uri="./multi_agent_memory.db")
        self.setup_collections()
        self.openai_client = openai.OpenAI(
            api_key=os.getenv("OPENAI_API_KEY"),
            base_url=os.getenv("OPENAI_BASE_URL")
        )
    def setup_collections(self):
        """Create memory collections: expert knowledge, collaboration history, problem solutions"""
        collections = {
            "expert_knowledge": "expert knowledge",
            "collaboration_history": "collaboration history", 
            "problem_solutions": "problem solutions"
        }
        # Code to create vector collections...
    async def search_knowledge(self, query: str, collection_name: str):
        """Search for relevant knowledge"""
        # Vector search implementation...
    async def store_knowledge(self, agent_id: str, content: str, metadata: dict, collection_name: str):
        """Store knowledge"""
        # Store into the vector database...
class CoordinatorAgent(WorkerAgent):
    """Coordinator Agent - analyzes questions and coordinates other Agent"""
    def __init__(self):
        super().__init__(agent_id="coordinator")
        self.expert_agents = {
            "python": "python_expert",
            "milvus": "milvus_expert", 
            "devops": "devops_expert"
        }
    async def analyze_question(self, question: str) -> List[str]:
        """Determine which experts are needed for the question"""
        keywords = {
            "python": ["python", "django", "flask", "async"],
            "milvus": ["milvus", "vector", "index", "performance"],
            "devops": ["deployment", "docker", "kubernetes", "operations"]
        }
        # Keyword matching logic...
        return needed_experts
    async def coordinate_experts(self, question: str, needed_experts: List[str]):
        """Coordinate collaboration among expert Agent"""
        # 1. Notify experts to begin collaborating
        # 2. Dispatch tasks to each expert
        # 3. Collect expert responses
        # 4. Return expert opinions
    async def on_channel_post(self, context):
        """Main logic for handling user questions"""
        content = context.incoming_event.payload.get('content', {}).get('text', '')
        if content and not content.startswith('🎯'):
            # 1. Analyze question → 2. Coordinate experts → 3. Merge answers → 4. Reply to user
class PythonExpertAgent(WorkerAgent):
    """Python Expert Agent"""
    async def analyze_python_question(self, question: str) -> str:
        """Analyze Python-related questions and provide expert advice"""
        # 1. Search for relevant experience
        # 2. Use LLM to generate expert response
        # 3. Store result in collaboration history
        return answer
# Start all Agens
async def run_multi_agent_demo():
    coordinator = CoordinatorAgent()
    python_expert = PythonExpertAgent()
    milvus_expert = MilvusExpertAgent()
    devops_expert = DevOpsExpertAgent()
    # Connect to the OpenAgents network
    await coordinator.async_start(network_host="localhost", network_port=8700)
    # ... Start other Agent
    while True:
        await asyncio.sleep(1)
if __name__ == "__main__":
    asyncio.run(run_multi_agent_demo())

5.仮想環境の作成と起動

conda create -n openagents
conda activate openagents

依存関係のインストール

pip install -r requirements.txt

API キーの設定

cp .env.example .env

OpenAgents ネットワークの開始

openagents network start .

マルチエージェント・サービスの開始

python multi_agent_demo.py

OpenAgents Studio を起動する

openagents studio -s

スタジオにアクセス

http://localhost:8050

エージェントとネットワークのステータスを確認する

まとめ

OpenAgentsは、エージェント同士の発見、コミュニケーション、コラボレーションを可能にするコーディネーションレイヤーを提供し、Milvusは知識をどのように保存、共有、再利用するかという同様に重要な問題を解決します。Milvusは、高性能なベクトル記憶レイヤーを提供することで、エージェントが永続的なコンテキストを構築し、過去のやりとりを思い出し、時間をかけて専門知識を蓄積することを可能にする。この2つを組み合わせることで、AIシステムは孤立したモデルの限界を超え、真のマルチエージェントネットワークのより深い協調の可能性へと押し上げられる。

もちろん、トレードオフのないマルチエージェントアーキテクチャはありません。エージェントを並列に実行すると、トークンの消費量が増え、エージェント間でエラーが連鎖し、同時の意思決定が時として衝突を引き起こす可能性がある。これらは現在研究中の分野であり、現在も改善中であるが、協調し、記憶し、進化できるシステムを構築することの価値を減じるものではない。

🚀 エージェントに長期記憶を持たせる準備はできていますか?

Milvusを探求し、ご自身のワークフローと統合してみてください。

ご質問がある場合、または機能について詳しく知りたい場合は、Discordチャンネルにご参加ください。私たちの Discordチャンネルに参加するか、 GitHubに課題を提出してください。また、 Milvusオフィスアワーを通して、20分間の1対1のセッションを予約し、洞察やガイダンス、質問への回答を得ることもできます。

    Try Managed Milvus for Free

    Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

    Get Started

    Like the article? Spread the word

    続けて読む