Memo 设计与更新
适用版本:4.0.8+
新版 Session 不再内置“固定 memo 算法”。
你可以把 memo 当成任意结构化状态(dict/list/str/...),并在自定义执行策略里更新它。
1. 设计原则
建议 memo 只保留“稳定、可复用”的信息,例如:
- 用户长期偏好(语言、风格、格式)
- 任务长期约束(输出字段、审计规则)
- 对话中确定事实(项目代号、时间线)
不建议把瞬时上下文原样复制进 memo,否则会和 context_window 重复。
2. 何时更新 memo
常见触发条件:
context_window超过阈值- 业务阶段切换(如需求澄清 -> 方案输出)
- 每 N 轮进行一次总结
3. 实战:LLM 驱动 memo 更新
python
from agently import Agently
agent = Agently.create_agent()
agent.activate_session(session_id="memo_demo")
session = agent.activated_session
def analysis_handler(full_context, context_window, memo, session_settings):
if len(context_window) > 6:
return "compress_with_memo"
return None
async def compress_with_memo(full_context, context_window, memo, session_settings):
kept = list(context_window[-4:])
memo_request = agent.create_temp_request()
(
memo_request
.input({
"history_to_compress": [m.model_dump() for m in context_window[:-4]],
"old_memo": memo,
})
.instruct("请将 history_to_compress 与 old_memo 合并为结构化长期记忆")
.output({
"user_preferences": {"<key>": (str, "偏好值"), "...": "..."},
"stable_facts": [{"fact": (str,), "confidence": (float,)}],
})
)
# 注意:真实项目建议加 ensure_keys 和异常兜底
new_memo = await memo_request.async_start(ensure_keys=["user_preferences", "stable_facts"])
return None, kept, new_memo
session.register_analysis_handler(analysis_handler)
session.register_execution_handlers("compress_with_memo", compress_with_memo)4. memo 如何注入模型
当 session.memo 非空时,SessionExtension 会在请求前自动追加:
CHAT SESSION MEMO
你无需手动 agent.info({"memo": ...})。
5. 生产建议
- 给 memo 定义固定 schema,避免字段漂移
- 在执行器中加入异常回退:失败时返回旧 memo
- 控制 memo 体积,避免替代
context_window - 对关键字段加测试(如
user_preferences.language)