ユースケース: 人工知能
製品: MongoDB Atlas、MongoDB Atlas Vector Search、MongoDB Atlas Triggers、Voyage AI
パートナー: ObjectBox
ソリューション概要
コネクテッドカーは、即時かつハンズフリーのサポートを期待するドライバーのために、継続的にセンサーデータを生成しています。しかし、駐車場、トンネル、地方の道路などで接続が削除されると、クラウドに依存するアシスタントは、最も重要な瞬間に機能しなくなります。
このソリューションは、ネットワーク停止時でも車内での継続的な支援を保証するために、エッジでAIコパイロットを実行します。オンデバイスのObjectBoxデータベースを使用して、オーナーズマニュアルと並んでライブ車両テレメトリを保存します。その後、アクティブなネットワーク接続を必要としないローカルのLLMエージェントを使用して問い合わせを処理します。再接続されると、ObjectBox 同期サーバーは、このエッジデータをMongoDB Atlasに自動的に同期します。
MongoDB Atlas は一元化されたクラウドレコードシステムとして機能します。マニュアルコンテンツに対してベクトル検索を実行し、時系列コレクション内でテレメトリ履歴を維持し、Atlas Trigger を介して各同期されたスナップショットを完全にクエリ可能なドキュメントに処理します。
参照アーキテクチャ
インターネット接続なしで正確な応答を提供する車載アシスタントをビルドするためのアーキテクチャは、車載エッジ階層とMongoDB Atlasクラウド階層の2つの階層に分裂されています。
図1。MongoDB Atlas への同期のリクエストから Atlas trigger の出力コレクションまでのエンドツーエンドのユーザーフロー
Edge階層アーキテクチャ
車載エッジ階層は、コックピット、バックエンド、ローカルエージェント、ObjectBoxサービスが車両上で直接通信する自己完結型のランタイムを構成します。このスタックにより、アシスタントはMongoDB Atlasなしで知識を検索して操作できるようになり、接続が回復するとローカルデータがMongoDB Atlasと同期されます。エッジ階層は次のコンポーネントを使用します。
Cockpit UI: Next.js でビルドするこのインターフェースには、ライブゲージ、障害コードティッカー、チャットパネル、およびマップが表示され、すべてのブラウザの呼び出すを同一オリジンの API ルートに制限しています。
Python バックエンド: REST エンドポイントとなる接続されたデバイスとサーバーセントイベントを公開し、テレメトリのプロキ処理、音声のテキスト変換とテキストの音声変換、およびエージェントのオーケストレーションを取り扱います。
LangChainエージェント: Ollama経由でローカルLLMと通信し、オンラインおよびオフラインの個別の実行パス用に2つの事前コンパイル済みグラフを管理します。
埋め込みパイプライン: 車両マニュアルは、まず小さなテキストチャンクに分割されます。次に、各チャンクはVoyage AIのvoyage-4-nanoモデルを使用して1,024次元の埋め込みに変換され、結果として得られた埋め込みは対応するチャンクと一緒に保存されます。
ObjectBoxサービス: C++を基盤とする3つの異なる同期クライアントが、ユーザーマニュアルのチャンクとその埋め込み、車両のテレメトリ、対話履歴をローカルに保存します。
ObjectBox HNSW ベクトル検索: ObjectBox は、ローカルに保存された手動の埋め込みの HNSW ベクトル インデックスを維持します。生成されたインデックスにより、車上で直接近似最近傍探索が可能になり、アシスタントはオフライン中でも関連するマニュアルコンテンツを検索し、MongoDB Atlasの接続に依存せずに検索するできます。
テレメトリ ジェネレーター: VSS スナップショットを直接ローカル テレメトリ ストアにキャプチャし、2 秒間隔で保存します。
クラウド階層アーキテクチャ
MongoDB Atlasは、車両のローカルObjectBox保存 (する)の接続されたカウンターパートとして機能します。接続が利用可能な場合、同期された手動チャンクと埋め込み、車両のテレメトリ、および対話履歴を受信し、エッジ階層がオフラインで動作している間、クラウドベースの永続性を提供します。クラウド階層は、次のコンポーネントを使用します。
データレプリケーション: ObjectBox 同期 サーバーはクラウドに接続し、MongoDBコネクタを介してエッジデータ保存 (する)をMongoDB Atlasに直接同期します。同期には、手動チャンク、その埋め込み、テレメトリ、および対話履歴が含まれます。
MongoDB Atlasクラスター: レプリケートされたデータコレクションを保持し、ローカルのObjectBox保存 (する)よりも多くのストレージキャパシティーを提供します。MongoDB Atlasへの同期により、車両のローカルストレージキャパシティーに制限されることなく、より大量の手動コンテンツ、テレメトリ、対話履歴、その他の長期データを保持できるようになります。
Atlas Vector Search: 同期された手動の埋め込みをインデックス化し、接続が利用可能な場合に、マニュアルの全コンテンツに対してクラウド側でのベクトル検索を提供します。
Atlas Triggers: 受信したテレメトリのスナップショットをステータスドキュメントに自動的に変換し、専用の時系列履歴ログを拡張します。
リクエストの実行フロー
エッジ階層とクラウド階層が確立されると、実行フローは、ドライバーのリクエストがコックピットからローカルバックエンドおよびエージェントへとシステム内をどのように移動するかを記述します。クラウド同期は、接続が利用可能なときに行われます。
ドライバーが入力または発話すると、バックエンドはリクエストストリームをエージェントに直接フィードします。エージェントはLangGraphを使用してクエリを評価し、どのツールを呼び出すかを決定します。
車のマニュアルはチャンク化され、MongoDB Voyage AIの1 024次元のvoyage-4 -nanoモデルで埋め込まれています。同じ埋め込み表現がObjectBoxにローカルに保存され、MongoDB Atlasにレプリケートされます。そこで、MongoDB Atlas Vector Search用にインデックスが作成されます。エッジでは、ObjectBoxのHNSWインデックスが、車のマニュアルの埋め込みに対するローカルな近似最近傍探索をサポートしています。クラウドでは、MongoDB Atlas Vector Searchが、同期されたマニュアルコンテンツに対して対応するベクトル検索機能を提供します。
リクエストにマシン情報が含まれている場合、エージェントはどのテレメトリ ツールがドライバーの質問に最も適しているかを判断し、それを呼び出します。リクエストに応じて、選択されたツールは、適切なテレメトリ ストアから現在の自動車状態、関連する VSS シグナル、障害コード、または派生したステータス情報を検索します。選択したツールが DTC を返す場合、エージェントは専用の翻訳ツールを呼び出して、コードとそれに関連するシグナルを影響を受けるシステム、重大度、次のステップに変換するために変換できます。
データモデルアプローチ
document modelは、これらの形状を1つのデータベースに保存します。
構造化テレメトリ
図 2。テレメトリデータモデル
クリックして拡大しますフリーテキストの手動チャンク
図 3.自動車マニュアルのデータモデル
クリックして拡大しますチャット履歴
図 4。チャット会話データモデル
クリックして拡大します時系列テレメトリデータ
車の最終ステータス
図5。テレメトリー ステータス データモデル
クリックして拡大します
各テレメトリスナップショットは1つのドキュメントです。スナップショットには、多くのドメインにわたる約1300個の信号を含む完全なVSS車両ツリーが保持され、ネストされたJSONとして保存する。このモデルでは、これらのドメイン間で固定スキーマは必要ありません。
ObjectBoxは、テレメトリペイロードをstringとして保存します。MongoDBコネクタは、JsonToNative外部型を通じて、それをAtlasのネイティブなネストされたドキュメントに展開します。そのため、クラウドクエリは正確なVSSパスでフィールドを指定します。
コレクション
これらのデータモデルは、検索可能なマニュアル知識、会話履歴、生の車両テレメトリ、現在の車両ステータス、過去のテレメトリという、ソリューションの主要なドメインを構成しています。これらのデータ型を分離することで、効率的な取得が可能になり、リアルタイムの車両状態クエリがサポートされ、会話のコンテキストが保持され、長期的なテレメトリ履歴がMongoDB Atlasでスケーラブルかつクエリ可能になります。このソリューションのコレクションには、以下が含まれます。
manual_chunks: 1024次元のVoyage AI埋め込みを使用した、ベクトル検索用のオーナーズマニュアルのテキストチャンク。conversations: チャット履歴とは、人間とアシスタントの両方の応答、および各アシスタントが質問に答えるために使用するツールを含むものです。objectbox_telemetry: ドキュメントごとの生のスナップショット。エッジから同期されます。telemetry-status: 現在の車両の状態。車両ごとに1つのドキュメントがあり、triggerによって書き込まれます。telemetry-data: MongoDB 時系列コレクション。Atlas trigger はスナップショットごとに1レコードを追加するため、データが増えても履歴クエリは効率的に保たれます。
ソリューションのビルド
実装の詳細については、GithubリポジトリのREADMEを確認してください。次の手順では、アプリケーションの作成方法を説明します。
リポジトリの複製
ダウンロードする プロジェクトを検討し、必要な構成についてはREADMEを確認してください。
図6。ライブ ゲージ、チャット、故障コード ティッカー、オンラインおよびオフライン同期パネルを備えたコックピット UI
キーポイント
エッジを信頼できる情報源にする: デバイス上のObjectBox保存 (する)は、接続がなくても読み取りと書き込み (write)に対応するため、アシスタントは接続環境が悪い場所でも動作します。
クエリが存在する場所でベクトル検索を実行する: MongoDB Voyage AI埋め込みモデル(voyage-4-nano、1024次元)が、エッジでのObjectBoxベクトル検索とクラウドでのAtlas Vector Searchを強化するため、モード間でコンシステントな答えるが得られます。
テレメトリ履歴を時系列として保存: MongoDB Atlas triggerは、各スナップショットをMongoDBの時系列コレクションに書き込み (write)ます。
1つのスナップショットを1つのドキュメントとしてモデル化:柔軟なdocument modelにより、固定されたクロスドメインのスキーマなしでVSS信号を保存できます。
接続が切断されても耐えられるようにサービスを設計する: エッジはオフライン中に書き込み (write)をバッファリングし、再接続時にMongoDB Atlasと同期します。
作成者
Timothy Marland、MongoDB
Dorottya Nyárády, MongoDB