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

【RAG】【vector_stores038】Firestore向量存储示例

案例目标

本案例展示如何使用Google Firestore作为向量数据库,与LlamaIndex集成实现高效的文档存储和相似性搜索功能。Firestore是Google Cloud提供的无服务器文档数据库,可以自动扩展以满足任何需求。

通过本示例,您将学习:

  • 如何配置Google Cloud项目和Firestore数据库
  • 如何使用FirestoreVectorStore存储和检索向量数据
  • 如何执行向量相似性搜索查询
  • 如何应用元数据过滤来优化搜索结果

技术栈与核心依赖

核心依赖

依赖包用途
llama-index-vector-stores-firestoreLlamaIndex与Firestore的集成包
llama-index-embeddings-huggingfaceHuggingFace嵌入模型集成
llama-indexLlamaIndex核心框架
google-cloud-firestoreGoogle Cloud Firestore客户端库

技术栈

Google Firestore GCP

无服务器文档数据库,提供自动扩展和强一致性

HuggingFace嵌入

使用BAAI/bge-small-en-v1.5模型生成文本向量表示

文档处理

LlamaIndex的SimpleDirectoryReader用于加载文档

向量索引

LlamaIndex的VectorStoreIndex用于构建索引和查询

环境配置

Google Cloud项目设置

在运行示例之前,需要完成以下步骤:

  1. 创建Google Cloud项目:访问Google Cloud控制台创建新项目
  2. 启用Firestore API:在API库中启用Firestore API
  3. 创建Firestore数据库:按照Firestore文档创建数据库

安装依赖

%pip install --quiet llama-index %pip install --quiet llama-index-vector-stores-firestore llama-index-embeddings-huggingface

设置Google Cloud项目ID

# 设置您的Google Cloud项目ID PROJECT_ID = "YOUR_PROJECT_ID" # 替换为您的项目ID # 使用gcloud命令行工具设置项目 !gcloud config set project {PROJECT_ID}

提示:如果您不知道项目ID,可以运行以下命令之一:

  • gcloud config list- 查看当前配置
  • gcloud projects list- 列出所有项目

身份验证

在Colab环境中,可以使用以下代码进行身份验证:

from google.colab import auth # 进行身份验证 auth.authenticate_user()

注意:如果您在Vertex AI Workbench中运行此笔记本,请参考设置说明进行身份验证。

案例实现

1. 导入必要的库

from llama_index.core import SimpleDirectoryReader, VectorStoreIndex, StorageContext, ServiceContext from llama_index.embeddings.huggingface import HuggingFaceEmbedding from llama_index.vector_stores.firestore import FirestoreVectorStore from llama_index.core import Settings

2. 加载文档数据

# 加载Paul Graham的文章数据 documents = SimpleDirectoryReader( "../../examples/data/paul_graham" ).load_data()

3. 配置嵌入模型

# 设置HuggingFace嵌入模型 embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-small-en-v1.5")

4. 创建Firestore向量存储

# 指定集合名称 COLLECTION_NAME = "test_collection" # 创建Firestore向量存储 store = FirestoreVectorStore(collection_name=COLLECTION_NAME)

5. 构建向量索引

# 创建存储上下文 storage_context = StorageContext.from_defaults(vector_store=store) # 创建服务上下文,禁用LLM,仅使用嵌入模型 service_context = ServiceContext.from_defaults( llm=None, embed_model=embed_model ) # 从文档创建向量索引 index = VectorStoreIndex.from_documents( documents, storage_context=storage_context, service_context=service_context )

6. 执行查询

# 创建查询引擎 query_engine = index.as_query_engine() # 执行查询 res = query_engine.query("What did the author do growing up?") # 打印最相关的文档片段 print(str(res.source_nodes[0].text))

7. 应用元数据过滤

