s09: Memory — 该记记,该忘忘

LLM无状态,所有信息都在上下文窗口里。当上下文窗口满了就要压缩,压缩就会导致细节丢失。需要一层不参与压缩、跨会话保留的存储。

四种类型的记忆:user(你是谁)、feedback(怎么做事)、project(正在发生什么)、reference(东西在哪找)

  • 加载:记忆清单索引常驻SYSTEM;相关记忆按需注入;
  • 写入:每轮结束后提取。提取prompt要求 LLM返回的JSON数组确实有新信息时才写文件;
  • 整理:低频合并去重;记忆文件会积累。在文件数达到阈值时触发,让LLM去重、合并矛盾、淘汰过时记忆;

User Memory保存跨会话仍然有用的信息:用户偏好、反复出现的反馈、项目背景、常用入口和排查线索。它关注“以后还会用到什么”,并通过索引+按需加载把这些信息带回当前对话。

Session Memory关注同一会话内的连续性:compact之后,当前会话还需要保留哪些上下文。

两者配合使用:Memory管长期知识,session memory管当前会话的压缩续接。

s10: System Prompt — 运行时组装

随着agent功能越来越复杂,系统提示词也越写越多;系统提示词可以做成运行时根据当前状态进行组装配置(哪些工具启用、哪些上下文可见、哪些记忆相关、哪些内容必须保持稳定以命中prompt cache)

把硬编码的SYSTEM拆成独立段落(section),运行时根据真实状态按需拼接,缓存结果避免重复组装;

不要用 hash() 做持久化或跨进程的缓存键。Python 默认开启哈希随机化(PYTHONHASHSEED 随机),同一个字符串在不同进程或 Python 解释器重启后,hash() 的结果可能不同。推荐用 json.dumps(…, sort_keys=True) 生成稳定字符串,必要时再用 MD5 压缩。

s11: Error Recovery — 重试换路子

Agent运行过程中会遇到各种异常,需要加以处理;
常见的三种故障:

  • 输出被截断(输出过程中token用完了)
  • 上下文超限(压缩后还是太长)
  • 临时故障(429限流、529过载)

LLM调用包裹在try/except中,根据错误类型走不同的恢复路径;恢复后continue回到循环开头重新调用LLM;


参考