MemGPT Sample について
Spring Bootで簡略化したMemGPTエージェントを実装し、RESTまたはMCPで提供する概念実証プロジェクトです。エージェントのメモリ機能を試す開発者向けで、どちらのインターフェースにも接続できるコマンドラインチャットアプリも含みます。
主な機能
- 01エージェントの設定と状態管理
- 02コアメモリとアーカイブメモリ
- 03メッセージの取得、要約、アーカイブ
- 04RESTおよびMCPサーバーインターフェース
- 05コマンドラインチャットアプリ
活用シーン
- 01簡略化したMemGPT実装の検証
- 02RESTまたはMCP経由でのエージェント実行
- 03エージェントメモリを使ったチャットの試用
MCP 対応
コアエージェントをMCPサーバーとして公開します。チャットアプリはサーバーと直接通信するか、コンテキストウィンドウのメモリ管理だけを任せて補完を独自に処理できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MemGPT サンプル
このプロジェクトは、MemGPT の研究論文 論文を簡略化して実装した概念実証です。この概念をエージェントとして実装し、シンプルな REST サービスまたはMCPサーバーとして統合する方法を紹介します。
概要
このプロジェクトでは、Spring Boot と Spring AI を使用して MemGPT の概念を実装し、その機能を REST サービスおよび MCP サーバーとして公開します。さらに、どちらの仕組みでもエージェントと連携できるシンプルなコマンドラインのチャットボットアプリケーションも含まれています。プロジェクトは次のサブプロジェクトで構成されています。
- core-agent:MemGPT のインターフェースを定義して実装します。設定 API も含まれています。
- restful-agent-app:エージェントをラップし、シンプルな REST インターフェースで公開するサービスです。
- memgpt-mcp-server:エージェントをラップし、MCP サーバーとして公開するサービスです。
- simple-chat-bot-app:REST または MCP インターフェースを介してエージェントと通信する、コマンドラインベースのチャットアプリケーションです。
前提条件
- Java 17 以降
- Gradle
- OpenAI API キー
コアエージェント
core-agent は、MemGPT エージェントのインターフェースと実装を構成するコンポーネントです。次の項目を含むエージェントの設定と状態を維持します。
- システムプロンプト
- ツール
- コアメモリ
- アーカイブメモリ
- コンテキストウィンドウ外のメッセージを含む、メッセージの永続化
また、次の機能を含むエージェントの中核機能を担います。
- メッセージのコンパイル
- LLM との通信
- ツール呼び出し
- コンテキストウィンドウの自己編集を含むメモリ管理
- メッセージの取得とアーカイブ
- メッセージの要約
エージェントは、外部に向けて主に次の 3 つのインターフェースを公開します。
- AgentManager:エージェントインスタンスを設定し、維持します。
- AgentLoader:エージェントインスタンスを生成します。
- Agent:エージェントの中核となるチャット機能を定義します。
アプリケーションの実行
simple-chat-bot-app は、restful-agent-app または mgmgpt-mcp-server のいずれかと通信します。ChatBot アプリケーションが通信するサーバーアプリケーションを選び、そのアプリケーションを設定して実行してください。その後、選択したサーバーアプリケーションを使用するように ChatBot アプリケーションを設定し、実行します。
サーバーアプリケーション
MCP サーバーアプリケーションと REST サーバーアプリケーションは、どちらもコアエージェントをラップするだけなので、設定は同一です。次の手順に従って、いずれかのサーバーアプリケーションを実行してください。
- OpenAPI Key 環境変数を設定します
export OPENAI_API_KEY=your-api-key
- アプリケーションをビルドします
./gradlew :restful-agent-app:build
または
./gradlew :memgpt-mcp-server:build
- サーバーアプリケーションを実行します
java -jar ./restful-agent-app/build/libs/restful-agent-app-0.0.1-SNAPSHOT.jar
または
java -jar ./memgpt-mcp-server/build/libs/memgpt-mcp-server-0.0.1-SNAPSHOT.jar
サーバーアプリケーションが起動し、ChatBot アプリケーションからのリクエストを受け付ける準備が整います。
アーカイブメモリ
MemGPT のアーカイブメモリには、ベクトルストアと埋め込みモデルが必要です。デフォルトではアーカイブメモリは無効ですが、pgvector Spring プロファイルを有効にすると利用できます。埋め込みプロバイダーとして OpenAI を、データベースとして postgres を使用する場合、追加の設定は不要です。それ以外のプロバイダーでは追加の設定が必要になる場合がありますが、その説明はこの README の対象範囲外です。
チャットボットアプリケーション
チャットボットアプリケーションは、REST アプリケーションまたは MCP サーバーアプリケーションのどちらとも通信できます。デフォルトでは、REST アプリケーションとの通信を試みます。MCP サーバーを使用する場合、チャットボットは MCP サーバーと直接通信してコンテキストウィンドウを管理し、チャットの応答を生成することも、カスタムの Spring AI Advisor を使用してコンテキストウィンドウのメモリ管理のみを行い、チャットの応答は自身で生成することもできます。
チャットボットアプリケーションを設定して実行するには、次の手順に従います。
- OpenAPI キーの環境変数を設定します
export OPENAI_API_KEY=your-api-key
- 対象サーバーアプリケーションを設定します(REST アプリケーションを対象とする場合は省略可能です)。
simple-chat-bot-app\src\main\resource\application.yaml ファイルを編集し、対象のサーバーアプリケーションに応じて spring.profiles.active の値を次のように更新します。
- rest(デフォルト): MemGPT サーバーの REST API を通じてチャットの応答を生成します。
- mcp: MemGPT サーバーの MCP API を通じてチャットの応答を生成します。
- restadvisor: LLM と直接通信してチャットの応答を生成し、MemGPT サーバーは RESTful API を通じたメモリ管理のみに使用します。
- mdcadvisor: LLM と直接通信してチャットの応答を生成し、MemGPT サーバーは MCP API を通じたメモリ管理のみに使用します。
- アプリケーションをビルドします
./gradlew :simple-chat-bot-app:build
- チャットボットアプリケーションを実行します
java -jar ./simple-chat-bot-app/build/libs/simple-chat-bot-app-0.0.1-SNAPSHOT.jar
アプリケーションでは最初にユーザー ID の入力を求められます。任意の値を指定できます。これは主にチャットセッションの一意な識別子として使用されます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。