UNPKG

@agentkai/node

Version:

AgentKai的Node.js环境特定实现

121 lines (120 loc) 3.53 kB
import { EmbeddingProvider, ISearchProvider, Memory, SearchOptions, SearchResult, StorageProvider } from '@agentkai/core'; /** * HNSW搜索提供者 * * 这个类使用HNSW算法提供高效的向量搜索功能。与传统实现不同,为避免与底层C++库 * 的内存管理问题,本实现不保留索引实例,而是将记忆和其嵌入向量保存在内存中, * 仅在需要搜索时创建临时索引。此方法虽然每次搜索时有额外开销,但完全避免了 * 内存泄漏和双重释放问题。 */ export declare class HnswSearchProvider implements ISearchProvider { private readonly embeddingProvider; private readonly logger; private readonly storage; private readonly fs; private readonly pathUtils; private readonly metadataPath; private dimensions; private spacetype; private initialized; private idToIndex; private memories; private currentCount; private readonly efConstruction; private readonly efSearch; private readonly M; /** * 创建HNSW搜索提供者 * @param storage 存储提供者,用于加载记忆 * @param embeddingProvider 嵌入向量提供者 * @param dataPath 数据目录路径 * @param indexName 索引名称 */ constructor(storage: StorageProvider<Memory>, embeddingProvider: EmbeddingProvider, dataPath: string, indexName?: string); /** * 删除记忆 * 实现ISearchProvider接口 * @param id 记忆ID */ deleteMemory(id: string): Promise<void>; /** * 按内容搜索记忆 * @param query 搜索查询文本 * @param options 搜索选项 * @returns 搜索结果 */ searchByContent(query: string, options?: SearchOptions): Promise<SearchResult>; /** * 按向量搜索记忆 * @param vector 搜索向量 * @param options 搜索选项 * @returns 搜索结果 */ searchByVector(vector: number[], options?: SearchOptions): Promise<SearchResult>; /** * 创建临时索引并执行搜索 * @param vector 查询向量 * @param limit 结果数量限制 * @returns 匹配的记忆数组 */ private searchWithTempIndex; /** * 处理搜索结果 * @param neighbors 邻居索引 * @param distances 距离值 * @returns 处理后的记忆数组 */ private processSearchResults; /** * 将距离转换为相似度 * @param distance 距离值 * @returns 相似度值 (0-1) */ private distanceToSimilarity; /** * 安全释放索引资源 * @param index 索引实例 */ private releaseIndexResource; /** * 确保已初始化 */ private ensureInitialized; /** * 初始化搜索提供者 * 加载记忆元数据 */ initialize(): Promise<void>; /** * 添加记忆到搜索索引 * @param memory 要添加的记忆 */ addMemory(memory: Memory): Promise<void>; /** * 更新记忆 * @param memory 更新后的记忆 */ updateMemory(memory: Memory): Promise<void>; /** * 移除记忆 * @param id 记忆ID */ removeMemory(id: string): Promise<void>; /** * 清空索引 */ clear(): Promise<void>; /** * 保存元数据到文件 */ private saveMetadata; /** * 从文件加载元数据 */ private loadMetadata; /** * 重建索引 * 加载所有记忆并重建元数据 */ private rebuildIndex; }