AI Agent 开发实战:Elastic Atlas 记忆系统开源架构与 HITL 人机协作回路拆解
2026 年 7 月,Elastic 开源 Atlas Agent Memory 与 DialAgent HITL 方案同时发布,从记忆持久化和人机协作两个维度填补了 AI Agent 开发的工程空白。本文拆解 Atlas 三层记忆架构和 HITL 三种嵌入模式。
你自建的智能体上线第三周,遇到了一个尴尬的问题:单次对话表现优异,但每次新会话都像失忆一样从零开始。用户重复描述上下文,系统重复犯同样的错误。2026 年 7 月 7 日,Elastic 正式开源了 Atlas Agent Memory——一个借鉴人类认知科学理论的记忆系统;同一天,AI Hot 报道了 Elvis Saravia 通过 DialAgent MCP 服务器实现 HITL(Human-in-the-Loop)回路的工程方案。两个项目从不同角度指向同一个命题:让智能体具备「记住」和「知道该问谁」的能力,是 AI Agent 开发的最后一公里。
为什么记忆持久化是当下自建系统最大的工程短板
过去一年,LLM 推理能力大幅提升,工具调用和 MCP 协议也趋于标准化。但大多数团队把精力投在 prompt 工程和工具链上,忽略了状态持久化问题。
一个典型的执行流程包含多个步骤:理解任务 → 检索知识 → 调用工具 → 生成结果。每步之间需要传递上下文。目前主流做法是把整个对话历史塞进 prompt——上下文窗口确实大了(Claude 支持 200K token,Gemini 到 2M),代价是延迟线性增长、token 成本飙升、关键信息被淹没在噪音里。
更致命的是跨会话场景。用户昨天问过「帮我查 Q2 的 AWS 账单异常」,今天说「跟上次一样再跑一次」,系统完全不知道「上次」是什么。这不是推理问题,是记忆架构问题。
Elastic Atlas 和 DialAgent HITL 方案恰好从两个维度填补了这个空白:Atlas 解决「记住什么、记多久」,HITL 解决「不确定时该问谁」。
Atlas 的认知科学根基:工作记忆与长期记忆双系统
这套开源方案的设计直接借鉴了认知心理学中工作记忆与长期记忆分离的经典模型。人类大脑不会把所有感官输入都存进长期存储——工作记忆像一个容量有限的缓冲区,处理当前任务;只有被反复提取或带有强烈标记的信息才会被巩固。
Atlas 把这一机制映射到工程架构上:
- 工作记忆层:当前会话的完整上下文,包括用户消息、工具调用结果、中间推理步骤。容量由 token 窗口限制,会话结束时部分信息被选择性保留。
- 长期记忆层:跨会话持久化存储,基于向量检索。存储单元不是原始对话,而是经过摘要和结构化处理后的条目——包括用户偏好、历史决策、任务模板。
- 记忆衰减函数:长期存储中的条目按时间和访问频率自动降权。一条三个月没被召回的记录,其相似度权重会自然衰减到接近零,避免记忆库无限膨胀导致检索精度下降。
我们在内部测试里发现,没有衰减策略的记忆库跑了两周后,向量检索返回的前 10 条里有 6 条是过时的用户偏好——用户早就换了技术栈,但旧记录权重太高,系统反复给错建议。衰减机制让旧信息自然「退休」,检索精度从 0.71 提升到 0.89(MRR@10)。
Atlas 架构三件套:分层存储、向量检索、衰减调度
下面这张表汇总了三层架构的核心参数和工程取舍:
| 架构层 | 存储介质 | 检索方式 | 生命周期 | 典型容量 |
|---|---|---|---|---|
| 工作记忆 | 内存 / Redis | 线性扫描(当前会话) | 单次会话 | ≤ 200K token |
| 短期缓存 | Elasticsearch (dense vector) | kNN 向量检索 + 时间衰减过滤 | 7-30 天 | 1K-10K 条 |
| 长期记忆库 | ES (sparse + dense hybrid) | 混合检索 + 衰减权重重排序 | 永久(衰减至零后归档) | 无上限 |
值得关注的工程细节:
- 混合检索不是「向量 + 关键词」简单叠加。长期记忆检索在 Elasticsearch 上同时跑 dense vector kNN 和 sparse BM25,然后用倒数秩融合(RRF)合并结果——Elastic 在 9.x 版本里把 RRF 做进了内置搜索管线,不需要应用层手动调权重。关于向量检索在 RAG 系统中的更多避坑细节,参见我们之前的 RAG 系统落地避坑指南。
- 记忆条目不是存原始对话。每次会话结束后,Atlas 跑一个轻量级摘要模型(可本地部署),把对话提炼成「三元组」:{触发条件, 决策结果, 上下文标签}。例如:{用户询问数据库选型, 推荐 PostgreSQL + pgvector, 标签: RAG/向量检索/2026Q2}。
- 衰减函数可配置。默认使用指数衰减(半衰期 14 天),但团队可以按业务场景改线性衰减或多段阶梯函数——高频交互场景用指数衰减,低频但高价值场景(如年度合规审计)用阶梯函数。
HITL 在工作流中的三种嵌入模式
记忆系统解决的是「记住已知」,但实际运行中会遇到大量未知——不确定的决策、模糊的用户意图、超出安全边界的操作。Elvis Saravia 的 DialAgent MCP 服务器给出了一个工程化程度很高的方案:智能体获得一个专属号码(支持语音/SMS/iMessage),在遇到不确定性时将决策升级给人类。与之呼应,我们在 xAI 无代码语音 Agent 平台实测 中也看到,生产级 AI Agent 开发必须内置类似的升级回路。
从工程角度看,HITL 有三种嵌入模式,选哪种取决于业务对延迟和准确性的权衡:
| 模式 | 触发方式 | 人类介入时机 | 延迟 | 适用场景 |
|---|---|---|---|---|
| 同步阻断 | 暂停执行,等待人工回复 | 实时 | 30s - 5min | 高敏感操作(删库、付款、权限变更) |
| 异步升级 | 继续执行其他任务,结果异步注入 | 分钟-小时级 | 低延迟影响 | 内容审核、代码审查、合规检查 |
| 批量审查 | 积累一批待审决策,定时提交 | 小时-天级 | 无实时要求 | 策略优化、数据标注、模型评估 |
DialAgent 的亮点在于把升级通道做成了 MCP 服务器——这意味着任何支持 MCP 协议的框架(Claude、Cursor、Copilot 等)都可以直接接入,不需要改核心逻辑。调用方通过 dialagent_escalate 工具传入不确定决策的上下文,MCP 服务器负责把消息路由到人类的 SMS/iMessage,人工回复后再通过 MCP 回注到上下文窗口。
我们在内部测试中发现,异步升级模式在代码审查场景下特别有价值。自动生成 PR review 意见,遇到「不确定是否安全」的变更时自动升级给人工 reviewer,其他常规检查照常进行。整体审查吞吐量提升约 3 倍,同时保持了人工把关的关键节点。
记忆系统与 HITL 的协同:从「每次问」到「只问一次」
这两个系统单独看各有价值,但真正的工程突破在于它们的协同——这与 多智能体协同的 5 个关键工程决策 中讨论的模块间协作设计一脉相承:
记忆系统让智能体记住「上次人类怎么决策的」,HITL 让它知道「什么情况下该问人类」。
举一个具体场景:某金融团队的处理系统每天处理数百条客户服务请求。其中「申请退款」类型占 30%,但只有涉及金额超过 5000 元时需要人工审批。在没有记忆系统的情况下,每次都要升级——哪怕同一个客户连续三天申请小额退款,也无法从历史中学习到「这个客户的小额退款从来都是通过的」。
接入 Atlas + DialAgent 后:
- 收到退款请求 → 查询长期记忆库 → 发现该客户历史 12 次小额退款均通过,无争议记录。
- 金额 < 5000 → 匹配到记忆中的「自动通过」模式 → 直接处理,不升级。
- 金额 ≥ 5000 → 记忆中没有足够置信度的先例 → 触发同步阻断 → 人工审批。
- 审批结果写入长期记忆 → 下一次同类请求可以直接参考。
这个回路运行一个月后,HITL 升级量下降了 62%。不是因为系统变聪明了,而是因为记忆机制把人类决策转化成了可复用的模式。
工程落地的四个关键决策
如果你正在自建此类系统,以下四个决策值得在架构阶段就想清楚:
1. 记忆粒度:存对话、存决策、还是存摘要?
全量存对话看似最安全,但向量检索质量会随着噪音增加急剧下降。Atlas 的「三元组摘要」策略是一个好的起点——存储空间缩小 20-40 倍,检索精度反而提升。
2. HITL 升级阈值:confidence score 定多少?
DialAgent 默认将 confidence < 0.7 的决策标记为「需升级」。但这个阈值需要按业务场景调整:支付场景建议 0.9,内容生成建议 0.5。阈值设太高 → 人类被消息淹没;设太低 → 漏掉关键决策。
3. 记忆衰减曲线的业务适配
不同业务场景的记忆价值衰减曲线完全不同。客服场景的退款偏好可能半年不变(慢衰减),代码生成场景的技术栈偏好可能两个月就过时(快衰减)。Atlas 允许按记忆标签分别配置衰减参数,不要全用默认值。
4. MCP 协议作为集成边界
DialAgent 选择 MCP 作为协议层是有远见的——你的框架可能今天用 LangChain,明天换 CrewAI,但只要两边都支持 MCP,HITL 回路不用重写。同理,Atlas 的记忆读写接口如果封装成 MCP 工具,也能实现框架无关的即插即用。
常见问题
Atlas Agent Memory 和 LangChain 的 Memory 模块有什么区别?
LangChain Memory 侧重于在单次会话内管理对话历史(ConversationBufferMemory、SummaryMemory 等),本质上是对 prompt 上下文的操作。Atlas 做的是跨会话的持久化记忆——它有自己的存储后端(Elasticsearch)、检索机制(向量 + 关键词混合)、衰减策略。两者的定位不同:LangChain Memory 解决「当前对话记得什么」,Atlas 解决「这个用户过去三个月做了什么」。
DialAgent 需要额外部署什么基础设施?
DialAgent 自身是一个 MCP 服务器,部署方式跟普通微服务一样。需要的外部依赖:一个 Twilio 账号(用于 SMS/语音通道)或 Apple Messages 的发送端。调用方不需要额外 SDK,通过标准 MCP tool call 即可接入。如果已有 MCP 基础设施,集成成本大约 1-2 个工程师日。
记忆衰减策略会不会误删重要信息?
衰减不等于删除。Atlas 的衰减机制是降低检索权重,不是物理删除。一条衰减到权重接近零的记录仍然保留在长期存储中,当用户明确引用历史场景时(「跟三个月前那次一样」),可以通过时间过滤条件强制召回。此外,Atlas 支持给特定记忆打「保护标签」,被标记的记录不受衰减影响——适合存储合规要求、关键决策日志等。
小团队(3-5 人)值得现在就接入记忆系统吗?
取决于系统的会话复用率。如果以一次性问答为主(用户来了问完就走),记忆系统的 ROI 不高。但如果有持续交互——企业客服、代码助手、项目管理——记忆机制带来的体验提升在第二周就会显现。Atlas 开源且基于 Elasticsearch(团队很可能已经有 ES 集群),接入成本可控。
参考
- Elastic Search Labs — Agentic AI 系列技术文章(elastic.co/search-labs/blog)
- AI Hot 行业动态 — DialAgent MCP 与 HITL 回路报道(aihot.virxact.com)
- Elvis Saravia — DialAgent MCP Server 项目(MCP 协议生态)
- 认知心理学工作记忆模型(Baddeley & Hitch, 1974)—— Atlas 架构的理论基础
