你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
矢量数据库
提示
请访问我们的新示例库,获取最新矢量数据库和 RAG 模式应用示例
矢量数据库用于分析和生成式 AI 中的许多领域和情况,包括自然语言处理、视频和图像识别、推荐系统、搜索等。
2023 年,软件的显著趋势是 AI 增强功能集成,集成通常通过将专用独立矢量数据库合并到现有技术堆栈中实现的。 本文介绍了什么是矢量数据库,并提供了一种可能需要的替代体系结构:在 NoSQL 或已使用的关系数据库中使用集成矢量数据库,尤其是在处理多模式数据时。 此方法不仅可降低成本,还能实现更高的数据一致性、可伸缩性和性能。
提示
数据一致性、可伸缩性和性能对于数据密集型应用程序至关重要,这就是为什么 OpenAI 选择在 Azure Cosmos DB 的基础上构建 ChatGPT 服务的原因。 你还可以利用其集成的矢量数据库,以及其单位数毫秒响应时间、自动和即时可伸缩性以及任何规模的保证速度。 请参阅实现示例,然后免费试用。
什么是矢量数据库
矢量数据库是旨在存储和管理矢量嵌入的数据库,矢量嵌入是高维空间中数据的数学表示形式。 在此空间中,每个维度对应于数据的一个特征,数万个维度可用于表示复杂的数据。 矢量在此空间中的位置表示其特征。 字词、短语或整个文档、图像、音频和其他类型的数据都可以矢量化。 这些矢量嵌入用于相似性搜索、多模式搜索、建议引擎、大型语言模型 (LLM) 等。
在矢量数据库中,根据矢量距离或类似性,通过矢量搜索算法对嵌入进行索引编制和查询。 确定最相关的数据需要一个可靠的机制。 一些已知的矢量搜索算法包括分层导航小型世界 (HNSW)、倒置文件(IVF)、DiskANN 等。
集成矢量数据库与纯矢量数据库
NoSQL 或关系数据库中有两种常见的矢量数据库实现类型:纯矢量数据库和集成矢量数据库。
纯矢量数据库旨在高效地存储和管理矢量嵌入,以及少量元数据;它独立于从中派生嵌入的数据源。
集成到高性能 NoSQL 或关系数据库中的矢量数据库提供了其他功能。 NoSQL 或关系数据库中的集成矢量数据库可以存储、索引和查询嵌入以及相应的原始数据。 此方法避免了在单独的纯矢量数据库中复制数据产生的额外成本。 此外,将矢量嵌入和原始数据保存在一起可以更好地促进多模式数据操作,并且可以实现更高的数据一致性、可伸缩性和性能。 具有架构灵活性和集成矢量数据库的高性能数据库尤其适用于 AI 代理。
矢量数据库用例
矢量数据库用于分析和生成式 AI 中的许多领域和情况,包括自然语言处理、视频和图像识别、推荐系统、搜索等。例如,可以使用矢量数据库来执行以下操作:
- 根据内容、主题、情绪和样式识别类似的图像、文档和歌曲
- 根据特征、功能和用户组识别相似产品
- 根据个人偏好推荐内容、产品或服务
- 根据用户组的相似性推荐内容、产品或服务
- 从大型选择池中确定最适合的潜在选项以满足复杂要求
- 识别与主要模式或正常模式不同的数据异常或欺诈活动
- 为 AI 代理实现持久性内存 (PMEM)
提示
除了矢量数据库的这些典型用例外,我们的集成矢量数据库也是生产级 LLM 缓存的理想解决方案,因为它的延迟低、可伸缩性强以及可用性高。
使用矢量数据库来启用利用 LLM 和自定义数据或特定于域的信息的检索扩充生成 (RAG) 尤其受欢迎。 此方法允许:
- 根据 AI 模型给用户的提示生成上下文相关且准确的响应
- 克服 LLM 的令牌限制
- 减少对更新数据进行频繁优化的成本
此过程涉及到从自定义数据源提取相关信息,并通过提示工程将其集成到模型请求中。 在将请求发送到 LLM 之前,用户的输入/查询/请求也会转换为嵌入,并会使用矢量搜索技术在数据库中定位最相似的嵌入。 此技术可识别数据库中最相关的数据记录。 然后,使用提示工程将这些检索到的记录作为输入提供给 LLM 请求。
矢量数据库相关概念
嵌入
嵌入是一种特殊的数据表示格式,机器学习模型和算法可以轻松使用。 嵌入是一段文本的语义含义的信息密集表示。 每个嵌入是浮点数的一个向量,向量空间中两个嵌入之间的距离与原始格式的两个输入之间的语义相似性相关。 例如,如果两个文本相似,则它们的向量表示形式也应该相似。 矢量数据库扩展允许使用原始数据存储嵌入内容,可确保数据一致性、缩放和性能。 [返回]
矢量搜索
借助矢量搜索,可根据数据特征而不是属性字段上的精确匹配项来查找相似的项。 这种方法在搜索相似文本、查找相关图像、提出建议甚至是检测异常等应用中很有用。 它的工作原理是通过使用机器学习模型并使用嵌入 API(例如 Azure OpenAI Embeddings 或 Hugging Face on Azure)获取所创建数据的矢量表示形式(数字列表)。 然后,它会测量数据矢量与查询矢量之间的距离。 最接近查询矢量的数据矢量是在语义上最相似的数据矢量。 使用本机矢量搜索功能,它提供了一种有效的方法来直接存储、索引和搜索高维矢量数据以及其他应用程序数据。 此方法消除了将数据迁移到更昂贵的替代矢量数据库的必要性,并提供 AI 驱动的应用程序的无缝集成。 [返回]
提示和提示工程
提示是指特定文本或信息,这些文本或信息可用作 LLM 的指令,或作为 LLM 进行构建的上下文数据基础。 提示可以采用各种形式,例如问题、语句甚至代码片段。 提示可以用作:
- 指令向 LLM 提供指令
- 主要内容:向 LLM 提供信息以供处理
- 示例:帮助将模型设置为特定任务或进程
- 提示:将 LLM 的输出定向到正确的方向
- 支持内容:表示 LLM 可用于生成输出的补充信息
为方案创建高质量提示的过程称为提示工程。 有关提示和提示工程最佳做法的详细信息,请参阅 Azure OpenAI 服务 提示工程技术。 [返回]
令牌
标记是通过将输入文本拆分为较小的段而生成的小文本块。 这些段可以是单词或字符组,长度从单个字符到整个单词不等。 例如,单词“hamburger”将被分为多个标记(如 ham、bur 和 ger),而短的常用单词 (如 pear ) 将被视为单个标记。 ChatGPT、GPT-3.5 或 GPT-4 等 LLM 会将单词分解为标记进行处理。 [返回]
检索增强生成
检索增强生成 (RAG) 是一种体系结构,它通过添加一个提供基础数据(例如存储在矢量数据库中的数据)的信息检索系统来增强大型语言模型 (LLM)(如 ChatGPT、GPT-3.5 或 GPT-4)的功能。 此方法允许 LLM 基于从矢量化文档、图像、音频、视频等来源的自定义数据生成上下文相关的准确响应。
使用 Azure Cosmos DB for NoSQL 的简单 RAG 模式可以是:
- 注册 Azure Cosmos DB NoSQL 矢量索引预览版
- 使用容器矢量策略和矢量索引设置数据库和容器。
- 将数据插入 Azure Cosmos DB for NoSQL 数据库和容器中
- 通过 Azure OpenAI Embeddings 使用数据属性创建嵌入
- 链接 Azure Cosmos DB for NoSQL。
- 基于嵌入属性创建矢量索引。
- 创建一个函数,以根据用户提示执行矢量相似性搜索
- 使用 Azure OpenAI 完成模型对数据执行问题解答
具有提示工程的 RAG 模式通过向模型提供更多上下文信息来提高响应质量。 RAG 通过将相关的外部源纳入生成过程,使模型能够应用更广泛的知识库,从而获得更全面、更明智的响应。 有关“基础”LLM 的详细信息,请参阅基础 LLM 。 [返回]
下面是使用集成的矢量数据库功能对数据实现 RAG 的多种方法。
如何实现集成的矢量数据库功能
你可以为以下 Azure Cosmos DB API 实现集成的矢量数据库功能:
NoSQL API
Azure Cosmos DB for NoSQL 是世界上首个无服务器 NoSQL 矢量数据库。 将矢量和数据一起存储在具有集成矢量数据库功能的 Azure Cosmos DB for NoSQL 中,可以在其中基于 DiskANN(Microsoft Research 开发的高性能矢量索引算法套件)创建矢量索引。
借助 DiskANN,可以在任何规模上执行高度准确的低延迟查询,同时利用 Azure Cosmos DB for NoSQL 的所有优势,例如 99.999% 的 SLA(在启用 HA 的情况下)、异地复制、完全在一个数据存储中实现从无服务器到预配吞吐量 (RU) 的无缝转换.
链接和示例
- ChatGPT 背后的数据库是什么? - Microsoft Mechanics
- Azure Cosmos DB for NoSQL 中的矢量索引
- VectorDistance 系统函数 NoSQL 查询
- 如何在 Azure Cosmos DB NoSQL 中设置矢量数据库功能
- Python - 笔记本教程
- C# - 使用 AKS 和语义内核构建自己的 Copilot 完整解决方案加速器
- C# - 构建自己的 Copilot 示例应用和动手实验室
- Python - 电影聊天机器人
Azure Cosmos DB for MongoDB
使用 Azure Cosmos DB for MongoDB(vCore 体系结构)中本机集成的矢量数据库,它提供了一种有效的方法来直接存储、编制索引和搜索高维矢量数据,以及其他应用程序数据。 此方法消除了将数据迁移到更昂贵的替代矢量数据库的必要性,并提供 AI 驱动的应用程序的无缝集成。
代码示例
- 使用语义内核在 C# 中为 Azure Cosmos DB for MongoDB 构建自己的 Copilot
- .NET 教程 - 食谱聊天机器人
- C# RAG 模式 - 将 OpenAI 服务与 Cosmos 集成
- Python RAG 模式 - Azure 产品聊天机器人
- Python 笔记本 - 通过 LangChain 进行矢量数据库集成教程
- Python 笔记本 - 通过 LangChain 进行 LLM 缓存集成教程
- Python - LlamaIndex 集成
- Python - 语义内核内存集成
- Python 笔记本 - 电影聊天机器人
API for PostgreSQL
使用 Azure Cosmos DB for PostgreSQL 中本机集成的矢量数据库,它提供了一种有效的方法来直接存储、编制索引和搜索高维矢量数据,以及其他应用程序数据。 此方法消除了将数据迁移到更昂贵的替代矢量数据库的必要性,并提供 AI 驱动的应用程序的无缝集成。
代码示例
- Python:Python 笔记本教程 - 食品评论聊天机器人