Show HN:双层记忆——AI编码代理的可查询长期记忆
为AI编码代理提供可查询的长期记忆,采用双层系统:始终加载的索引和按需查询的SQLite数据库,突破上下文窗口限制。
AI编码代理的默认长期记忆机制通常是将Markdown文件堆叠加载到会话的上下文窗口中。这种方式在文件数量较少时尚可应付,但当积累到上百个文件时,所有内容竞争有限的上下文窗口,超出边界的信息会被静默截断,导致代理遗忘已解决的问题、重复劳动甚至与之前的决策矛盾。许多人将此归咎于模型能力不足,但根本问题在于文件系统本身——这正是一个1970年就被数据库解决的老问题:将数据结构化存储、建立索引、按需精确查询所需的行,而非全量加载扫描。
该项目提出了双层记忆架构来解决这一局限。第一层是一个始终加载的索引文件(INDEX.md),每行对应一个已解决的问题,仅包含标题和指针,占用的上下文空间极小,能告知代理有哪些已知信息而不暴露细节。该索引从第二层数据库自动生成,确保不会漂移。第二层是一个按需查询的SQLite数据库,每个难题存储为一行,包括问题描述、根因、解决方案、注意事项和相关工件。上千行数据在未被查询时不会占用任何上下文,只有当代理嗅到熟悉气味时才会执行SQL查询获取精确信息。
使用方式极为简单:通过Python 3自带的sqlite3库即可运行。命令行工具支持init、add、query、get、list、index等操作。例如添加一条新记录时,可指定领域、标题、问题、根因、解决方案、注意事项和标签;查询时使用全文搜索(FTS5)。索引文件通过命令手动或自动重新生成,确保与数据库一致。
作者强调,工具本身只是诱饵,真正发挥价值需要配合良好的使用习惯。必须将“先搜索记忆再行动”设为代理的固定规则,否则数据库形同虚设。每条记录应在解决当天写入,一旦发现错误立即删除或更新——过时的记录比空表更具误导性。此外,当前内置的全文搜索只能匹配关键词,可能无法准确找到意图的条目,未来可在此基础上嫁接语义搜索或嵌入向量,但不要一开始就追求复杂方案。
将双层记忆集成到AI编码代理中,只需在项目指令中添加两条规则:遇到新难题时先查询记忆库,命中则直接复用;解决新颖问题后添加记录并更新索引。这样,始终加载的INDEX.md提示代理已知内容,数据库按需提供详细信息,双方互补。整个工具零依赖,仅需Python 3及其内置sqlite3模块。源代码包括schema.sql(建表及FTS5触发器)、memory.py(CLI实现)、自动生成的INDEX.md和memory.db数据文件。项目采用MIT许可证,由Tom Adelstein公开构建,模式源于与Anthropic编码代理Claude Code的协作会话,体现了人机协作的核心理念。