from llama_index.core.vector_stores.types import ( MetadataFilters, ExactMatchFilter, MetadataFilter, ) # 创建元数据过滤器 filters = MetadataFilters( filters=[MetadataFilter(key="author", value="Paul Graham")] ) # 创建带过滤器的查询引擎 query_engine = index.as_query_engine(filters=filters) # 执行带过滤的查询 res = query_engine.query("What did the author do growing up?") print(str(res.source_nodes[0].text))

Firebase/Firestore特性:

  • 自动扩展:无需管理服务器,根据需求自动扩展
  • 实时同步:数据更改会实时同步到所有客户端
  • 离线支持:支持离线数据访问和同步
  • 安全规则:提供细粒度的数据访问控制

案例效果

本示例展示了Firestore向量存储的完整工作流程,包括:

  • 配置Google Cloud项目和Firestore数据库
  • 使用HuggingFace嵌入模型将文档转换为向量
  • 将Paul Graham的文章数据索引到Firestore向量存储中
  • 执行向量相似性搜索查询,获取相关文档片段
  • 应用元数据过滤器优化搜索结果

预期输出示例

What I Worked On February 2021 Before college the two main things I worked on, outside of school, were writing and programming. I didn't write essays. I wrote what beginning writers were supposed to write then, and probably still are: short stories. My stories were awful. They had hardly any plot, just characters with strong feelings, which I imagined made them deep. The first programs I tried writing were on the IBM 1401 that our school district used for what was then called "data processing." This was in 9th grade, so I was 13 or 14. The school district's 1401 happened to be in the basement of our junior high school, and my friend Rich Draves and I got permission to use it. It was like a mini Bond villain's lair down there, with all these alien-looking machines — CPU, disk drives, printer, card reader — sitting up on a raised floor under bright fluorescent lights.

案例实现思路

核心实现步骤

  1. 环境准备:创建Google Cloud项目,启用Firestore API,创建数据库
  2. 身份验证:配置Google Cloud身份验证,确保代码可以访问Firestore
  3. 依赖安装:安装必要的Python包,包括Firestore集成和嵌入模型
  4. 数据准备:使用SimpleDirectoryReader加载示例文档
  5. 嵌入模型配置:设置HuggingFace嵌入模型,用于将文本转换为向量
  6. 向量存储初始化:创建FirestoreVectorStore实例,指定集合名称
  7. 索引构建:使用加载的文档和配置的上下文创建VectorStoreIndex
  8. 查询执行:通过查询引擎执行向量相似性搜索
  9. 过滤应用:使用元数据过滤器优化搜索结果

关键技术点

Firestore集成

通过FirestoreVectorStore类将Firestore作为向量数据库,实现文档存储和检索

HuggingFace嵌入

使用BAAI/bge-small-en-v1.5模型生成高质量的文本向量表示

向量索引

通过VectorStoreIndex将文档转换为向量并存储在Firestore中

元数据过滤

使用MetadataFilters实现基于文档属性的精确搜索

架构流程

Firebase Firestore向量存储架构流程图(示意图)

扩展建议

功能扩展

  • 实现批量操作支持,提高大规模数据处理效率
  • 添加高级过滤器支持,如范围过滤、模糊匹配等
  • 集成混合搜索功能,结合向量搜索和全文搜索
  • 实现实时数据同步,支持多客户端协作

性能优化

  • 优化索引策略,提高查询响应速度
  • 实现向量压缩技术,减少存储成本
  • 添加缓存机制,减少重复查询开销
  • 使用异步操作,提高并发处理能力

应用场景扩展

智能搜索

构建理解语义的搜索引擎,提供更精准的搜索结果

内容推荐

基于用户偏好和内容相似性,实现个性化内容推荐

知识问答

构建智能问答系统,基于文档内容回答用户问题

集成建议

  • 与Google Cloud服务集成:如Cloud Functions、Cloud Run,实现无服务器应用
  • 与Firebase Authentication集成:实现用户身份验证和授权
  • 与Google Cloud Storage集成:实现大规模文件存储和处理
  • 与Vertex AI集成:使用Google的高级AI模型增强应用功能

总结

