本页面介绍了OpenAI嵌入模型与各种向量数据库的集成,以实现高效的语义搜索和检索。它解释了如何跨不同的数据库解决方案存储和查询向量嵌入,以实现强大的应用,例如语义搜索、问答和检索增强生成(RAG)。有关使用这些集成的特定应用的实现,请参见使用嵌入的问答和使用嵌入的分类和聚类。
向量数据库是专门的数据库系统,旨在存储、索引和高效查询高维向量数据。在AI应用的背景下,这些向量通常是由OpenAI的文本嵌入模型等嵌入模型创建的文本、图像或其他数据的密集数值表示。
与擅长精确匹配的传统数据库不同,向量数据库能够使用余弦相似度、欧几里得距离或点积等距离度量进行相似性搜索,这使得它们非常适合语义搜索和推荐系统。
来源:examples/vector_databases/README.md1-33 examples/vector_databases/pinecone/Gen_QA.ipynb1-121
使用向量数据库与OpenAI嵌入的典型工作流程包含四个主要步骤:
来源:examples/vector_databases/pinecone/Gen_QA.ipynb218-306 examples/vector_databases/elasticsearch/elasticsearch-semantic-search.ipynb23-28
OpenAI通过API提供嵌入模型,将文本转换为高维向量。菜谱示例中最常用的模型是text-embedding-3-small和text-embedding-ada-002。
生成嵌入的典型过程遵循以下模式:
返回的嵌入向量通常具有1536维(对于text-embedding-ada-002和text-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 示例 |
| MyScale | SQL分析 + 向量搜索 | MyScale 示例 |
| Weaviate | 基于模式,GraphQL API | Weaviate 示例 |
来源:examples/vector_databases/README.md9-32
最基本的模式是语义搜索,其中查询被嵌入并用于查找相似的文档。
来源:examples/vector_databases/pinecone/Semantic_Search.ipynb24-38 examples/vector_databases/elasticsearch/elasticsearch-semantic-search.ipynb23-28
更高级的模式是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实现向量数据库集成的简化示例:
来源:examples/vector_databases/pinecone/Gen_QA.ipynb587-696 examples/vector_databases/pinecone/Semantic_Search.ipynb90-146
为您的应用程序选择向量数据库时,请考虑以下因素:
| 因素 | 注意事项 |
|---|---|
| 托管 | 自托管 vs. 托管服务 |
| 缩放 | 向量数量,查询吞吐量要求 |
| 集成 | 与现有基础设施的集成便捷性 |
| 搜索能力 | 纯向量搜索 vs. 带过滤的混合搜索 |
| 成本 | 定价模型(按查询、按向量等) |
| 性能 | 索引和查询延迟要求 |
| 数据本地性 | 数据主权和合规性要求 |
来源:examples/vector_databases/README.md3-32
分块策略:选择合适的文本块大小(通常为256-1024个token)进行嵌入。过大可能稀释语义,过小则可能丢失上下文。
元数据管理:将元数据与向量一同存储,以实现过滤并在搜索结果中提供上下文。
嵌入版本控制:跟踪所使用的嵌入模型,因为更改模型可能需要重新索引。
过滤与混合搜索:将向量相似性与元数据过滤相结合,以获得更精确的结果。
索引类型选择:根据您的延迟和召回率要求,为数据库选择合适的索引类型(例如HNSW、IVF等)。
向量归一化:在使用余弦相似度时,考虑对向量进行归一化以确保结果一致。
批处理:使用批处理操作进行嵌入生成和数据库操作,以提高吞吐量。
来源: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嵌入的集成,使得能够开发结合大型语言模型语义理解与高效相似性搜索的强大应用。遵循本指南中概述的模式和最佳实践,您可以构建出充分利用这两种技术优势的健壮系统。
有关基于此基础构建的更具体应用,请参阅使用嵌入的问答和使用嵌入的分类和聚类的相关指南。