我设法创建了一个插件和自定义工具,它为 Discourse AI 角色启用了持久化内存。从我的有限测试来看,它的运行情况良好,我想分享一下,看看是否有人觉得它有用。
它的作用
此解决方案允许 AI 角色跨对话记住特定于用户的信息。
示例:用户可以说*“记住我更喜欢深色模式”*,AI 将在未来的互动中存储和回忆此偏好。
组件
该系统有三个部分:
- 插件 (
discourse-ai-persistent-memory)
提供后端存储和用户偏好设置 UI,用户可以在其中查看、添加或删除他们的记忆。 - 自定义 AI 工具
一个 JavaScript 工具,为角色提供对内存功能的访问权限:
memory.set、memory.get、memory.list、memory.delete - 角色系统提示
指示 AI 何时以及如何使用内存工具的指令。
工作原理
- 记忆以键/值对的形式存储在
PluginStore中,按用户命名空间划分。 - 插件通过模块预置 (module prepend) 将内存功能注入到
ToolRunner中。 - 用户可以在以下位置管理他们的记忆:
/u/{username}/preferences/interface - AI 将所有记忆加载到上下文中(而不是选择性检索)。
GitHub 仓库
https://github.com/BrianCraword/discourse-ai-persistent-memory
征求反馈
我很想听听关于以下方面的反馈:
- 使用预置 (prepend) 注入
ToolRunner的方法 - 加载所有记忆与选择性检索是否合理
- 我可能遗漏了任何安全注意事项
- 一般的代码质量改进
免责声明
我不是程序员——这是在 AI 协助下构建的。我无法提供支持,但欢迎任何人使用、分叉或改进它。使用风险自负。
提示 (PROMPT):
## 内存系统
您有一个通过 user_memory 工具实现的持久化内存系统。使用它来记住每个用户的关键事实。
### 何时保存记忆 (SAVE):
* 用户提及偏好(沟通风格、兴趣主题、格式偏好)
* 用户分享个人详细信息(职业、地点、爱好)
* 用户提及正在进行的项目或目标
* 用户明确要求您记住某事
### 何时回忆记忆 (RECALL):
* 在新对话开始时,调用 user_memory 并使用 "list" 操作以查看您所知道的内容
* 在讨论可能与先前对话相关的主题时
### 内存键约定:
* preference_style, preference_topics, preference_format
* personal_profession, personal_location, personal_interests
* project_YYYY_MM (例如 project_2026_01)
* goal_[topic] (例如 goal_learning_python)
### 用法示例:
* 保存: `{ action: "save", key: "preference_style", value: "concise responses" }`
* 回忆: `{ action: "recall", key: "personal_profession" }`
* 列出所有: `{ action: "list" }`
* 忘记: `{ action: "forget", key: "old_key" }`
始终通过首先检查用户的记忆来问候返回的用户。
---
工具定义本身不需要更改,因为它已经是通用的——如果您愿意,只需更新描述参数示例即可:
**参数描述 (key):** 内存键(例如 preference_style, current_project)
希望我调整语气或添加/删除任何特定的用例?
工具 (TOOL):
名称: 用户记忆
工具名称: user_memory
描述:
一个允许 AI 保存、回忆、列出和忘记有关用户的事实的内存系统。
记忆在对话中持续存在。
摘要:
存储和回忆有关用户的持久事实
参数:
- action (string) [必需]
要执行的操作:save(保存)、recall(回忆)、list(列出)或 forget(忘记)
- key (string) [可选]
内存键(例如 preference_style, current_project)
- value (string) [可选]
要存储的值(仅在 save 操作时需要)
