当前位置: 首页 > news >正文

【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 Settings

2. 配置嵌入模型

配置嵌入模型

Settings.embed_model = OpenAIEmbedding(model="text-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_async=True) 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"。

案例实现思路

  1. 数据准备:从维基百科获取示例文章,并将其保存为文本文件,然后使用SimpleDirectoryReader加载为文档对象。
  2. 模型配置:设置OpenAI的嵌入模型为"text-embedding-3-small",这是OpenAI提供的最新嵌入模型之一。
  3. 性能对比:分别使用标准同步方法和异步方法创建向量索引,并记录每种方法所需的时间。
  4. 结果验证:使用创建的索引进行查询测试,确保异步创建的索引功能正常。

异步索引创建的核心优势在于它能够并行处理文档的嵌入生成过程,而不是顺序处理每个文档。当处理大量文档时,这种并行处理可以显著减少总处理时间。

扩展建议

  • 批量处理优化:对于非常大的文档集合,可以考虑将文档分成多个批次,并使用异步方法处理每个批次。
  • 自定义嵌入模型:尝试使用不同的嵌入模型,如本地模型或其他云服务提供商的模型,比较它们的性能和效果。
  • 并行查询:除了索引创建,查询过程也可以优化为异步并行处理,特别是当需要处理多个查询时。
  • 监控和日志:添加详细的性能监控和日志记录,以便更好地了解瓶颈所在并进行针对性优化。
  • 分布式处理:对于超大规模数据,考虑使用分布式计算框架如Dask或Ray来进一步加速处理过程。

总结

本示例展示了LlamaIndex中异步索引创建的强大功能和性能优势。通过简单的参数设置use_async=True,开发者可以显著提高索引构建速度,特别是在处理大量文档时。

异步索引创建是LlamaIndex提供的一个强大优化功能,它利用了Python的异步编程能力,并行处理文档的嵌入生成过程。这种方法不仅提高了性能,而且不需要改变现有的代码结构,只需添加一个参数即可实现。

对于需要处理大量文档或需要快速构建索引的应用场景,如实时问答系统、大规模知识库等,异步索引创建是一个非常有价值的优化手段。

http://www.cnnetsun.cn/news/1733326.html

相关文章:

  • Pi0具身智能v1功能体验:自定义任务描述影响动作生成实测
  • Qwen3-TTS低延迟实战:集成WebRTC实现实时语音通话,无缝对话
  • OpenClaw技能市场巡礼:10款SecGPT-14B增强安全工具推荐
  • AIGlasses_for_navigation与Dify平台集成:快速构建导航应用工作流
  • ComfyUI Qwen镜像部署与使用:小白也能轻松玩转AI图像生成
  • SDMatte多模态应用初探:结合CLIP实现以文搜图与智能裁剪
  • LFM2.5-1.2B-Thinking-GGUF算法解析应用:动态图解经典排序与搜索算法
  • Android 11 Settings功能裁剪实战:从PreferenceController到XML配置的完整流程解析
  • GCC-Net实战解析:如何通过门控跨域协作提升水下目标检测精度
  • Phi-4-mini-reasoning辅助C++项目代码审查:内存管理与性能瓶颈推理
  • STM8硬件IIC驱动BNO055避坑指南:从模拟IIC失败到一次成功的完整流程
  • 跨平台文件同步:OpenClaw+Qwen3-4B自动归类NAS中的文档
  • Qwen3.5-4B模型软件测试用例生成实战:提升测试覆盖率
  • 视频剪辑新助手:用SAM 3智能跟踪分割视频中的运动物体
  • UNIT-00:Berserk Interface 深入解析Python核心机制:从语法糖到内存管理
  • SDMatte极限测试:应对低光照、高噪声、强遮挡的挑战
  • Rembg 图片去背景工具 懒人整合包 优化可视化界面和添加模型 cpu可用 gpu可用
  • 零基础玩转OpenClaw:Qwen3-32B镜像云端体验与技能市场探索
  • Ubuntu服务器运维指南:霜儿-汉服-造相Z-Turbo模型服务的监控与高可用保障
  • 三天踩坑实录:用Pyinstaller打包PaddleOCR+PyQt5桌面应用,我总结的这份spec文件配置清单请收好
  • 低成本GPU方案|SeqGPT-560M开源镜像部署:单卡T4即可跑满1.1GB模型
  • 从插件安装到项目配置:在Cursor里用CMake和.vscode文件夹搞定C++开发环境
  • 手把手教你用lite-avatar形象库:小白也能玩转数字人对话
  • 千问3.5-2B大模型压缩与蒸馏实战:降低部署门槛
  • NEURAL MASK 模型服务API封装:基于.NET Core构建高性能中间件
  • Windows下OpenClaw安装详解:Qwen3.5-9B模型联调避坑指南
  • DeepSeek-OCR 2企业级应用:基于SpringBoot的文档智能管理系统
  • Python3.10镜像新手福利:免配置Python环境,直接开始编程
  • 基于VMD分解的信号处理流程:从Excel读取、IMF分量计算与滤波重构
  • Win11Debloat:Windows系统终极精简优化完整指南