使用MongoDB Atlas Stream Processing 和 Vector Search,通过统一接口持续更新、存储和搜索嵌入。
使用案例: Gen AI
产品: MongoDB Atlas、MongoDB Atlas Vector Search、MongoDB Atlas Stream Processing
解决方案概述
为模型提供最新数据至关重要,这样模型才能在提供通用AI方法之外的建议时使用相关上下文。检索增强生成 (RAG) 系统启用组织能够根据其专有数据的真实情况建立大型语言模型 (LLM) 和其他基础模型。然而,维护根本的数据很复杂。为确保模型提供准确的答案,必须不断更新构成 RAG 系统核心的向量嵌入,以表示可用的最新信息。
此外,嵌入模型的选择会影响AI输出的质量,因为不同的模型会针对不同的目的和数据类型进行优化。示例,与跨多种语言训练的通用模型相比,在特定语言上训练的嵌入模型将为该语言创建更符合上下文的嵌入。
通过利用MongoDB Atlas的原生流处理和向量搜索功能,该解决方案允许开发者在单个界面中持续更新、存储和搜索嵌入。
该解决方案与许多行业和使用案例相关,包括:
金融服务:金融文件、法律政策和合同通常使用多种语言,并且根据国家/地区法规而有所不同。为信贷员提供基于AI的界面,使用相关的最新数据来加快发放贷款,可以优化银行工作流程。
医疗保健和保险:帮助更新患者记录或承保保单的 RAG 系统需要访问权限最新信息。
零售:最新的上下文数据对于 RAG 系统选择正确的嵌入模型至关重要,从而为客户提供个性化体验,无论他们使用哪种语言。
参考架构
该解决方案使用以下组件:
MongoDB Atlas集群:能够灵活存储各种数据类型,包括文本、相关元数据以及文档中相应的向量嵌入。Atlas中的向量索引直接支持数据库内的高效语义搜索查询,您可以将其与MongoDB聚合框架一起使用。
Confluent Kafka Cluster:从生产者那里接收文档更新和新文档,并使其可供Atlas Stream Processing进一步处理。
Atlas Stream Processing:订阅MongoDB生成的事件流,筛选相关信息,转换事件,然后将其发送到相应的Kafka主题。它还订阅Kafka集群以进程更新并将更改传播回数据库。
元数据服务:
嵌入生成器:订阅Kafka输入主题的Python脚本。对于收到的每条消息,它都会使用专门的机器学习模型生成一个嵌入。
标签提取器: Python脚本,用于分析传入数据以识别相关的结构化元数据,从而丰富文档以进行索引、搜索或分析。
图1。使用 MongoDB 的可扩展矢量更新参考架构
数据模型方法
在演示解决方案中,数据模型是封装了歌曲所有相关信息的文档集合。MongoDB 的文档数据模型存储各种数据类型及其嵌入,从而可以轻松快速地检索数据。
示例数据有两个数据集可供导入:archive_lyrics_small1
和 archive_lyrics_small2
。这些数据集中的文档具有以下结构:
{ "title": "Hurricane", "artist": "Bob Dylan", "year": 1976, "lyrics": "...", "language": "en", "genre": "rock", "duration": 61, "lyrics_embeddings_en": [...], "tags": ["man", "story", "night"] // only in archive_lyrics_small1 }
在此解决方案中, Atlas Stream Processing使用以下数据字段作为输出主题:
lyrics_embeddings_en
/lyrics_embeddings_es
:特定语言的歌词嵌入向量tags
:仅在archive_lyrics_small1
数据集中,列出歌词中频繁出现的词语
构建解决方案
Github存储库包含复制此解决方案的详细说明,允许您使用MongoDB Atlas以异步方式扩展更新嵌入。
README
会指导您完成以下步骤:
加载数据集
使用提供的脚本通过mongoimport加载数据。
在 Confluence 中配置Kafka集群
按照 Confluence 文档中的说明创建Kafka集群。
从 Confluent 上的 Cluster Settings
标签页复制引导URL ,并使用Kafka REST API创建API密钥以连接到集群。
在 Confluence 的 Topics
标签页中创建主题 SpanishInputTopic
、EnglishInputTopic
和 OutputTopic
。
配置流处理连接注册表
使用连接注册表中的Confluent 引导URL配置Atlas Stream Processing实例和Kafka集群之间的新连接。
将Atlas Stream Processing实例连接到Atlas 集群。
配置Atlas Stream Processing
复制用于连接到流处理实例的连接字符串。
使用MongoDB Shell (mongosh)配置流处理实例中的管道和连接。
创建 Atlas Vector Search 索引
为 lyrics_embeddings_es
创建并配置Atlas Vector Search索引。您必须按如下方式构建搜索索引:
{ "fields": [ { "type": "vector", "path": "lyrics_embeddings_es", "numDimensions": 768, "similarity": "cosine" } ] }
为 lyrics_embeddings_en
创建并配置Atlas Vector Search索引。您必须按如下方式构建搜索索引:
{ "fields": [ { "type": "vector", "path": "lyrics_embeddings_en", "numDimensions": 384, "similarity": "cosine" } ] }
使用向量搜索搜索和分析大型文档
使用提供的 query_client.py 脚本,在聊天界面中使用Atlas Vector Search运行语义查询。
关键要点
保持嵌入的相关性:定期更新数据嵌入,以确保语义搜索保持准确。
优化语言模型配对:确保您的法学硕士课程与数据的语言紧密结合,以提高搜索结果的相关性和精确度。
采用灵活的嵌入:MongoDB灵活数据模型允许您将嵌入直接与数据存储在一起,而无论嵌入的长度或用于生成嵌入的模型如何。
选择合适的相似性函数:语义搜索的有效性取决于所选的相似性函数。请根据您的具体使用案例量身定制选择。
生成异步嵌入:异步创建嵌入,以保持应用程序性能并扩展扩展生成函数。
作者
David Sanchez, MongoDB