Stash-AI-Agent记忆层
Stash:基于Postgres的AI Agent持久化记忆层深度解析
自托管、单二进制文件、零云依赖的AI Agent记忆解决方案
前言
在构建AI Agent系统时,记忆(Memory)是最核心的挑战之一。一个没有记忆的Agent就像一个失忆症患者——每次对话都是从零开始,无法积累经验、学习用户偏好或维持长期上下文。
Stash(alash3al/stash)的出现为这个问题提供了一个优雅的解决方案。它是一个基于PostgreSQL的持久化记忆层,专为AI Agent设计,支持Episodes(事件记忆)、Facts(事实记忆)和Working Context(工作上下文),并且内置MCP Server,可以无缝集成到各种AI Agent框架中。
一、AI Agent记忆系统的挑战
1.1 记忆类型
AI Agent的记忆通常分为三类:
短期记忆(Short-term Memory)
当前对话的上下文,通常存储在内存中,会话结束后丢失。
长期记忆(Long-term Memory)
跨会话的持久化信息,如用户偏好、历史交互、学到的知识等。
工作记忆(Working Memory)
当前任务的中间状态和临时数据,任务完成后可以丢弃。
1.2 现有方案的不足
| 方案 | 问题 |
|---|---|
| 纯向量数据库 | 缺乏结构化查询能力,难以管理复杂记忆关系 |
| Redis | 内存存储,成本高,不适合大规模持久化 |
| 文件系统 | 并发性能差,缺乏事务支持 |
| 云服务 | 数据隐私风险,网络依赖 |
1.3 Stash 的设计哲学
Stash 的核心理念是:用PostgreSQL解决AI Agent的记忆问题。
PostgreSQL是一个久经考验的关系型数据库,具有:
- 强大的事务支持
- 丰富的数据类型(JSONB、向量扩展等)
- 优秀的并发性能
- 完善的备份和恢复机制
- 活跃的社区和生态系统
二、Stash 架构设计
2.1 核心概念
Episodes(事件记忆)
记录Agent与用户之间的交互事件,每次对话、每次操作都是一个Episode。Episodes按时间序列存储,支持语义搜索。
Facts(事实记忆)
从交互中提取的结构化事实,如"用户喜欢Python"、“项目使用React”。Facts是Agent的长期知识库。
Working Context(工作上下文)
当前任务的上下文信息,包括对话历史、中间结果、临时变量等。支持快速读写和过期清理。
2.2 数据模型
-- Episodes表CREATETABLEepisodes(id UUIDPRIMARYKEYDEFAULTgen_random_uuid(),agent_idVARCHAR(255)NOTNULL,session_idVARCHAR(255),contentTEXTNOTNULL,metadata JSONBDEFAULT'{}',embedding vector(1536),-- 使用pgvector扩展created_atTIMESTAMPDEFAULTNOW(),updated_atTIMESTAMPDEFAULTNOW());-- Facts表CREATETABLEfacts(id UUIDPRIMARYKEYDEFAULTgen_random_uuid(),agent_idVARCHAR(255)NOTNULL,subjectVARCHAR(500)NOTNULL,predicateVARCHAR(500)NOTNULL,objectTEXTNOTNULL,confidenceFLOATDEFAULT1.0,source_episode_id UUIDREFERENCESepisodes(id),embedding vector(1536),created_atTIMESTAMPDEFAULTNOW(),expires_atTIMESTAMP);-- Working Context表CREATETABLEworking_context(id UUIDPRIMARYKEYDEFAULTgen_random_uuid(),agent_idVARCHAR(255)NOTNULL,session_idVARCHAR(255)NOTNULL,keyVARCHAR(255)NOTNULL,valueJSONBNOTNULL,ttlINTEGER,-- 生存时间(秒)created_atTIMESTAMPDEFAULTNOW(),UNIQUE(agent_id,session_id,key)