AgeMem — LTM+STM 统一 Agent 记忆:RL 自适应管理跨会话知识
Skill-AgeMem-Unified-Agent-Memory · 16-智能体工程
1. 解决的问题
AgeMem 是首个将 LTM(长期记忆)和 STM(短期记忆)统一到 Agent Policy 的端到端框架。传统方案把两种记忆当作独立模块,由外置 Memory Manager 或启发式 trigger 决策,导致组合效果差、部署成本高(需要额外 expert LLM)。AgeMem 的突破在于:记忆操作本身就是 action,由同一个 LLM policy 通过 RL 学习"何时调什么"。
2. 核心算法逻辑
AgeMem 是首个将 LTM(长期记忆)和 STM(短期记忆)统一到 Agent Policy 的端到端框架。传统方案把两种记忆当作独立模块,由外置 Memory Manager 或启发式 trigger 决策,导致组合效果差、部署成本高(需要额外 expert LLM)。AgeMem 的突破在于:记忆操作本身就是 action,由同一个 LLM policy 通过 RL 学习"何时调什么"。
3. 业务应用场景
业务问题:广告 Agent 每次启动都是"空白大脑",无法记住上周/上月哪些关键词 ROAS 高、竞品在哪些词上加价、大促节点的效果规律。一个有经验的广告优化师积累这些知识需要 3 个月,Agent 每次从零开始。
数据要求: - LTM:历史关键词 ROAS 表(`keyword → {avg_roas, peak_season, last_updated}`) - STM:当周广告报表(7 天窗口数据,含竞品曝光份额变化) - 触发事件:每次广告报表 review + 每次大促前后
预期产出: - 关键词效果 LTM 条目(自动 Add/Update/Delete 过期词) - 当周 STM 摘要(压缩 7 天数据为 3-5 条核心洞察) - 出价建议(基于 LTM 历史 + STM 当周趋势融合推理)
4. 输入数据要求
请查看原始代码模板获取输入规格。
5. 输出结果
请查看原始代码模板获取输出规格。
6. 业务价值 / ROI
10 万
7. 代码模板
代码块数量:1 · 路径:未检测到
"""
AgeMem — LTM+STM 统一 Agent 记忆 RL 管理
论文: arXiv:2601.01885 | 2026年1月
场景: 广告 Agent 跨会话关键词效果积累 + 选品 Agent 品类知识持久化
"""
from __future__ import annotations
import json
import time
from dataclasses import dataclass, field
from enum import Enum
from typing import Any
class MemoryType(str, Enum):
LTM = "LTM"
STM = "STM"
@dataclass
class MemoryItem:
item_id: str
content: str
memory_type: MemoryType
importance: float = 0.5
timestamp: float = field(default_factory=time.time)
tags: list[str] = field(default_factory=list)
ttl_seconds: float | None = None
def is_expired(self) -> bool:
if self.ttl_seconds is None:
return False
return (time.time() - self.timestamp) > self.ttl_seconds
class LTMStore:
def __init__(self):
self._store: dict[str, MemoryItem] = {}
def add(self, item: MemoryItem) -> str:
self._store[item.item_id] = item
return item.item_id
def update(self, item_id: str, content: str, importance: float | None = None) -> bool:
if item_id not in self._store:
return False
self._store[item_id].content = content
self._store[item_id].timestamp = time.time()
if importance is not None:
self._store[item_id].importance = importance
return True
def delete(self, item_id: str) -> bool:
return bool(self._store.pop(item_id, None))
def search(self, query: str, top_k: int = 5) -> list[MemoryItem]:
results = [
item for item in self._store.values()
if any(tag in query.lower() for tag in item.tags)
or query.lower() in item.content.lower()
8. 论文来源
- 2601.01885