3使用多模态AI、混合搜索以及由...提供支持支持并由MongoDB提供支持的会话代理,分析从自动驾驶传感器输出中提取的非标准事件。
行业: 制造与运动
产品: MongoDB Atlas、 MongoDB Search、 MongoDB Vector Search、 MongoDB Voyage AI、
合作伙伴: Amazon Bedrock
解决方案概述
自动驾驶系统会生成大量传感器数据:高分辨率图像、LiDAR 扫描、雷达帧和遥测日志。在海量的信息中,最有价值的数据点往往是最稀有的:不寻常或意外的驾驶场景,称为边缘情况或角落情况。这些数据点包括道路上的动物、被淹没的十字路口、异常建筑区域以及自主系统在标准验证和道路测试中很少遇到的其他情况。
手动查找这些罕见场景既缓慢又昂贵。数据科学家经常花费大量时间编写自定义筛选器和脚本来定位特定事件。手动搜索方法速度很慢,而且每年只能解决少数边缘案例,而团队需要将这个数字扩展到数千个。
多模式事件浏览器演示了解决这一挑战的一种方法,将MongoDB Atlas Search 与 Voyage AI嵌入和对话式AI代理相结合。该解决方案使团队能够:
使用自然语言描述搜索驾驶事件。
按环境条件(例如天气、季节和时间段)进行过滤。
与基于 ReAct 的AI代理进行交互,该助手对数据库进行实时推理。
该解决方案使工程师和数据科学家能够在几秒钟(而不是数周)内发现车队扩展的罕见驾驶场景,从而加快模型培训周期并提高自动驾驶系统的安全性和可靠性。
参考架构
该解决方案采用分层架构,明确区分 Web应用程序、后端服务和应用程序数据平台。
图 1。多模式事件浏览器的高级架构
网络应用程序
前端使用 Next.js 构建,并使用 LeafyGreen用户界面组件提供MongoDB品牌体验。它提供以下主要交互界面:
带有元数据过滤下拉列表的搜索栏。
结果网格显示匹配的驾驶事件图像。
用于通过AI代理进行对话查询的聊天面板。
后端服务
基于 FastAPI 的Python后端会协调核心逻辑。它公开:
结合了向量搜索和全文搜索的混合搜索API 。
一个 Reranker API ,它应用 Voyage AI重新排名来优化结果。
一个 ReAct代理,它将 AWS Bedrock (Claude) 与工具发现注册表结合使用,对数据库进行推理。
数据平台: MongoDB Atlas
所有数据都驻留在单个MongoDB Atlas集合中。每个文档包含:
事件图像(或 S3 中对事件图像的引用)。
文本描述。
环境元元数据字段,例如季节、天气、一天中的时间和稀有度分数,
由 Voyage AI 的 voyage-multimodal-3 模型生成的 1024 维向量嵌入。
MongoDB Atlas提供向量搜索索引(带标量量化)、全文搜索索引和聚合管道,所有这些都通过统一的API进行查询。
Voyage AI提供用于生成图像、元数据和查询的向量表示的嵌入模型 (voyage-multimodal-3),以及用于提高结果相关性的重排序模型 (rerank-2)。
外部服务
AWS 基岩托管 Claude 模型,为该解决方案的会话式AI代理提供支持。用户可以通过界面右下角的聊天面板访问权限代理。
图 2。解决方案用户界面
该代理会推理用户的问题,决定调用哪个工具,针对实时MongoDB 数据库执行该工具,观察结果,然后重复该进程,直到可以提供最终响应。
该代理使用以下工具:
search_events:针对MongoDB集合执行混合向量和文本搜索。get_stats:使用$facet聚合返回整个集合的天气、季节、时间分布和稀有度统计信息。compare_scenarios:执行并排返回的两个并行搜索。该代理会将其执行跟踪实时流式传输到用户界面,因此每次工具调用和结果在发生时都是可见的。
compare_scenarios 演示了人机交互 (HITL)模式。当 Claude 决定调用它时,后端会暂停流,并在工具执行之前向用户界面发送批准提示。用户必须单击“批准”或“拒绝”。如果在 60 秒内未收到响应,将自动跳过该工具。
注意:要触发此流程,用户可以打开聊天面板,单击标有“人机参与循环演示”的建议问题,或键入要求代理比较两种驾驶场景的任何问题,例如“比较有雾与晴天的驾驶场景” ”。
数据模型方法
该解决方案将所有事件数据存储在单个MongoDB集合中,利用灵活的文档模型来共同定位多模态信息(这些信息通常需要在关系系统中的多个表之间进行代价高昂的联接),从而随着事件复杂性的增长,查询速度更快,数据模型更简单。以下代码段说明了实践中的文档模型:
{ "event_id": "e_00601", "domain": "adas", "source_dataset": "autonomous-driving-dataset", "image_path": "adas/e_00601.jpg", "image_url": null, "image_embedding": [0.0412, -0.0183, 0.0097, "... 1021 more values ..."], "text_description": "A foggy night scene on a rural road with low visibility and no other vehicles in sight.", "metadata": { "season": "fall", "time_of_day": "night", "weather": "foggy", "environment": "rural", "rarity_score": 0.847, "source_index": 601 }, "embedding_metadata": { "model": "voyage-multimodal-3.5", "dimensions": 1024, "original_bytes": 4096, "quantized_bytes": 1024 }, "created_at": "2025-03-15T09:42:11.000Z", "updated_at": null }
文档结构
每个事件文档都包含以下关键字段:
event_id:事件的唯一标识符,与磁盘或 S3 中的图像文件名匹配。domain:事件的类别(例如,“adas”代表自动驾驶)。source_dataset:原始数据集。image_path:本地文件系统中图像的相对路径。image_url:图像迁移到云存储后的 S3 或 CloudFront URL ;在本地开发中为 null。image_embedding:由 Voyage AI生成的 1024 维浮点32向量(voyage-multimodal-3 或 3.5)。text_description:场景的自然语言描述,用于全文Atlas Search。metadata:嵌套对象,其中包含:season:春季、夏季、秋季或冬季。time_of_day:黎明、白天、黄昏或夜间。weather:晴、多云、多雨或有雾。environment:驾驶环境(例如乡村)。rarity_score:0–1 表示该情况的不常见程度。
embedding_metadata:跟踪原始 float32 和量化 int8 表示形式的嵌入模型名称、向量维度和字节大小。created_at:引入文档时的 UTC 时间戳。
为什么这种模式有效
通过将图像引用、文本描述、元数据和向量嵌入共同定位在单个文档中,该解决方案消除了连接。混合搜索查询可以同时匹配向量嵌入和文本描述,对元数据字段(season、weather、time_of_day)应用预过滤器,并在单次往返中返回完整结果。
$facet聚合事件AI代理通过集合管道执行,无需多次查询。
带标量量化的向量索引
向量搜索索引在索引层应用标量量化,将每个向量的 1024 维浮点32嵌入从 4,096 字节压缩到 1,024 字节(int8 )。与全保真搜索相比,此索引策略可将内存向量有效负载减少 75% 并保留约 90% 的召回率。包括 domain、metadata.season、metadata.time_of_day 和 metadata.weather 在内的过滤字段直接在同一索引定义中声明。此设置允许在将任何结果返回到应用程序之前在 $vectorSearch 内进行元数据预过滤。
构建解决方案
包含详细自述文件的完整源代码可在行业解决方案公共Github存储库 中找到。要部署该解决方案,请按以下步骤操作。
先决条件
Python 3.13
Node.js 18 或更高版本(推荐使用 LTS)
用于Python依赖项管理的uv
MongoDB Atlas 集群
Voyage AI API密钥
具有基岩访问权限的 AWS凭证
摄取数据集
该解决方案使用 HugingFace 上的 MIST 自动驾驶数据集 ( jongwonryu/MIST-autonomous-guidance-dataset ),但您可以按照 README 中的设置说明替换自己的数据集。摄取管道执行以下进程:
从 HugingFace 流式传输图像。
应用分集门控,确保均衡覆盖各种天气、季节和时间组合。
通过 Voyage AI生成多模态嵌入 (voyage-multimodal-3)。
将带有 Vector Search 和Atlas Search索引的文档插入MongoDB。
从后端/目录运行管道:
uv run python services/ingestion_pipeline.py --sample-size 1000
此命令会在 15–30 分钟内流式传输约 1–2 GB并处理约 1,000 个不同的图像。如果省略该标志,默认示例大小为 500。
配置前端
将前端环境示例复制到前端/.env.local,使用npm install 安装节点依赖项,并使用npm 运行 dev 启动开发服务器。可通过 http://localhost:3000 访问前端。
cp frontend/EXAMPLE.env frontend/.env.local cd frontend && npm install && npm run dev
关键要点
通过混合搜索加速边缘案例发现:通过 MongoDB 的
$rankFusion将向量搜索和全文搜索相结合,团队可以使用自然语言查询找到罕见的驾驶场景。这种方法还匹配纯语义搜索可能遗漏的特定技术术语、故障代码或传感器 ID。通过标量量化降低基础架构成本: MongoDB Atlas Vector Search 将1024 维浮点32 向量压缩为整型8 ,从而在保持召回率的同时节省内存。对于具有数百万嵌入的数据集,这种压缩直接意味着较低的硬件要求。
使用文档模型简化多模式数据管理:在单个MongoDB文档中存储图像、嵌入、文本描述和元数据,消除了为操作数据、搜索引擎和向量存储维护单独数据库的同步开销。
为数据科学家提供会话访问权限:由 AWS Bedrock 支持的基于 ReAct 的AI代理支持与队列数据进行自然语言交互。团队可以提出“比较雾天与晴天驾驶场景”等问题,并接收带有工具执行跟踪的结构化分析,而无需编写自定义聚合查询。
通过 Voyage AI重排名提高检索质量:在混合搜索后添加重排名步骤可显着提高结果精度。 Voyage AI 的 rerank-2 模型根据原始查询对候选结果重新评分,将上下文最相关的结果推到顶部。
作者
Humza Akhtar,MongoDB