项目简介
Memorizer是一个基于.NET构建的服务,旨在为AI代理提供一个持久化的记忆系统。它利用PostgreSQL结合pgvector扩展来存储带有向量嵌入的结构化记忆,并支持高效的语义搜索、记忆检索、关系构建等功能,为AI应用提供强大的上下文服务。Memorizer与Model Context Protocol (MCP) 集成,允许AI客户端通过标准协议轻松访问其能力,同时提供一个Web UI方便人工管理记忆。
主要功能点
- 记忆存储: 存储带有类型、内容、来源、标题、标签和置信度分数的结构化记忆。支持将Markdown、代码或普通文本作为内容。
- 语义搜索: 通过向量相似度搜索记忆,高效找到与自然语言查询相关的记忆。
- 记忆检索: 根据唯一ID或通过分页机制检索特定记忆,支持批量获取多个记忆。
- 关系构建: 在记忆之间建立自定义类型(如“父子”、“引用”、“相关”)的关系,形成知识图谱,增强上下文理解能力。
- Web UI: 提供用户友好的Web界面,方便人工查看、创建、编辑、删除和搜索记忆,并查看统计信息。
- MCP集成: 通过JSON-RPC协议向LLM客户端提供标准化、可调用的工具接口,实现AI代理对记忆服务的无缝集成。
- 背景任务: 支持后台自动为无标题记忆生成标题、为记忆生成元数据嵌入等任务。
安装步骤
最简单的安装方式是使用Docker Compose,它将启动所有必要的服务:
- 确保您的系统已安装Docker和Docker Compose。
- 在终端中导航到项目根目录(或包含 'docker-compose.yml' 文件的目录)。
- 运行以下命令以启动所有服务:
这将执行以下操作:docker-compose up -d- 下载并运行最新的 'petabridge/memorizer' Docker镜像。
- 启动PostgreSQL数据库(监听端口5432),并启用pgvector扩展用于向量存储。
- 启动PgAdmin(监听端口5050),一个用于管理PostgreSQL数据库的Web界面。
- 启动Ollama(监听端口11434),一个本地LLM运行环境,用于生成嵌入和标题。
- 启动Memorizer API(监听端口5000),即MCP服务器本身。
- 服务启动后,您可以通过浏览器访问 'http://localhost:5000/ui' 来使用Memorizer的Web用户界面。
服务器配置
MCP客户端需要以下配置信息来连接Memorizer服务器。请将此JSON片段添加到您的MCP客户端配置文件(例如 'mcp.json')中:
{ "mcpServers": { "memorizer": { "url": "http://localhost:5000" } } }
- 'mcpServers': 这是MCP客户端配置的根对象,用于定义所有可用的MCP服务器。
- 'memorizer': 这是您为Memorizer服务器定义的逻辑名称,您可以在MCP客户端或LLM的系统提示中引用它。
- 'url': 这是Memorizer服务器的访问地址。默认情况下,当通过 'docker-compose up -d' 启动时,它将在 'http://localhost:5000' 上运行。如果服务器部署在其他地址,请更新此URL。
基本使用方法
LLM客户端(如AI代理)可以通过MCP协议调用Memorizer提供的工具来管理和检索记忆。以下是一些主要工具及其使用场景:
-
'store' (存储记忆):
- 用途: 将新信息持久化存储到记忆系统中。例如,AI代理可以保存重要的参考资料、学习到的新技能、用户提供的操作指南或它自己生成的知识,以便将来复用。
- 参数示例: 'type="how-to"', 'text="如何在Python中使用requests库发送HTTP请求...", source="LLM"', 'title="Python requests库使用教程"', 'tags=["python", "http", "requests"]'。
- 关联记忆: 您还可以指定 'relatedTo' (记忆ID) 和 'relationshipType' (关系类型,如"example-of", "explains") 来在存储时直接建立与其他记忆的链接。
-
'search' (搜索记忆):
- 用途: 根据自然语言查询,查找与当前任务或上下文最相关的记忆。例如,AI代理可以搜索“如何编写单元测试”来获取相关的操作指南。
- 参数示例: 'query="如何发送带认证的HTTP请求?"', 'limit=5' (返回最多5个结果), 'minSimilarity=0.7' (最低相似度), 'filterTags=["python", "http"]' (仅搜索包含这些标签的记忆)。
-
'get' (获取单条记忆):
- 用途: 根据记忆的唯一ID精确检索一条记忆。通常在AI代理已经知道某个记忆的ID,并需要其完整内容时使用。
- 参数示例: 'id="a1b2c3d4-e5f6-7890-1234-567890abcdef"'。
-
'getMany' (获取多条记忆):
- 用途: 根据提供的记忆ID列表,批量检索多条记忆。这对于获取一组相关联的知识片段非常高效。
- 参数示例: 'ids=["a1b2...", "b2c3...", "c3d4..."]'。
-
'delete' (删除记忆):
- 用途: 根据记忆的ID,从系统中移除不再需要或已过时的记忆。
- 参数示例: 'id="a1b2c3d4-e5f6-7890-1234-567890abcdef"'。
-
'createRelationship' (创建关系):
- 用途: 在两个现有记忆之间手动建立自定义类型的关系,以丰富知识图谱。
- 参数示例: 'fromId="id_of_concept"', 'toId="id_of_example"', 'type="example-of"'。
AI代理可以结合这些工具,根据其逻辑和用户需求,动态地存储、检索和管理知识,从而实现更高级的记忆和推理能力。
信息
分类
AI与计算