Resize 与策略扩展
适用版本:4.0.8+
resize 是 Session 的窗口治理入口:
- 控制
context_window - 可选更新
memo
1. 默认行为:max_length + simple_cut
默认分析器逻辑:
- 当
session.max_length是整数且窗口超限,返回策略名simple_cut
默认执行器 simple_cut:
- 从最新消息向前保留,直到窗口总长度 <=
max_length
配置示例:
python
agent.set_settings("session.max_length", 12000)2. 自动与手动触发
- 自动:
auto_resize=True(默认)时,写入 chat_history 后自动触发 - 手动:随时调用
session.resize()
python
agent.activate_session(session_id="resize_demo")
session = agent.activated_session
session.resize() # 同步
# await session.async_resize() # 异步3. 自定义策略:保留最近 N 轮
python
def analysis_handler(full_context, context_window, memo, session_settings):
if len(context_window) > 10:
return "keep_last_ten"
return None
def keep_last_ten(full_context, context_window, memo, session_settings):
return None, list(context_window[-10:]), memo
session.register_analysis_handler(analysis_handler)
session.register_execution_handlers("keep_last_ten", keep_last_ten)4. 关闭自动 resize 的场景
当你希望在特定批处理时机统一压缩:
python
from agently.core import Session
session = Session(auto_resize=False, settings=agent.settings)
# ... 批量写入消息
session.resize()5. 常见误区
- 只设置
session.max_length,但从未激活 session:不会生效 - 策略返回名未注册:会有 warning,且不更新状态
- 执行器返回结构不完整:务必返回
(new_full, new_window, new_memo)三元组