MemGPT样本
该项目是一个概念验证,实现了MemGPT研究的简化和简化实现 纸张。它将概念实现为代理,并展示了它如何 可以作为简单的REST服务或作为 主控程序 服务器。
概述
该项目使用Spring Boot和Spring AI实现了MemGPT概念,并将其功能公开为 REST服务和MCP服务器。此外,它还包含一个简单的ChatBot命令行应用程序,可以 将代理与这些机制中的任何一个集成。该项目由以下子项目组成:
- 核心代理:定义并实现MemGPT接口。这包括配置API。
- restful代理应用程序:围绕代理的包装服务,通过简单的REST接口公开它。
- memgpt-mcp服务器:围绕代理的包装器服务,将其作为mcp服务器公开。
- 简单聊天机器人应用程序:一种基于命令行的聊天应用程序,通过REST或MCP接口与代理通信。
先决条件
- Java 17或更高版本
- Gradle
- OpenAI API密钥
核心代理
核心代理是组成MemGPT代理的接口和实现的组件。它负责维护 代理的配置和状态,包括:
- 系统提示
- 工具
- 磁芯存储器
- 档案存储器
- 消息持久性,包括上下文窗口外的消息
它还负责核心代理功能,包括但不限于:
- 消息编译
- LLM通信
- 工具调用
- 内存管理包括上下文窗口自编辑
- 消息检索和归档
- 消息摘要
在外部,代理通过三个主要接口公开其功能:
- 代理管理器:配置和维护代理实例。
- 代理加载器:实例化代理实例。
- 代理:定义核心代理聊天功能。
运行应用程序
简单的聊天机器人应用程序与restful代理应用程序或mgmgpt-mcp服务器通信。选择要使用的服务器应用程序 与聊天机器人应用程序一样,配置该应用程序并运行它。然后,您将配置聊天机器人应用以使用服务器应用程序 你可以选择并运行它。
服务器应用程序
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 弹簧轮廓。如果你正在使用OpenAI 您的嵌入提供程序和postgres作为您的数据库,不需要额外的配置。其他供应商 可能需要额外的配置,这超出了本README的范围。
聊天机器人应用程序
ChatBot应用程序可以与REST应用程序或MCP服务器应用程序通信;默认情况下 它将尝试与REST应用程序通信。在MCP服务器上执行时,ChatBot可以 直接与MCP服务器通信,管理上下文窗口并创建聊天完成, 或者,它可以使用自定义的Spring AI Advisor来仅管理上下文窗口内存并处理创建聊天完成 本身。
执行以下步骤以配置和运行ChatBot应用程序:
- 设置OpenAPI Key环境变量
export OPENAI_API_KEY=your-api-key- 配置目标服务器应用程序(如果以REST应用程序为目标,则可选)。
编辑 simple-chat-bot-app\src\main\resource\application.yaml 文件并更新 spring.profiles.active 使用以下值进行设置 这取决于目标服务器应用。
- rest(默认): 通过REST API与MemGPT服务器生成聊天完成。
- mcp: 通过带有MemGPT服务器的MCP API生成聊天完成。
- 恢复顾问: 通过直接与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,可以是任何东西;它主要用作聊天会话的唯一标识符。

