【RAG】【vector_stores007】异步索引创建示例

张开发
2026/4/7 6:27:58 15 分钟阅读
【RAG】【vector_stores007】异步索引创建示例
案例目标本示例展示了如何在LlamaIndex中使用异步方法创建向量索引以及这种方法相比标准同步方法在性能上的优势。通过对比测试演示异步索引创建如何显著减少索引构建时间特别是在处理大量文档时。技术栈与核心依赖llama-index- 核心框架用于构建向量索引和查询引擎llama-index-embeddings-openai- OpenAI嵌入模型集成openai- OpenAI API客户端wikipedia- 用于获取示例数据维基百科文章asyncio- Python异步编程支持环境配置在开始之前需要安装必要的依赖包安装依赖%pip install llama-index llama-index-embeddings-openai openai wikipedia然后配置OpenAI API密钥设置API密钥import os os.environ[OPENAI_API_KEY] sk-...案例实现1. 导入必要的库导入库import time from llama_index.core import VectorStoreIndex, SimpleDirectoryReader from llama_index.embeddings.openai import OpenAIEmbedding from llama_index.core import Settings2. 配置嵌入模型配置嵌入模型Settings.embed_model OpenAIEmbedding(modeltext-embedding-3-small)3. 加载示例数据加载维基百科文章import wikipedia # 获取雅加达的维基百科文章 page wikipedia.page(Jakarta) text page.content # 将文本保存到文件 with open(jakarta.txt, w) as f: f.write(text) # 使用SimpleDirectoryReader加载文档 documents SimpleDirectoryReader(input_files[jakarta.txt]).load_data() print(f加载了 {len(documents)} 个文档)4. 标准同步索引创建标准索引创建start_time time.perf_counter() index VectorStoreIndex.from_documents(documents) duration time.perf_counter() - start_time print(duration)5. 异步索引创建异步索引创建start_time time.perf_counter() index VectorStoreIndex(documents, use_asyncTrue) duration time.perf_counter() - start_time print(duration)6. 查询测试查询测试query_engine index.as_query_engine() response query_engine.query(What is the etymology of Jakarta?) print(response)案例效果标准同步索引创建7.69 秒使用传统方法创建索引所需时间异步索引创建2.37 秒使用异步方法创建索引所需时间性能提升异步索引创建方法比标准同步方法快了约3.2倍显著提高了索引构建效率。这种性能提升在处理大量文档或大型文档时尤为明显因为异步方法可以并行处理嵌入生成和索引构建过程。查询结果示例当查询What is the etymology of Jakarta?雅加达的词源是什么时系统返回了详细的回答雅加达这个名字来源于Jayakarta梵文जयकर्त最终来自梵文जय jaya胜利和कृत krta完成、获得因此Jayakarta翻译为胜利的行为、完整的行动或完全的胜利。这个名字是为了纪念1527年Fatahillah的穆斯林军队成功击败并驱逐了葡萄牙军队。在被称为Jayakarta之前这座城市被称为Sunda Kelapa。案例实现思路数据准备从维基百科获取示例文章并将其保存为文本文件然后使用SimpleDirectoryReader加载为文档对象。模型配置设置OpenAI的嵌入模型为text-embedding-3-small这是OpenAI提供的最新嵌入模型之一。性能对比分别使用标准同步方法和异步方法创建向量索引并记录每种方法所需的时间。结果验证使用创建的索引进行查询测试确保异步创建的索引功能正常。异步索引创建的核心优势在于它能够并行处理文档的嵌入生成过程而不是顺序处理每个文档。当处理大量文档时这种并行处理可以显著减少总处理时间。扩展建议批量处理优化对于非常大的文档集合可以考虑将文档分成多个批次并使用异步方法处理每个批次。自定义嵌入模型尝试使用不同的嵌入模型如本地模型或其他云服务提供商的模型比较它们的性能和效果。并行查询除了索引创建查询过程也可以优化为异步并行处理特别是当需要处理多个查询时。监控和日志添加详细的性能监控和日志记录以便更好地了解瓶颈所在并进行针对性优化。分布式处理对于超大规模数据考虑使用分布式计算框架如Dask或Ray来进一步加速处理过程。总结本示例展示了LlamaIndex中异步索引创建的强大功能和性能优势。通过简单的参数设置use_asyncTrue开发者可以显著提高索引构建速度特别是在处理大量文档时。异步索引创建是LlamaIndex提供的一个强大优化功能它利用了Python的异步编程能力并行处理文档的嵌入生成过程。这种方法不仅提高了性能而且不需要改变现有的代码结构只需添加一个参数即可实现。对于需要处理大量文档或需要快速构建索引的应用场景如实时问答系统、大规模知识库等异步索引创建是一个非常有价值的优化手段。

更多文章