本示例展示了如何使用Google Firestore作为向量数据库,与LlamaIndex集成实现高效的文档存储和相似性搜索功能。Firestore作为Google Cloud提供的无服务器文档数据库,具有自动扩展、实时同步和离线支持等特性,非常适合构建现代AI应用。

通过本示例,我们学习了:

  • 如何配置Google Cloud项目和Firestore数据库
  • 如何使用FirestoreVectorStore存储和检索向量数据
  • 如何执行向量相似性搜索查询
  • 如何应用元数据过滤来优化搜索结果

Firebase Firestore向量存储的主要优势包括:

  • 无服务器架构:无需管理服务器,自动扩展以满足需求
  • 实时同步:数据更改会实时同步到所有客户端
  • 离线支持:支持离线数据访问和同步
  • 安全规则:提供细粒度的数据访问控制
  • 全球分布:数据可以在全球多个区域复制,提高访问速度

这个示例为构建基于Google Cloud的向量搜索应用提供了基础,可以根据具体需求扩展功能,实现更复杂的AI应用场景。

http://www.jsqmd.com/news/639041/

相关文章:

  • 3步快速实现百度网盘高速下载:免费直链解析工具完全指南
  • 21天从零到机器人高手:RoboMaster开发板C型嵌入式开发终极指南
  • 3分钟让Figma秒变中文界面:设计师的终极汉化解决方案
  • C 语言面向对象风格封装的经典技巧(STM32F1 标准库实现)
  • 如何快速掌握Audiveris:免费开源乐谱识别工具终极指南
  • 深聊靠谱的通过式抛丸机厂家怎么选,铜材用设备优质之选 - mypinpai
  • 如何安全备份微信聊天记录:完整导出实战指南
  • (三)PointPillars在MMDetection3D中的数据处理流程深度剖析——从原始点云到训练样本
  • 本地千万级图片搜索工具终极指南:快速找回相似图片的完整解决方案
  • 2026年知名的抗倍特板隔断/A级阻燃HPL抗倍特板/松田抗倍特板/抗倍特板HPL防水防潮板厂家选购指南与推荐 - 行业平台推荐
  • 基于深度学习的红外目标检测系统 yolo11红外小目标检测+红外无人机视角行人识别+车辆检测
  • 《舌尖上的中国》看一口艾饼,满是春天的味道
  • R3nzSkin实战指南:英雄联盟内存换肤技术深度解析与安全部署方案
  • 有实力的养发品牌加盟哪家好,盘点行业口碑出众的加盟项目 - myqiye
  • RK3588 Linux下Camera偏色与光线问题的3A调试指南
  • 3种安卓位置模拟方案深度对比:FakeLocation技术实现与应用指南
  • 5分钟上手MinerU API:实现学术论文截图的内容总结与图表分析
  • 2026年全国羊奶粉品牌综合测评报告:国产金奖品牌美力源乳业领跑 - 深度智识库
  • 2026 Temu广告投放优化三大策略,让广告投放更高效! - 跨境小媛
  • 本地项目云服务器部署
  • nli-distilroberta-base安全与隐私考量:模型部署中的风险与缓解措施
  • 别再只写data()了!深入理解PyQt5 QAbstractItemModel中flags()和setData()的实战用法
  • YaeAchievement:3分钟搞定原神成就导出的终极解决方案
  • Rust的闭包语法分析
  • 小红书场景化内容杀招:把“卖产品”变成“卖生活“,本地商家高收藏笔记模板 - Redbook_CD
  • Mythos、OpenClaw、GLM-5.1 连续出现后,Agent 系统的测试边界开始重写
  • CUDA环境权限问题解析:从mmcv-full安装报错Permission denied到系统级解决方案
  • Adobe-GenP:轻松激活Adobe Creative Cloud的完整解决方案
  • SDXL 1.0电影级绘图工坊效果展示:同一提示词下5种预设风格生成效果全景对比
  • 视频封面批量制作工具完整使用指南:从素材准备到批量输出的操作全流程