会话管理 sessions

会话管理技能用于创建和维护跨渠道的对话会话,包括会话历史记录、检查点保存、消息加密等功能,适用于需要管理多用户对话和保持会话状态的应用场景。

后端开发 0 次安装 0 次浏览 更新于 3/5/2026

Sessions - Complete API Reference

管理对话会话、历史记录、检查点和跨渠道的重置。


聊天命令

会话控制

/new                                        开始新的对话
/reset                                      重置当前会话
/session                                    查看会话信息
/session list                              列出活动会话

检查点

/checkpoint save "before refactor"          保存检查点
/checkpoint list                            列出检查点
/checkpoint restore <id>                    恢复检查点
/checkpoint delete <id>                     删除检查点

历史记录

/history                                    查看对话历史
/history export                             导出为markdown
/history clear                              清除历史记录(保持会话)

设置

/session scope main                         使用主会话
/session scope channel                      每个频道的会话
/session scope peer                         每个用户的会话
/session reset-time 00:00                    设置每日重置时间
/session idle-reset 30                       30分钟后重置

TypeScript API 参考

创建会话管理器

import { createSessionManager } from 'clodds/sessions';

const sessions = createSessionManager({
  // 会话范围
  scope: 'per-channel-peer',  // 'main' | 'per-peer' | 'per-channel-peer'

  // 自动重置
  dailyResetHour: 0,  // 在午夜重置
  idleResetMinutes: 30,  // 30分钟不活动后重置

  // 存储
  storage: 'sqlite',
  dbPath: './sessions.db',

  // 加密
  encryptTranscripts: true,
  encryptionKey: process.env.SESSION_KEY,
});

获取或创建会话

const session = await sessions.getOrCreateSession({
  userId: 'user-123',
  channelId: 'telegram-456',
  peerId: 'peer-789',
});

console.log(`会话ID: ${session.id}`);
console.log(`创建时间: ${session.createdAt}`);
console.log(`消息数: ${session.messageCount}`);
console.log(`最后活动: ${session.lastActivityAt}`);

添加消息到历史记录

// 添加用户消息
await sessions.addMessage({
  sessionId: session.id,
  role: 'user',
  content: '我的投资组合价值是多少?',
});

// 添加助手消息
await sessions.addMessage({
  sessionId: session.id,
  role: 'assistant',
  content: '你的投资组合价值为$10,234.56',
  usage: {
    inputTokens: 500,
    outputTokens: 200,
  },
});

获取历史记录

// 获取对话历史
const history = await sessions.getHistory(session.id, {
  limit: 50,
  format: 'messages',  // 'messages' | 'markdown' | 'text'
});

for (const msg of history) {
  console.log(`[${msg.role}] ${msg.content}`);
}

清除历史记录

// 清除对话但保持会话
await sessions.clearHistory(session.id);

重置会话

// 完全重置(新会话)
await sessions.reset({
  userId: 'user-123',
  channelId: 'telegram-456',
});

检查点

// 保存检查点
const checkpoint = await sessions.saveCheckpoint({
  sessionId: session.id,
  name: 'Before major change',
  description: '在重构交易策略前保存状态',
});

console.log(`检查点ID: ${checkpoint.id}`);
console.log(`保存的消息数: ${checkpoint.messageCount}`);

// 列出检查点
const checkpoints = await sessions.listCheckpoints(session.id);

for (const cp of checkpoints) {
  console.log(`${cp.id}: ${cp.name} (${cp.messageCount} messages)`);
}

// 恢复检查点
await sessions.restoreCheckpoint(checkpoint.id);

// 删除检查点
await sessions.deleteCheckpoint(checkpoint.id);

导出会话

// 导出为markdown
const markdown = await sessions.export(session.id, {
  format: 'markdown',
  includeMetadata: true,
});

// 导出为JSON
const json = await sessions.export(session.id, {
  format: 'json',
});

会话清理

// 删除旧会话
await sessions.cleanup({
  olderThan: '30d',  // 删除30天以上的会话
  keepCheckpoints: true,
});

会话范围

范围 描述 使用案例
main 单一全局会话 个人使用
per-peer 每个用户的会话 多用户,共享频道
per-channel-peer 每个用户每个频道的会话 完全隔离

自动重置行为

触发器 行为
每日重置 在配置的小时数新开一个会话
空闲重置 在不活动后新开一个会话
手动重置 用户运行 /new/reset

加密

encryptTranscripts: true:

  • 所有消息使用AES-256-GCM加密
  • 每个会话的加密密钥
  • 从主密钥安全派生密钥

上下文窗口管理

// 获取上下文感知历史记录(用于LLM)
const context = await sessions.getContextHistory({
  sessionId: session.id,
  maxTokens: 100000,  // 适应上下文窗口
  strategy: 'smart',  // 'recent' | 'smart' | 'summarize'
});

// 'smart' 保留系统消息 + 最近 + 重要消息
// 'summarize' 将旧消息压缩成摘要

最佳实践

  1. 选择合适的范围 — 多用户使用每个频道的每个用户
  2. 使用检查点 — 在重大更改或实验前
  3. 定期导出 — 保留重要对话的备份
  4. 设置空闲重置 — 防止上下文过时
  5. 启用加密 — 对于敏感对话