Docs 菜单
Docs 主页
/ /
Atlas 架构中心
/ / /

构建持续更新的检索增强生成 (RAG) 应用程序

使用MongoDB Atlas Stream Processing 和 Vector Search,通过统一接口持续更新、存储和搜索嵌入。

使用案例: Gen AI

行业: 金融医疗保健零售

产品: MongoDB AtlasMongoDB Atlas Vector SearchMongoDB Atlas Stream Processing

合作伙伴: ConfluentAWS

为模型提供最新数据至关重要,这样模型才能在提供通用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脚本,用于分析传入数据以识别相关的结构化元数据,从而丰富文档以进行索引、搜索或分析。

使用 MongoDB 的可扩展矢量更新参考架构
点击放大

图1。使用 MongoDB 的可扩展矢量更新参考架构

在演示解决方案中,数据模型是封装了歌曲所有相关信息的文档集合。MongoDB 的文档数据模型存储各种数据类型及其嵌入,从而可以轻松快速地检索数据。

示例数据有两个数据集可供导入:archive_lyrics_small1archive_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 会指导您完成以下步骤:

1

克隆存储库,设立虚拟环境并安装必要的依赖项。

2

重要

如果您还没有Atlas帐户,请立即加入创建集群。

使用提供的脚本通过mongoimport加载数据。

3

按照 Confluence 文档中的说明创建Kafka集群。

从 Confluent 上的 Cluster Settings标签页复制引导URL ,并使用Kafka REST API创建API密钥以连接到集群。

在 Confluence 的 Topics标签页中创建主题 SpanishInputTopicEnglishInputTopicOutputTopic

4

使用连接注册表中的Confluent 引导URL配置Atlas Stream Processing实例和Kafka集群之间的新连接。

将Atlas Stream Processing实例连接到Atlas 集群。

5

复制用于连接到流处理实例的连接字符串

使用MongoDB Shell (mongosh)配置流处理实例中的管道和连接。

6

执行元数据服务以订阅输入主题,根据事件中收到的信息创建相应语言的标签和嵌入,并将事件写入输出主题。

7

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"
}
]
}
8

使用提供的 query_client.py 脚本,在聊天界面中使用Atlas Vector Search运行语义查询。

  • 保持嵌入的相关性:定期更新数据嵌入,以确保语义搜索保持准确。

  • 优化语言模型配对:确保您的法学硕士课程与数据的语言紧密结合,以提高搜索结果的相关性和精确度。

  • 采用灵活的嵌入:MongoDB灵活数据模型允许您将嵌入直接与数据存储在一起,而无论嵌入的长度或用于生成嵌入的模型如何。

  • 选择合适的相似性函数:语义搜索的有效性取决于所选的相似性函数。请根据您的具体使用案例量身定制选择。

  • 生成异步嵌入:异步创建嵌入,以保持应用程序性能并扩展扩展生成函数。

David Sanchez, MongoDB

  • 使用 LLM 和 RAG 向量搜索进行理赔管理

  • 使用 MongoDB 和 Dataworkz 启动 Agentic RAG 聊天机器人

  • 使用 Fireworks AI 和 MongoDB 优化生成式人工智能应用程序以实现最佳性能

后退

使用 Fireworks AI 优化 RAG 应用程序

在此页面上