内存网格
该项目基于MCP服务器仓库中的知识图谱内存服务器,并保留其核心功能。
服务介绍
MemoryMesh
MemoryMesh 是一个为 AI 模型设计的知识图谱服务器,特别关注基于文本的 RPG 和交互式故事讲述。它帮助 AI 在对话中保持一致且结构化的记忆,从而实现更丰富和动态的互动。
该项目基于 MCP 服务器仓库中的 知识图谱记忆服务器,并保留了其核心功能。
重要事项
自 v0.2.7 版本起,模式的默认位置已更改为 dist/data/schemas。
预计未来此位置不会发生变化,但如果您是从以前的版本进行更新,请确保将您的模式文件移动到新位置。
快速链接
概览
MemoryMesh 是一个本地知识图谱服务器,使您能够构建和管理用于 AI 模型的结构化信息。虽然特别适合于基于文本的 RPG 游戏,但其灵活的设计使其在各种应用中都很有用,包括社交网络模拟、组织规划或任何涉及结构化数据的场景。
主要特性
- 动态基于模式的工具: 使用模式定义数据结构,MemoryMesh 会自动生成用于添加、更新和删除数据的工具。
- 直观的模式设计: 创建模式以指导 AI 生成和连接节点,使用必填字段、枚举类型和关系定义。
- 用于 AI 指导的元数据: 使用元数据提供上下文和结构,帮助 AI 理解数据中的含义和关系。
- 关系处理: 在模式中定义关系,鼓励 AI 在相关数据点(节点)之间创建连接(边)。
- 信息反馈: 向 AI 提供错误反馈,使其能够从错误中学习并改进与知识图谱的交互。
- 事件支持: 事件系统跟踪操作,提供关于知识图谱如何被修改的见解。
节点
节点代表知识图谱中的实体或概念。每个节点具有:
...
(此处省略了具体节点属性的描述,因为原文档中没有提供详细信息。如果需要进一步翻译,请提供具体的节点属性描述。)
name: 唯一标识符。nodeType: 节点的类型(例如,npc、artifact、location),由你的模式定义。metadata: 一个字符串数组,提供关于节点的描述性细节。weight: (可选)一个介于0和1之间的数值,表示关系的强度,默认为1。
示例节点:
{
"name": "Aragorn",
"nodeType": "player_character",
"metadata": [
"Race: Human",
"Class: Ranger",
"Skills: Tracking, Swordsmanship",
"Affiliation: Fellowship of the Ring"
]
}
边
边代表节点之间的关系。每个边包含:
from: 源节点的名称。to: 目标节点的名称。edgeType: 关系的类型(例如,owns、located_in)。
{
"from": "Aragorn",
"to": "Andúril",
"edgeType": "owns"
}
模式
模式是MemoryMesh的核心。它们定义了数据的结构,并驱动工具的自动生成。
模式文件位置
将你的模式文件(.schema.json)放置在已构建的MemoryMesh项目的dist/data/schemas目录中。MemoryMesh将在启动时自动检测并处理这些文件。
模式结构
文件名: [name].schema.json。例如,对于定义一个npc的模式,文件名应为add_npc.schema.json。
name- 在内存中的模式和节点类型的标识符。重要: 模式的名称必须以add_开头才能被识别。description- 用作add_<name>工具的描述,为AI提供上下文。(delete和update工具有通用描述)properties- 每个属性包括其类型、描述和其他约束。propertytype- 支持的值为string或array。description- 帮助指导AI了解实体的目的。required- 布尔值。如果为true,则AI必须在创建节点时提供此属性。enum- 字符串数组。如果存在,则AI必须选择给定选项之一。relationship- 定义与另一个节点的连接。如果属性是必需的并且有关系,则AI总是会创建该节点及其相应的边。edgeType- 要创建的关系类型。description- 帮助指导AI了解关系的目的。
additionalProperties- 布尔值。如果为true,允许AI添加超出所需或可选定义之外的额外属性。
示例模式 (add_npc.schema.json):
{
"name": "add_npc",
"description": "Schema for adding an NPC to the memory" ,
"properties": {
"name": {
"type": "string",
"description": "A unique identifier for the NPC",
"required": true
},
"race": {
"type": "string",
"description": "The species or race of the NPC",
"required": true,
"enum": [
"Human",
"Elf",
"Dwarf",
"Orc",
"Goblin"
]
},
"currentLocation": {
"type": "string",
"description": "The current location of the NPC",
"required": true,
"relationship": {
"edgeType": "located_in",
"description": "The current location of the NPC"
}
}
},
"additionalProperties": true
}
基于这个模式,MemoryMesh会自动创建:
- add_npc: 用于添加新的NPC节点。
- update_npc: 用于修改现有的NPC节点。
- delete_npc: 用于删除NPC节点。
MemoryMesh包含了11个预建模式,专为基于文本的RPG游戏设计,提供了游戏开发即用的基础。
SchemaManager 工具
MemoryMesh包括一个SchemaManager工具,简化了模式的创建和编辑过程。它提供了一个可视化界面,使你可以轻松地定义数据结构而无需直接编写JSON。
动态工具
MemoryMesh 通过动态工具简化了与知识图谱的交互。这些工具不是手动编码的,而是直接从您的模式定义中自动生成的。这意味着,当您使用模式定义数据结构时,MemoryMesh 会智能地创建一套针对该特定数据结构定制的工具。
可以这样理解: 您提供了一个蓝图(即模式),而 MemoryMesh 会根据这个蓝图自动构建必要的工具来创建、修改和删除元素。
背后的原理是什么?
MemoryMesh 有一个智能系统,能够读取您的模式定义。它分析您定义的结构,包括实体的属性及其关系。基于这一分析,它为每种实体类型自动生成一组工具:
add_<entity>: 用于创建新的实体实例。update_<entity>: 用于修改现有实体。delete_<entity>: 用于删除实体。
然后,这些工具通过 MemoryMesh 中的一个中心枢纽提供,确保任何连接的客户端或 AI 都能轻松访问和使用它们。
本质上,MemoryMesh 的动态工具系统提供了一种强大且高效的方式来管理您的知识图谱,让您能够专注于应用程序的内容和逻辑,而不必关心底层的数据操作机制。
记忆文件
默认情况下,数据存储在 dist/data/memory.json 文件中的 JSON 格式。
记忆查看器
记忆查看器是一个单独的工具,旨在帮助您可视化和检查由 MemoryMesh 管理的知识图谱的内容。它提供了一个用户友好的界面,用于探索节点、边及其属性。
主要功能:
- 图形可视化:以交互式的节点-链接图形式查看知识图谱。
- 节点检查:选择节点以查看其节点类型、元数据和连接的边。
- 边缘探索:检查节点之间的关系,包括边类型和方向。
- 搜索和过滤:快速查找特定节点或按类型过滤它们。
- 表格视图:允许您轻松找到并检查特定的节点和边,或一次性查看所有内容。
- 原始 JSON 视图:允许您查看来自内存文件的原始 JSON 数据。
- 统计面板:提供关于知识图谱的关键指标和信息:总节点数、总边数、节点类型和边类型。
- 搜索和过滤:允许您按节点类型或边类型进行过滤,并选择是否显示节点、边或同时显示两者。
访问记忆查看器
记忆查看器是一个独立的网络应用程序。记忆查看器讨论
使用记忆查看器
- 选择内存文件:在内存查看器中,点击“选择内存文件”按钮。
- 选择文件:导航到您的 MemoryMesh 项目目录并选择
memory.json文件(默认位于dist/data/memory.json)。 - 探索:内存查看器将加载并显示您的知识图谱内容。
内存流
提示
为了获得最佳效果,请使用 Claude 的“Projects”功能配合自定义指令。这里有一个您可以开始使用的提示示例:
You are a helpful AI assistant managing a knowledge graph for a text-based RPG. You have access to the following tools: add_npc, update_npc, delete_npc, add_location, update_location, delete_location, and other tools for managing the game world.
When the user provides input, first process it using your available tools to update the knowledge graph. Then, respond in a way that is appropriate for a text-based RPG.
您还可以直接在聊天中指示 AI 执行特定操作。
尝试不同的提示以找到最适合您用例的方式!
示例
- 一个带有自定义指令的简单示例。
- 一个仅为示例目的的例子,附带可视化 (并非功能的一部分)
添加几个城市、一些NPC、城市周围的几个探索地点,并在某处隐藏一两个神器
安装
通过 Smithery 安装
要通过 Smithery 自动为 Claude Desktop 安装 MemoryMesh:
npx -y @smithery/cli install memorymesh --client claude
先决条件
- Node.js: 版本 18 或更高版本。您可以从 nodejs.org 下载。
- npm: 通常随 Node.js 一起提供。
- Claude for Desktop: 确保已从 claude.ai/download 安装最新版本。
安装步骤
-
克隆仓库:
git clone https://github.com/CheMiguel23/memorymesh.git cd memorymesh -
安装依赖:
npm install -
构建项目:
npm run build该命令会将 TypeScript 代码编译为 JavaScript 并存放在
dist目录中,同时也会将示例模式和数据文件复制到该目录。 -
验证文件复制(可选):
- 构建过程应自动将
data文件夹复制到dist。 - 检查
dist/data是否存在并包含.json文件。同时验证dist/data/schemas是否存在并包含.schema.json文件。
- 构建过程应自动将
-
配置 Claude Desktop:
打开您的 Claude Desktop 配置文件:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - 在
mcpServers部分添加一个memorymesh的条目。您可以选择以下配置选项中的 一个:
"mcpServers": { "memorymesh": { "command": "node", "args": ["/ABSOLUTE/PATH/TO/YOUR/PROJECT/memorymesh/dist/index.js"] } }- 将
/ABSOLUTE/PATH/TO/YOUR/PROJECT/替换为您memorymesh项目目录的 实际绝对路径。 - 示例(macOS):
"command": "node", "args": ["/Users/yourusername/Projects/memorymesh/dist/index.js"] - 示例(Windows):
"command": "node", "args": ["C:\\Projects\\memorymesh\\dist\\index.js"]
- macOS:
-
重启 Claude Desktop: 完全重启 Claude Desktop 以使更改生效。
验证安装
- 启动 Claude Desktop。
- 打开一个新的聊天。
- 查看右上角是否有 MCP 插件图标 。如果存在,则您的配置可能是正确的。
- 点击 图标。您应该能在已连接服务器列表中看到 "memorymesh"。
- 点击 图标。如果您能看到工具列表(例如
add_npc、update_npc等),则说明您的服务器工作正常,并且正确暴露了工具。
更新
在更新之前,请确保备份 dist/data 目录以避免丢失内存数据。
故障排除
-
服务器未在 Claude 中显示:
- 仔细检查
claude_desktop_config.json中的路径。确保它们是绝对路径且正确无误。 - 确认
dist目录存在,并包含已编译的 JavaScript 文件,包括index.js。 - 检查 Claude Desktop 的日志以查找错误:
- macOS:
~/Library/Logs/Claude/mcp-server-memorymesh.log(以及mcp.log) - Windows: (可能位于
%AppData%\Claude下的Logs文件夹中)
- macOS:
- 仔细检查
-
工具未显示:
- 确保你的
npm run build命令没有报错并成功完成。 - 确认你的 schema 文件正确放置在
dist/data/schemas目录下,并遵循正确的命名约定(例如add_[entity].schema.json)。 - 检查服务器控制台输出或日志中是否有初始化期间出现的任何错误。
- 确保你的
高级配置
MemoryMesh 提供了多种方式来自定义其行为,超越基本设置:
变量
你可以在 /config/config.ts 中覆盖默认设置
- MEMORY_FILE: 指定用于存储知识图谱数据的 JSON 文件路径。(默认值:
dist/data/memory.json) - SCHEMAS_DIR: schema 文件目录的路径。(默认值:
dist/data/schemas/memory.json)
限制
- 节点删除: AI 可能会犹豫是否从知识图谱中删除节点。如果需要,可以通过提示来鼓励它进行删除。
贡献
欢迎贡献、反馈和想法!
这个项目是一个个人探索,旨在将结构化数据与 AI 推理能力相结合。欢迎贡献、反馈和想法来进一步推动该项目或启发新项目。