会话与记忆

会话

会话如何工作

与代理的每次对话都在一个会话中进行。会话通过编码上下文的键来标识 -- 哪个代理、哪个频道、哪个聊天。

会话维护所有消息、工具调用和结果的完整记录(仅追加的 JSONL)。这个记录为代理提供了关于正在进行的对话的上下文。

会话键

会话根据上下文自动路由:

模式 含义
agent:main:main 主直接对话
agent:<id>:<channel>:group:<id> 特定频道上的群聊
agent:<id>:<channel>:channel:<id> 频道/房间对话
cron:<jobId> 计划任务执行
hook:<uuid> Webhook 触发的执行

会话生命周期

Token 跟踪

会话跟踪累计 token 使用量(输入、输出、缓存读取、缓存写入),用于成本监控和上下文窗口管理。


压缩

什么是压缩?

当对话接近模型的上下文窗口限制时,Neotask 会压缩它 -- 将旧消息总结为精简概述,并以该总结加上最近消息开始新会话。

工作原理

  1. 检测 -- 监控上下文使用量(默认触发:上下文窗口的 80%)
  2. 总结 -- 旧消息被总结为压缩条目
  3. 新会话 -- 新会话开始,总结注入顶部
  4. 保留 -- 旧记录保留用于历史,但不再加载到上下文中

配置

手动压缩

您可以随时使用 /compact 命令手动触发压缩。当您想重置上下文而不丢失重要信息时非常有用。


记忆

代理记忆

每个代理都有一个记忆系统,用于跨会话持久保存重要信息:

向量搜索

Neotask 支持对代理记忆的向量相似性搜索:

  1. 索引 -- 使用嵌入对记忆文件进行索引
  2. 搜索 -- 代理使用自然语言查询记忆("用户说过关于 API 偏好的什么?")
  3. 召回 -- 相关记忆按相似度排名返回

记忆插件(LanceDB)

LanceDB 记忆插件提供高级向量存储:

自动召回

在会话开始时,相关记忆可以自动召回并注入代理的上下文。这为代理提供了跨会话的连续性,而无需加载整个对话历史。


会话持久化

所有会话数据本地存储:

清理