会话 (Conversations)
字数
480 字
阅读时间
2 分钟
ctx.conversations(@chatluna/conversations)维护「会话键 → 活会话」的索引关系,是插件进行会话交互的业务入口。底层的只追加写入(append-only)日志由 ctx.sessions 统一管理。
常用 API
| 方法 | 作用 |
|---|---|
head(key, initial, { peer? }) | 获取或创建会话当前 head,返回 SessionId |
open(input) | 打开活会话(必要时创建 Agent) |
fork(key, { at?, title? }) | 从指定切点分叉,并将新会话设为 head |
reset(key, next) | 释放旧 Agent,将 head 指向已存在的 next |
switch(key, to) | 将 head 切换到已存在的会话 |
history(key, page) | 查询指定会话键的历史会话(游标分页) |
list(page) / counts() | 全局列表查询与分组统计 |
peek(key) | 只读访问内存缓存 |
live(key) | 获取活会话句柄 |
lives() | 列出当前实例承载的所有活会话 |
release(sessionId) | 释放并关闭指定 Session 上的 Agent |
语义
- 一个会话键在同一时刻只能存在一个活跃的 Agent。切换 head 时会先
release释放旧 Agent。 reset不会自动创建新会话。目标next需由调用方预先创建,该方法仅负责切换 head 指向。fork会复制父会话切点前的所有条目,并将生成的新会话设为当前 head。previousSessionId仅用于链路溯源,不参与撤销操作。
与 sessions 的关系
ctx.sessions(提供 open、create、branch、list、head、delete 等方法)专注于底层日志管理;ctx.conversations 则在日志层之上封装了业务索引、内存缓存(cacheSize 为 1000、maxLiveSessions 为 200、空闲 30 分钟逐出)以及 head 管理。
只有当前实例主动打开过的 Agent 才会计入逐出管理,复用的活会话不会重复计数。