会话与记忆
会话
会话如何工作
与代理的每次对话都在一个会话中进行。会话通过编码上下文的键来标识 -- 哪个代理、哪个频道、哪个聊天。
会话维护所有消息、工具调用和结果的完整记录(仅追加的 JSONL)。这个记录为代理提供了关于正在进行的对话的上下文。
会话键
会话根据上下文自动路由:
| 模式 | 含义 |
|---|---|
agent:main:main |
主直接对话 |
agent:<id>:<channel>:group:<id> |
特定频道上的群聊 |
agent:<id>:<channel>:channel:<id> |
频道/房间对话 |
cron:<jobId> |
计划任务执行 |
hook:<uuid> |
Webhook 触发的执行 |
会话生命周期
- 每日重置 -- 会话在可配置的时间自动重置(默认本地时间凌晨 4 点)。这每天创建一个新的对话上下文,同时保留历史。
- 空闲过期 -- 在可配置期间内未活跃的会话可以自动重置。
- 手动重置 -- 随时使用
/new或/reset命令重新开始。
Token 跟踪
会话跟踪累计 token 使用量(输入、输出、缓存读取、缓存写入),用于成本监控和上下文窗口管理。
压缩
什么是压缩?
当对话接近模型的上下文窗口限制时,Neotask 会压缩它 -- 将旧消息总结为精简概述,并以该总结加上最近消息开始新会话。
工作原理
- 检测 -- 监控上下文使用量(默认触发:上下文窗口的 80%)
- 总结 -- 旧消息被总结为压缩条目
- 新会话 -- 新会话开始,总结注入顶部
- 保留 -- 旧记录保留用于历史,但不再加载到上下文中
配置
- 启用/禁用 -- 切换自动压缩
- 阈值 -- 触发压缩的上下文窗口百分比(默认 80%)
- 最小消息数 -- 消息少于 N 条时不压缩
手动压缩
您可以随时使用 /compact 命令手动触发压缩。当您想重置上下文而不丢失重要信息时非常有用。
记忆
代理记忆
每个代理都有一个记忆系统,用于跨会话持久保存重要信息:
- MEMORY.md -- 代理工作空间中的 markdown 文件,存储重要事实、偏好和上下文
- 记忆目录 --
memory/中用于结构化知识的额外文件
向量搜索
Neotask 支持对代理记忆的向量相似性搜索:
- 索引 -- 使用嵌入对记忆文件进行索引
- 搜索 -- 代理使用自然语言查询记忆("用户说过关于 API 偏好的什么?")
- 召回 -- 相关记忆按相似度排名返回
记忆插件(LanceDB)
LanceDB 记忆插件提供高级向量存储:
- 持久向量数据库
- 可配置的块大小和重叠
- 高效的相似性搜索
- 记忆文件更改时自动重新索引
自动召回
在会话开始时,相关记忆可以自动召回并注入代理的上下文。这为代理提供了跨会话的连续性,而无需加载整个对话历史。
会话持久化
所有会话数据本地存储:
- 会话元数据 --
sessions.json跟踪活跃会话、最后活动、token 计数和配置 - 记录 -- 单独的会话记录存储为
.jsonl文件 - 恢复 -- 会话在 Gateway 重启后不会丢失数据
清理
- 在可配置期间(默认 30 天)内未访问的会话有资格被清理
- 通过 UI 或 API 提供手动会话管理
- 压缩的记录被存档但可以查看