为了优化 LlamaIndex 中的搜索性能,重点关注三个关键领域:索引结构、查询调优和基础设施优化。首先确保你的数据得到高效索引。LlamaIndex 支持多种索引类型(例如,向量存储、树状、关键词),选择哪种取决于你的用例。例如,使用较低嵌入维度(例如,128 而非 768)的 VectorStoreIndex
可以减少内存使用并加快相似度搜索。将文档分成更小的、具有语义意义的块(例如,512 个 token 而非 2048 个)也能提高检索准确性并减少计算开销。如果你的数据包含层级关系,HierarchicalKeywordTableIndex
可以在深入细节之前优先处理更广泛的主题,从而减少不必要的节点遍历。
接下来,通过优化搜索操作的执行方式来调优查询。使用 HyDE(假设文档嵌入)等查询转换来生成合成答案并将其与相关节点匹配,这通常比纯关键词搜索更能提高相关性。对于混合搜索(结合向量和关键词检索),设置权重以平衡精确率和召回率——例如,向量相似度权重为 0.7,关键词匹配权重为 0.3。调整 similarity_top_k
参数以限制检索过程中处理的节点数量;将其从 20 减少到 10 可能将延迟缩短 30% 而不牺牲质量。此外,使用 RouterQueryEngine
自动将查询导向最合适的索引——例如,将事实类问题路由到关键词索引,将概念类查询路由到向量索引。
最后,优化基础设施以应对规模挑战。使用高性能向量数据库(例如,FAISS、Pinecone)来分载相似度搜索,因为它们针对快速最近邻查找进行了优化。对频繁查询启用缓存——LlamaIndex 的 SimpleDocumentCache
将检索到的节点存储在内存中,避免重复生成嵌入。如果延迟至关重要,请在索引时而非查询时预计算嵌入。对于分布式系统,将索引分片到不同服务器上(例如,按日期或类别划分)以并行化搜索。使用 cProfile
等工具进行性能分析以找出瓶颈——例如,如果分词消耗了 40% 的查询时间,请切换到更快的库,例如 tiktoken
。定期清除过时或低相关度的节点,以保持索引精简。