import { Context } from "koishi"; import { HistoryConfig } from "./config"; import { ContextualMessage, MemoryChunkData, MessageData } from "./types"; export declare class SemanticMemoryManager { private ctx; private config; private logger; private embedModel; private messageBuffer; private isRebuilding; constructor(ctx: Context, config: HistoryConfig); start(): void; stop(): void; addMessageToBuffer(message: MessageData): Promise; flushBuffer(channelId: string): Promise; private flushAllBuffers; private processMessageBatch; /** * 根据查询文本检索相关的记忆片段。 * 1. 高效获取候选池:一次性加载所有相关chunks,在内存中计算相似度,避免全表扫描和N+1查询。 * 2. 精确近邻扩展:对Top-K候选块,在内存时间线中查找前后邻居。 * 3. 智能合并:将所有相关(候选+邻居)且时间连续的块分组,并按“头取半、尾取半、中间全取”的规则合并,确保上下文完整且无冗余。 * 4. 向量兼容性处理:自动检测并处理因更换模型导致的向量维度不一致问题,通过后台任务重建索引。 * @param queryText - 查询文本 * @param options - 查询选项 * @returns 按时间顺序排列的、经过合并优化的记忆块列表。 */ search(queryText: string, options?: { platform?: string; channelId?: string; k?: number; startTimestamp?: Date; endTimestamp?: Date; }): Promise<(MemoryChunkData & { similarity: number; })[]>; /** * 将一组按时间排序的记忆块进行分组和合并。 * 只有在全局时间线上连续的块才会被分到同一组并合并。 * @param chunks - 待处理的、已按时间排序的记忆块(候选块+邻居) * @param chunkIndexMap - 全局块ID到其在时间线上索引的映射 * @returns 合并后的记忆块列表 */ private groupAndMergeChunks; compileEventsToText(messages: (MessageData | ContextualMessage)[]): string; /** * 重建所有 L2 记忆片段的向量索引。 * 增加状态锁,防止多个重建任务同时运行。 */ rebuildIndex(): Promise; }