菜单

向量数据库集成

相关源文件

本页面介绍了OpenAI嵌入模型与各种向量数据库的集成,以实现高效的语义搜索和检索。它解释了如何跨不同的数据库解决方案存储和查询向量嵌入,以实现强大的应用,例如语义搜索、问答和检索增强生成(RAG)。有关使用这些集成的特定应用的实现,请参见使用嵌入的问答使用嵌入的分类和聚类

什么是向量数据库?

向量数据库是专门的数据库系统,旨在存储、索引和高效查询高维向量数据。在AI应用的背景下,这些向量通常是由OpenAI的文本嵌入模型等嵌入模型创建的文本、图像或其他数据的密集数值表示。

与擅长精确匹配的传统数据库不同,向量数据库能够使用余弦相似度、欧几里得距离或点积等距离度量进行相似性搜索,这使得它们非常适合语义搜索和推荐系统。

来源:examples/vector_databases/README.md1-33 examples/vector_databases/pinecone/Gen_QA.ipynb1-121

向量数据库集成的基本工作流程

使用向量数据库与OpenAI嵌入的典型工作流程包含四个主要步骤:

  1. 数据准备:将源文档分割成适合嵌入的块
  2. 嵌入生成:使用OpenAI的嵌入模型将文本转换为向量
  3. 向量存储:将向量和相关元数据存储在向量数据库中
  4. 向量搜索:使用嵌入式问题/查询数据库以查找相关信息

来源:examples/vector_databases/pinecone/Gen_QA.ipynb218-306 examples/vector_databases/elasticsearch/elasticsearch-semantic-search.ipynb23-28

使用OpenAI生成嵌入

OpenAI通过API提供嵌入模型,将文本转换为高维向量。菜谱示例中最常用的模型是text-embedding-3-smalltext-embedding-ada-002

生成嵌入的典型过程遵循以下模式:

返回的嵌入向量通常具有1536维(对于text-embedding-ada-002text-embedding-3-small),可用于各种相似性匹配任务。

来源:examples/vector_databases/pinecone/Gen_QA.ipynb248-262 examples/vector_databases/zilliz/Getting_started_with_Zilliz_and_OpenAI.ipynb227-235

支持的向量数据库

OpenAI Cookbook提供了与各种向量数据库解决方案集成的示例。以下是主要选项的概述:

数据库主要功能集成示例
Pinecone托管服务,横向扩展,过滤搜索Pinecone 示例
Elasticsearch全文搜索,结合向量功能Elasticsearch 示例
Milvus/Zilliz开源,可扩展,混合搜索Zilliz 示例
Qdrant基于Rust,过滤搜索,自托管选项Qdrant 示例
Chroma简单,开发者友好,内存选项Chroma 示例
Azure AI Search微软的搜索服务,具备向量功能Azure AI Search 示例
MyScaleSQL分析 + 向量搜索MyScale 示例
Weaviate基于模式,GraphQL APIWeaviate 示例

来源:examples/vector_databases/README.md9-32

集成模式

最基本的模式是语义搜索,其中查询被嵌入并用于查找相似的文档。

来源:examples/vector_databases/pinecone/Semantic_Search.ipynb24-38 examples/vector_databases/elasticsearch/elasticsearch-semantic-search.ipynb23-28

2. 检索增强生成(RAG)

更高级的模式是RAG,它将向量搜索与语言模型生成相结合。

来源:examples/vector_databases/pinecone/Gen_QA.ipynb702-724 examples/vector_databases/elasticsearch/elasticsearch-retrieval-augmented-generation.ipynb28-31

许多向量数据库支持将向量相似性与元数据过滤相结合。

来源:examples/vector_databases/zilliz/Filtered_search_with_Zilliz_and_OpenAI.ipynb287-301 examples/vector_databases/milvus/Filtered_search_with_Milvus_and_OpenAI.ipynb279-301

实现示例

以下是使用Pinecone实现向量数据库集成的简化示例:

  1. 设置和初始化:
  1. 生成并存储嵌入:
  1. 查询相似文档:

来源:examples/vector_databases/pinecone/Gen_QA.ipynb587-696 examples/vector_databases/pinecone/Semantic_Search.ipynb90-146

向量数据库选择考量

为您的应用程序选择向量数据库时,请考虑以下因素:

因素注意事项
托管自托管 vs. 托管服务
缩放向量数量,查询吞吐量要求
集成与现有基础设施的集成便捷性
搜索能力纯向量搜索 vs. 带过滤的混合搜索
成本定价模型(按查询、按向量等)
性能索引和查询延迟要求
数据本地性数据主权和合规性要求

来源:examples/vector_databases/README.md3-32

最佳实践

  1. 分块策略:选择合适的文本块大小(通常为256-1024个token)进行嵌入。过大可能稀释语义,过小则可能丢失上下文。

  2. 元数据管理:将元数据与向量一同存储,以实现过滤并在搜索结果中提供上下文。

  3. 嵌入版本控制:跟踪所使用的嵌入模型,因为更改模型可能需要重新索引。

  4. 过滤与混合搜索:将向量相似性与元数据过滤相结合,以获得更精确的结果。

  5. 索引类型选择:根据您的延迟和召回率要求,为数据库选择合适的索引类型(例如HNSW、IVF等)。

  6. 向量归一化:在使用余弦相似度时,考虑对向量进行归一化以确保结果一致。

  7. 批处理:使用批处理操作进行嵌入生成和数据库操作,以提高吞吐量。

来源:examples/vector_databases/pinecone/Gen_QA.ipynb664-696 examples/vector_databases/elasticsearch/elasticsearch-semantic-search.ipynb134-159 examples/vector_databases/myscale/Getting_started_with_MyScale_and_OpenAI.ipynb104-128

常见用例

来源:examples/vector_databases/README.md3-5 examples/vector_databases/pinecone/README.md3-15

结论

向量数据库与OpenAI嵌入的集成,使得能够开发结合大型语言模型语义理解与高效相似性搜索的强大应用。遵循本指南中概述的模式和最佳实践,您可以构建出充分利用这两种技术优势的健壮系统。

有关基于此基础构建的更具体应用,请参阅使用嵌入的问答使用嵌入的分类和聚类的相关指南。