智能体系统中的写放大:为什么一次工具调用会命中六个数据库
当智能体决定记住某件事——"用户更喜欢邮件而非Slack"——看起来只是一次写入。实际上,它是六次写入:向量存储中的一个新嵌入、关系数据库中的一行记录、会话缓存中的一个条目、事件日志中的一条记录、审计轨迹中的一个条目,以及上下文存储的一次更新。每一次写入都因为系统的某个部分对数据有合理需求而发生,每一次写入都引入了新的故障点。
这是基础设施层面的写放大,也是生产智能体部署中较为隐蔽的运营危机之一。它不会导致戏剧性的故障,而是导致部分故障:用户偏好在语义上可以被搜索到,但关系查询返回的是过时数据;审计日志显示某个动作已完成,但实际上从未完全提交;缓存是热的,但上下文存储没有更新,因此下一个会话在没有已学习模式的情况下启动。
理解这一切为何发生——以及如何应对——需要借鉴数据库内部知识,而不是智能体框架文档。
为什么智能体同时写入六个地方
分层写入模式不是设计错误。每个存储系统都服务于其他系统无法替代的目的。
关系数据库是权威的真实来源:结构化状态、访问控制、用户配置文件、对话元数据。ACID事务、复杂连接和范围查询都需要它。向量存储支持语义检索——找到与当前上下文相似的记忆,而不是匹配关键词。事件日志提供了所有发生事件的不可变记录,支持时间维度的调试("智能体在下午3点知道什么?")、合规性和重放。会话缓存(Redis或等效系统)的存在是因为关系数据库对于实时对话中的每一步读取来说太慢了。上下文存储将跨会话学习到的模式持久化到上下文窗口之外,以便按需检索。审计轨迹满足合规要求,这些要求通常与操作日志分离。
消除其中任何一个,你就会失去某种独特的能力:删除向量存储,语义搜索就会退化为关键词匹配;删除事件日志,调试长时间运行的智能体就会变成猜测;删除缓存,每个智能体步骤都会产生全表读取延迟。这个架构并不臃肿——它是生产智能体实际需要的最小存储原语集合。
代价是协调复杂性。当所有六次写入必须成功才能保持状态一致时,任何给定操作的完全成功概率大约是各个成功率的乘积。如果每个存储系统的可用性为99.9%,六次同时写入一起成功的概率约为99.4%。每分钟一千次智能体动作,这意味着每分钟六次失败——不是因为有什么问题,而是因为数学在规模上以不同方式叠加。
没人计划的故障模式
大多数智能体基础设施将写入失败视为异常情况。它们不是。
语义漂移发生在向量索引成功但关系数据库事务回滚时。语义搜索现在返回一个在权威存储中不存在的记忆。智能体检索它,对其进行推理,并基于从未提交的数据做出决策。这个失败是静默的——没有抛出异常,没有触发警报。
日志-现实分歧是相反的情况:事件日志记录了一个已完成的动作,但下游关系写入失败了。审计显示用户的偏好已存储。用户数据模型显示它没有。在受监管的环境中,这是一个合规事件,而不仅仅是一个错误。
上下文去同步发生在会话缓存更新但上下文存储没有更新时。智能体在当前会话期间可以访问该偏好,因为缓存是热的。重启时——无论是由于部署、崩溃还是上下文窗口刷新——上下文存储是真实来源。它有旧状态。学习到的行为静默消失。
部分审计缺口在写入到达关系数据库和向量存储但审计轨迹写入超时时出现。从法律角度来看,动作发生了但无法证明。根据你的合规制度,这是代价高昂的那种失败。
模式总是相同的:写入以满足即时请求的方式成功,但使存储层处于不一致状态,只有在后续不相关的操作中才会浮现出来。
真正有效的模式
数据库内部的三种模式以智能体框架文档很少讨论的方式解决了写放大问题。
预写日志
最古老也最可靠的模式:在执行任何状态变化之前,将预期的变化追加到持久的、仅追加的日志中。只有在日志条目持久化之后,才将变化应用于实际数据结构。如果在写入中途发生崩溃,日志条目得以保存,变化可以在重启时重放。
应用于智能体,这意味着将检查点存储视为预写日志。在执行工具调用之前,持久化预期的状态转换。如果智能体在12个步骤中的第7步崩溃,从最后一个检查点重启,而不是从头开始。LangGraph的检查点模型部分实现了这一点——每个图节点在继续之前将智能体状态序列化到检查点后端。
WAL提供的关键属性是崩溃安全的单写入者语义:你总是知道状态转换是否已提交。它不解决的复杂性是多存储协调——日志持久化,但六个下游写入仍然需要协调。
Saga模式
从微服务借鉴的Saga模式是用于多存储协调的适当工具,无需分布式事务。核心思想:将复合写入分解为一系列单独的、可补偿的步骤。每个步骤都有关联的撤销操作。如果第N步失败,执行步骤1到N-1的撤销操作。
对于智能体记忆写入,Saga可能如下所示:
- 写入关系数据库 → 失败时:无需撤销,中止
- 写入事件日志 → 失败时:删除关系行
- 更新向量存储 → 失败时:删除关系行,删除事件日志条目
- https://docs.langchain.com/oss/python/langgraph/persistence
- https://redis.io/blog/langgraph-redis-build-smarter-ai-agents-with-memory-persistence/
- https://www.cockroachlabs.com/blog/agentic-ai-database-architecture/
- https://www.databricks.com/blog/decoupled-design-billion-scale-vector-search
- https://www.marktechpost.com/2025/12/31/how-to-design-transactional-agentic-ai-systems-with-langgraph-using-two-phase-commit-human-interrupts-and-safe-rollbacks/
- https://microservices.io/patterns/data/saga.html
- https://www.architecture-weekly.com/p/the-write-ahead-log-a-foundation
- https://zilliz.com/blog/understand-consistency-models-for-vector-databases
