/** * VectorMemory — 向量记忆系统 * * 从 JSON 平面记忆升级为语义向量搜索: * 1. 本地向量索引(无需外部数据库,纯 TypeScript 实现) * 2. 文本嵌入:支持 OpenAI / 本地 TF-IDF 双模式 * 3. 相似度搜索:余弦相似度 Top-K * 4. RAG 上下文注入:自动检索相关记忆拼接到 LLM Prompt * 5. 记忆分层:短期(会话)→ 中期(摘要)→ 长期(向量) * * 参考: OpenClaw Persistent Memory + MemGPT */ export interface VectorEntry { id: string; text: string; vector: number[]; metadata: { type: "conversation" | "fact" | "preference" | "summary" | "publish" | "skill_usage"; source?: string; tags?: string[]; importance?: number; createdAt: string; accessCount: number; lastAccessedAt?: string; }; } export interface SearchResult { entry: VectorEntry; similarity: number; } export interface VectorMemoryConfig { dataPath: string; /** 向量维度(TF-IDF 模式自适应) */ dimensions: number; /** 最大存储条目 */ maxEntries: number; /** 相似度阈值(低于此值不返回) */ similarityThreshold: number; /** 嵌入模式 */ embeddingMode: "tfidf" | "api"; /** OpenAI API Key(api 模式) */ embeddingApiKey?: string; } export interface RAGContext { query: string; relevantMemories: SearchResult[]; contextText: string; tokenEstimate: number; } export declare class VectorMemory { private config; private entries; private embedder; constructor(config?: Partial); /** * 记住一条信息 */ remember(text: string, type?: VectorEntry["metadata"]["type"], options?: { tags?: string[]; importance?: number; source?: string; }): VectorEntry; /** * 批量记忆 */ rememberBatch(items: Array<{ text: string; type?: VectorEntry["metadata"]["type"]; tags?: string[]; }>): number; /** * 记住对话(自动摘要) */ rememberConversation(userMessage: string, assistantReply: string): VectorEntry; /** * 语义搜索(余弦相似度) */ search(query: string, limit?: number, filter?: { type?: string; tags?: string[]; }): SearchResult[]; /** * 按类型检索 */ getByType(type: VectorEntry["metadata"]["type"], limit?: number): VectorEntry[]; /** * 构建 RAG 上下文 * 根据用户查询,检索相关记忆,拼接为 LLM 可用的上下文 */ buildRAGContext(query: string, maxTokens?: number): RAGContext; /** * 生成 RAG System Prompt 片段 */ buildRAGPrompt(query: string): string; /** 删除记忆 */ forget(id: string): boolean; /** 按条件清理 */ forgetByFilter(filter: { type?: string; olderThan?: string; minImportance?: number; }): number; /** 压缩:淘汰低价值记忆 */ private compact; getStatus(): { totalEntries: number; typeDistribution: Record; vocabularySize: number; oldestEntry: string | null; newestEntry: string | null; }; private cosineSimilarity; private load; private save; } //# sourceMappingURL=vector-store.d.ts.map