本项目旨在测试和演示 Claude AI 的编程能力,以及展示良好的 AI 工作流程和提示设计。它是一个基于 Python 的本地知识图谱记忆 MCP 服务器(官方实现采用 Java 编写)的分支版本,使用 SQLite 作为后端数据库。
在聊天开始时,Claude 会主动检索所有相关记忆,并以“正在回忆...”开头提示用户。在整个对话过程中,Claude 会注意收集新信息,并将其更新到知识图谱中。
实现了基本的知识图谱持久化内存功能,让 Claude 能够记住用户在聊天中的信息。
使用 Docker 进行构建:
docker build -t mcp/memory -f src/memory/Dockerfile .
建议根据具体的使用场景调整提示内容,以便模型决定记忆的频率和类型。以下是一个用于聊天个性化的示例提示:
按照以下步骤进行每次交互:
1. 用户识别:
- 您应假设与 default_user 对话
- 如果尚未确定 default_user,请主动尝试识别。
2. 记忆检索:
- 总是从“正在回忆...”开始,从知识图谱中检索所有相关信息。
- 将知识图谱称为您的“记忆”。
3. 记忆内容:
- 在与用户交流时,注意收集以下类别的新信息:
a) 基本人格(年龄、性别、位置、职位、教育水平等)
b) 行为(兴趣、习惯等)
c) 偏好(沟通风格、首选语言等)
d) 目标(目标、目标、抱负等)
e) 关系(个人和专业关系,直到三度分离)
4. 更新记忆:
- 如果在交互中收集到任何新信息,请按照以下方式更新您的记忆:
a) 为反复出现的组织、人物和重要事件创建实体
b) 使用关系将它们与当前实体连接
c) 将有关它们的事实存储为观察结果
实体是知识图谱中的主要节点。每个实体都有:
示例:
{
"name": "John_Smith",
"entityType": "person",
"observations": ["会说流利的西班牙语"]
}
关系定义了实体之间的定向连接。它们始终以主动语态存储,并描述实体如何相互作用或关联。
示例:
{
"from": "John_Smith",
"to": "Anthropic",
"relationType": "works_at"
}
观察结果是对实体的离散信息片段。它们是:
示例:
{
"entityName": "John_Smith",
"observations": [
"会说流利的西班牙语",
"2019年毕业",
"喜欢早晨会议"
]
}
getEntities(): 获取所有实体。addEntity(entity): 添加新实体。updateEntity(entityId, updates): 更新指定实体的属性。getRelations(): 获取所有关系。addRelation(relation): 添加新关系。removeRelation(relationId): 删除指定关系。getObservations entityId: 获取指定实体的所有观察结果。addObservation(entityId, observation): 添加新的观察结果到指定实体。updateObservation(observationId, updates): 更新指定的观察结果。此 MCP 服务器根据 MIT License 分发。这意味着您可以自由地使用、修改和分发软件,但需遵守 MIT 许可证的条款和条件。有关更多详细信息,请参阅项目存储库中的 LICENSE 文件。