AI News HubLIVE
站内改写2 分钟阅读

Goat 2.0 – 面向AI智能体的主动情景记忆系统

Goat 2.0 是一个基于Telegram的AI智能体,核心是一个主动分层记忆系统。与标准RAG不同,它在每次对话回合前主动检索记忆,无需智能体主动询问。系统包含三个独立的存储后端(Redis、ChromaDB、Letta),具有自适应令牌预算、优先反转的L2/L3分割、写透归档等特性。该项目展示了如何构建具有复杂记忆机制的AI助手。

来源Hacker News AI作者: takashikiari

Goat 2.0 是一个基于Telegram的AI智能体,其核心创新在于一个主动分层记忆系统。与传统的RAG(检索增强生成)不同,Goat 2.0 在每个对话回合开始前就主动检索相关记忆,而不是等待模型意识到需要查询。这意味着即使是一条模糊的单词消息,也能触发对过往会话的语义搜索,并将结构相关的内容注入到提示中。模型永远不需要问“我记得这个吗?”,因为检索已经发生了。

该系统的关键设计在于多个独立的后端存储层。工作记忆使用Redis,存储当前会话的对话历史和缓存;情景记忆使用ChromaDB(持久化客户端),存储长期语义记忆;永久记忆使用Letta HTTP API,存储关键事实和身份信息。这三个后端都是延迟加载的,即首次使用时才建立连接,并且彼此独立故障——例如,如果Letta服务中断,仅仅丢失L1(事实层)的内容,对话仍可继续。

记忆被组织为五个逻辑层。L0是身份层,始终包含基础人格提示;L1是事实层,由Letta中的键值对构成;L2是工作层,包含当前会话的完整对话历史(有上限);L2.5是会话缓存层,为L3搜索结果和工具输出提供TTL缓存;L3是情景层,通过语义搜索从ChromaDB中检索长期记忆。Orchestrator只通过一个统一的接口(MemoryLayers)与记忆系统交互,从不直接导入任何物理后端。

预取守护进程是该系统与其他系统的核心区别。它在每个对话回合开始时作为异步任务启动,与L0/L1/L2的获取并行运行。预取守护进程同时运行三种检索机制:时间机制(解析日期范围进行过滤搜索)、主题机制(无条件运行,进行缓存语义搜索)和特定键机制(当消息包含结构键时进行精确匹配)。这些机制独立评估,没有置信度门限,只有超时作为唯一阻塞条件。三种机制的结果通过结果合并器进行去重和混合评分(加权0.6/0.3/0.1),并注入到系统提示中。

自适应意图令牌缩放(AITS)是另一个关键特性。每轮对话根据用户消息的置信度和复杂性计算动态令牌预算。置信度基于查询中的提示词(如“什么”、“如何”、“为什么”等)评估;复杂性基于消息长度和连接词数量。默认预算为2000令牌,复杂查询可接近12000令牌。此外,上下文预算的分配采用优先级反转策略:在扣除L0+L1的固定消耗后,先保障L3至少获得1200令牌,剩余的再给L2,确保长程记忆不会被短期对话完全挤占。

写透归档机制确保每次对话回合都原样保存到情景记忆(L3)中,标记为“l2_full_archive”,保留访问计数和时间戳以供将来排序使用。对话历史在超过上限时会自动裁剪,但第一条消息(通常设定对话主题)会被固定保留,前提是它足够短。

项目还提供了可观测性支持:每轮对话生成一个JSON日志行,包含AITS参数、缓存命中/未命中、各阶段延迟、令牌使用量、预取结果等。这些数据由MemoryAnalytics聚合,每100次请求输出一份摘要报告。

Goat 2.0 的代码结构清晰,主要模块包括记忆层、编排器、服务注册中心、插件管理器、工具注册表和Telegram接口。整体设计遵循“零单例”原则,所有服务通过依赖注入容器管理,便于测试和扩展。该项目体现了如何构建一个具有复杂记忆系统的AI智能体,适合需要持久上下文和长程记忆的对话应用。