项目介绍
mcp-server-memory
这是一个MCP服务器,用于与内存文本文件交互,帮助Claude在聊天之间维护上下文。
每一行代表一个记忆。
这些工具允许Claude(以及其他MCP客户端)在聊天过程中管理记忆:
memory_add(memory: string) - 添加记忆
memory_search(query: string) - 返回匹配的记忆(子串精确匹配)- 后期可能会支持通配符/正则表达式
memory_delete(query: string) - 删除匹配的记忆(子串精确匹配)
memory_list() - 返回所有记忆
- 注意:
memory_update == memory_delete + memory_add
例如,
- 我提到我的名字 => "正在与Wes交谈"
- 提到女儿的年龄 => "Wes的女儿是8岁"
- 说正在做一个TypeScript项目 => "正在做一个TypeScript项目"
- 并且,这一点至关重要,可以基于Claude(助手/LLM)所说或所做的内容...
- 特别是工具使用(即
run_command)... 如果第一次尝试使用工具失败(例如,python命令不存在),然后后续使用工具成功(例如,使用python3而不是python)=> Claude可以记录“使用python3,python不存在”...
- 我要求Claude删除关于X的记忆 => memory_delete(query: X)
- 我纠正了我的名字 => memory_search("旧名") + memory_delete(每个匹配的记录,或者一个通用查询) + memory_add("新名")
然后,当新的聊天开始时,Claude会自动获取最近的记忆(部分或全部)或可以请求记忆(一些/更多/全部)。然后可以使用这些记忆来影响响应/工具等。
设计
一个简单的内存文本文件,为什么:
- ChatGPT的记忆工作得很好,并且本质上是一个文本文件。
- 可能背后有结构化处理,但如果你查看你的记忆,它呈现为一个文本文件。
- 我对
mcp-server-commands类似提醒功能的测试效果很好(当Claude拥有它们时)。
- 非结构化的文本简化了工具和参数,基本上就是管理字符串列表。
提示机制:
- 对模型来说,有一个提示知道何时存储记忆也很重要。这如何最好地实现尚不明确,但是...
- 训练:OpenAI承认对模型进行训练以知道何时存储记忆。就像模型被训练使用工具一样。
- 提示:系统提示组件可能包含一个提醒,触发存储记忆。
- 工具本身:在我的Claude测试中,仅靠工具规范,甚至加上工具响应中的提示/建议,我无法让Claude存储记忆。因此,这本身是不够的。似乎Claude的工具训练是为了仅在追求提示/请求时使用它们,这就是为什么我认为在提示组件中添加一个提醒/提示会有效。
待办事项/想法
我不知道这些是否值得花时间,只是在这里列出未来的想法。也许部分原因是阻止我自己去实现它们:)
- 近期因素:一种根据近期重新排列记忆的方法?
- 排序变得对于模糊的记忆查询相关(例如,正在做TypeScript项目和Python项目,然后我要求开始一个新的项目,可以建议最近使用的那个?)
- 淡出旧记忆?