@agentkai/node
Version:
AgentKai的Node.js环境特定实现
121 lines (120 loc) • 3.53 kB
TypeScript
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;
}