当前位置: 首页 > 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.jsqmd.com/news/600825/

相关文章:

  • 我业余时间开发的产品,被 LangChain 官方推荐了!
  • 数据库(如MySQL)的锁实现细节
  • Qwen3-TTS低延迟实战:集成WebRTC实现实时语音通话,无缝对话
  • FireRed-OCR Studio部署教程:Windows WSL2环境下GPU加速配置
  • MiniCPM-o-4.5-nvidia-FlagOS学术写作助手:LaTeX公式与论文排版智能辅助
  • Leather Dress Collection 自动化运维脚本生成:根据自然语言描述创建Shell或Python脚本
  • Qwen3-ASR-0.6B乡村振兴:乡村广播语音内容自动摘要系统
  • AudioSeal Pixel Studio入门指南:CUDA设备检测+临时缓存一键清理功能详解
  • 深夜爆肝剪片遇日语“天书”?我靠这个翻译神器,效率直接翻倍!
  • CSS如何快速调整全站主题颜色_利用全局CSS变量的一键修改特性
  • 2025届最火的六大AI学术工具解析与推荐
  • 随机链表的复制
  • TurboDiffusion实战案例:从文案到视频,完整创作流程分享
  • ShardingSphere分片算法配置和雪花算法的高可用变种实现细节
  • 告别复杂配置!GLM-4.7-Flash镜像开箱即用,支持OpenAI兼容API
  • Ostrakon-VL像素终端实战:餐饮后厨食材库存图像盘点案例
  • DAMOYOLO-S开发入门:JavaScript前端实现实时视频检测与可视化
  • 从 LLM 到 Agent Skill,龙虾的技术基础 · ⑧ Agent Skill
  • LCD1602液晶显示屏从入门到精通:手把手教你用Arduino驱动显示自定义字符
  • 2026成都痤疮诊疗机构推荐指南 - 优质品牌商家
  • 小白也能用的专业工具:FUTURE POLICE语音字幕对齐体验分享
  • Python Tkinter如何实现下拉选择菜单_使用OptionMenu组件配置选项
  • 【RAG】【vector_stores008】AwaDB向量存储示例
  • 分库分表中间件的选型(ShardingSphere vs MyCat vs Vitess)或全局ID生成方案(雪花算法、Leaf等)
  • OpenClaw技能市场巡礼:10款SecGPT-14B增强安全工具推荐
  • Phi-4-mini-reasoning模型推理加速实践:利用.accelerate库优化性能
  • PyTorch 2.8镜像实际效果:120GB内存支撑千张4K视频帧并行处理实测
  • 嵌入式非阻塞启动画面库:SplashScreen设计与实践
  • FireRedASR-AED-L效果实测:微信语音转文字→长语音断句与上下文连贯性
  • AIGlasses_for_navigation实战案例:便利店视障购物辅助系统搭建全过程