MongoDB Atlasとエージェント的AIを使用して将来に対応するオープン ドキュメントのエコシステムを構築し、クレジット移植性のための契約プロセスとデータ共有を強化します。
業種: 金融サービス
製品およびツール: MongoDB Vector Search, MongoDB MCP Server, MongoDB Queryable Encryption
パートナー: LgChuin
ソリューション概要
このソリューションは、オープン データベースエコシステムを提供し、 MongoDB Atlasと エージェントAIを使用して組織間で金融データを安全に共有する方法を示します。
LagGraph でエージェント的AIフレームワークを実装して、同意承認を効率化し、クレジット可能性を向上させる方法について学ぶ。MongoDB Atlas は、これらのオープンドキュメント アーキテクチャを基礎にする運用データレイヤーとして機能します。
参照アーキテクチャ
図の 1。プロセス図
図が示すように、プロセスは、カスタマーがLeafy MongoDB (架空の金融機関)にログインすると開始されます。カスタマーは、外部データ(Third-Party Provider(TPP)データやその他の金融機関データ(このデモではMongoDB Advisor、MongoDB Advisor、neoFinance、Green MongoDB )の外部データにアクセスするための同意を付与または拒否します。
マルチエージェント ワークフローはカスタマーリクエストを受け取り、次のタスクを実行します。
スーパーバイザーエージェント: やり取りを読み取り、各リクエストを適切なスペシャリストにルーティングします。
同意エージェント: 外部行との安全なデータ共有同意を通じてカスタマーをガイドします。組織の選択、同意書の作成、金融機関のログイン、明示的なカスタマーの承認、取り消しを処理します。
移植性エージェント: 外部金融データを分析して、潜在的な節約を示す支払いスコア、クレジット評価、決定的なロギング キャパシティーの提供を生成します。
Leafy Bank エージェント: MCPサーバー経由でMongoDBに直接クエリすることで、カスタマーの Leafy MongoDB アカウント、トランザクション、製品に関するアドホックの質問に答えます。
コア機能
このデモでは、MongoDB Atlasとエージェント的AIが安全でインテリジェントなオープン トランザクション ワークフローを強化する 4 つの主要機能を示します。
同意とエージェントのプライバシーのためのQueryable Encryption
同意レコードをプレーンテキストで保存すると、機密フィールドがデータベース管理者、バックアッププロセス、違反の可能性に対して公開されます。これらのリスクを防ぐために、 オープン ファイルの規則では、作成、承認、データの取得、取り消しなど、すべての同意ライフ サイクルイベントにわたって消費者 ID を保護するよう組織に対して要求しています。また、保管時の暗号化は、システム プロンプトやツール定義などのAIエージェント構成を保護し、プロパティ ロジックの露出を制限します。
MongoDB Queryable Encryption は、機密フィールドをドライバー レベルで暗号化することでこの問題を解決し、サーバーがプレーンテキストを認識しないようにします。フィルターが必要なフィールドは、等価クエリに設定できます。ドライバーはクエリ値を送信する前に暗号化するため、サーバーはプレーンテキストを表示することなく暗号化を照合します。復号化後の読み取りのみを必要とするフィールドは、クエリ サポートなしで暗号化されたままになります。
このデモでは、次の 2 つの場所でQueryable Encryptionを適用します。
暗号化された 4 つのフィールドを持つ同意コレクション( Open Governmentバックエンドの
encrypted_consents)。Consumer.UserNameConsumer.UserIdPermissionsSourceInstitution.InstitutionName
Consumer.UserNameフィールドは等価クエリをサポートしているため、データベースがプレーンテキストでユーザー名を参照することなく、サービスはカスタマーの同意書を一覧表示できます。エージェント プロファイルコレクション( チャットボットバックエンド内の
encrypted_agent_profiles)と 3 つの暗号化されたフィールドを含む。agent_name(等価クエリ可能)system_prompttool_config
エージェント プロンプトは、実行時に暗号化されたMongoDBから読み込まれます。Queryable Encryption は、フィールドごとに個別のデータ暗号化キーを生成します。キー管理プロバイダーとして、 AWS KMS(Key Management Service)、 Azure Key Vault、Google Cloud KMS をサポートしています。次の例は、 Open Governmentバックエンドの暗号化された接続設定を示しています。
from pymongo import MongoClient from pymongo.encryption_options import AutoEncryptionOpts class EncryptedMongoDBConnection(MongoDBConnection): """Subclasses the standard connection — services that type-hint MongoDBConnection accept it without modification.""" def __init__(self, uri: str, auto_encryption_opts: AutoEncryptionOpts): self.uri = uri self.client = MongoClient(self.uri, auto_encryption_opts=auto_encryption_opts)
同意クエリはプレーンテキストと同じように機能します。ドライバーは暗号化と復号化を透過的に取り扱います。
# Standard query on a plaintext field — works as usual consent = consents_collection.find_one({"ConsentId": consent_id}) # Equality query on an encrypted field — same syntax, driver encrypts the filter value consents = list(consents_collection.find({"Consumer.UserName": user_name}))
暗号化された接続は標準の MongoDBConnection を拡張するため、基本クラスを型指定するすべてのサービスは変更せずにそれを受け入れます。
MongoDB Atlas ベクトル検索によるインテリジェントなトランザクション分類
消費者が同意を通じて外部の金融データを共有すると、トランザクション レコードは標準化された販売業者カテゴリなしで到着します。"Nobu Restaurant" や "UBER TRIP" のような生のマーチャント文字列には、カテゴリのメタデータは含まれていません。分類しない場合、費分析とクレジットリングは機能しません。
Atlas ベクトル検索 は、マーチャントの説明を49マーチャントのカテゴリ コード(MMC)の参照コレクションと照合することで、これらのトランザクションをクラス化します。このデモでは、金融テキスト向けに構築された、Vyage AI の voyage-finance-2 埋め込みモデルを使用して、MMC参照データと受信トランザクションの説明の両方に対して 1024 次元ベクトルを生成します。
次の例には、ベクトル検索分類パイプラインが含まれています。
class MCCClassificationService: def __init__(self, connection, db_name, collection_name): self.collection = connection.get_collection(db_name, collection_name) self.vo = voyageai.Client() self.model = "voyage-finance-2" def classify_batch(self, transactions): # Build query text from merchant name + description query_texts = [ self._build_query_text(txn.get("merchant_name", ""), txn.get("description", "")) for txn in transactions ] # Single batch embedding call — input_type="query" for search queries embed_result = self.vo.embed(query_texts, model=self.model, input_type="query") # Vector search each embedding against MCC reference codes for txn, embedding in zip(transactions, embed_result.embeddings): match = self._vector_search(embedding) if match: txn.update({ "MCC": match["MCC"], "CategoryName": match["CategoryName"], "confidence": round(match["score"], 4), }) def _vector_search(self, query_embedding, num_candidates=20, limit=1): pipeline = [ {"$vectorSearch": { "index": "mcc_codes_vector_index", "path": "embedding", "queryVector": query_embedding, "numCandidates": num_candidates, "limit": limit, }}, {"$project": { "MCC": 1, "MCCDescription": 1, "CategoryId": 1, "CategoryName": 1, "score": {"$meta": "vectorSearchScore"}, "_id": 0, }}, ] results = list(self.collection.aggregate(pipeline)) return results[0] if results else None
MCC参照ドキュメントはシードタイムに input_type="document" を使用して埋め込まれますが、トランザクション クエリでは input_type="query" が使用され、検索ワークロード向けには Voyage AI の非対称埋め込みベストプラクティスに従います。
分類は一時的です。結果はエージェントに返されますが、保持されることはありません。外部行のデータは、所有者ではなく、同意によって外部の金融機関に返却されます。移植性エージェントは、分類されたトランザクションを使用して支払いスコアを計算し、ベストプラクティスのベンチマークと比較して、確定的なロギングの移植性を生成します。
MongoDB MCP Server によるエージェント的データアクセス
金融アドバイザーと利用者は、多くの場合、アカウントデータについてアドホックな応答を必要とします。「合計残高は?」、「最近の 10 トランザクションを表示」または「どの製品が対象となりますか?可能なクエリごとにカスタムAPIエンドポイントを構築するのは非効率的です。
MongoDB MCP サーバーは、 MongoDBコレクションを LLM エージェントが直接呼び出せるツールとして公開します。このデモでは、アプリケーションのスタートアップ時に MCPサーバーをサブプロセスとして起動し、 読み取り専用モードで leafy_bankデータベースに接続し、結果として得られるツールを永続的なセッションを通じて LgGraphエージェントに渡します。
次の例は、MCPサーバーの統合を示しています。
from langchain_mcp_adapters.client import MultiServerMCPClient from langchain_mcp_adapters.tools import load_mcp_tools mcp_client = MultiServerMCPClient({ "mongodb": { "command": "npx", "args": ["-y", "mongodb-mcp-server@latest"], "transport": "stdio", "env": { **os.environ, "MDB_MCP_CONNECTION_STRING": LEAFY_BANK_MONGODB_URI, "MDB_MCP_READ_ONLY": "true", "MDB_MCP_DISABLED_TOOLS": disabled_tools, }, } }) # Persistent session keeps MongoDB connection state across tool calls async with mcp_client.session("mongodb") as session: all_mcp_tools = await load_mcp_tools(session) # Pre-connect so the agent never handles connection strings connect_tool = next((t for t in all_mcp_tools if t.name == "connect"), None) if connect_tool: await connect_tool.ainvoke({"connectionString": LEAFY_BANK_MONGODB_URI}) # Only expose read/query tools to the agent allowed_tools = {"find", "aggregate", "count", "list-collections", "collection-schema"} mcp_tools = [t for t in all_mcp_tools if t.name in allowed_tools]
Leafy 金融エージェントは、これらのフィルタリングされたツールと、LungGraph 構成から認証されたカスタマーの識別子を読み取る get_current_user_id ツールを受け取ります。MongoDBクエリを自律的に生成することで、自然言語の質問に答えます。エージェントは次のアクションを実行できます。
find:検索に使用するaggregate: 計算に使用しますCollection-schema: 検出に使用します。
コレクションごとにカスタム ツール コードは必要ありません。
LongGraph を使用したマルチエージェントオーケストレーション
オープン 金融ワークフローは、契約マネジメント、財務分析、内部金融データ クエリなどの異なるドメインにまたがります。3 つすべてを取り扱う単一の単調エージェントは、大規模なツールセットと競合する懸念事項をカバーするシステムプロンプトが必要になります。専用エージェントに分割すると、各ツールセットは小さく、各プロンプトに集中します。
監視エージェントは3 つのスペシャリストをオーケストレーションします。
同意エージェント: データ共有フローを管理
移植性エージェント: 金融機関の外部データを分析する
リージョン ステートメント エージェント: MCPサーバーを通じてリージョン 金融データをクエリします。
LongGraph は意向に基づいて各カスタマーメッセージを適切なスペシャリストにルーティングし、 MongoDB Atlas はチェックポイントコレクションを通じて対話状態を永続化します。
次の例は、構造化出力を持つ監視ルーティングの例です。
from langgraph.graph import StateGraph, START, END class RouterDecision(BaseModel): next: Literal["consent_agent", "portability_agent", "internal_data_agent", "FINISH"] response: str = "" workflow = StateGraph(AgentState) workflow.add_node("supervisor", supervisor) workflow.add_node("consent_agent", consent_agent) workflow.add_node("portability_agent", portability_agent) workflow.add_node("internal_data_agent", internal_data_agent) workflow.add_edge(START, "supervisor") workflow.add_conditional_edges("supervisor", route_from_supervisor, { "consent_agent": "consent_agent", "portability_agent": "portability_agent", "internal_data_agent": "internal_data_agent", "FINISH": END, }) workflow.add_edge("consent_agent", "supervisor") workflow.add_edge("portability_agent", "supervisor") workflow.add_edge("internal_data_agent", "supervisor") graph = workflow.compile(checkpointer=MongoDBSaver(client=db.client, db_name=DATABASE_NAME))
規制されたワークフロー(同意の承認、KYCの検討、支払いの承認)では、エージェントが続行する前に一時停止して決定を待つ必要があるヒューマンチェックポイントが必要です。LgGraph の interrupt() メカニズムは、完全なグラフ状態をMongoDBに直列化し、ペイロードを呼び出し元に返すことで、この要件を取り扱います。外部プロセスが完了すると、ワークフローは再開されます。
from langgraph.types import interrupt, Command # Agent pauses, returns review payload to the calling application review = interrupt({ "type": "APPROVAL_REQUIRED", "details": approval_details, }) # Application resumes the workflow after the human decision await agent.ainvoke(Command(resume=decision), config)
MongoDB Atlasチェックポイントコレクションは、完全な交信状態を保持します。
メッセージ履歴
有効な同意書
ルーティングの決定
ワークフローは、過去 秒(ボタンをクリック)または 時間(オーバーナイトのコンプライアンス検討)の中断に耐えられます。各サブエージェントは、最終応答を生成するまで ReAct ループ(理由 → 実行 → 監視)を実行し、その後、次のルーティング決定のためにスーパー秒エージェントに制御を返します。
データモデルアプローチ
このデモでは、2 つのMongoDB Atlasデータベースを使用します。
leafy_bank:カスタマーアカウント、トランザクション履歴、金融商品、移植性を高めるための引数ルールなどの組織独自のデータを保存します。また、移植性エージェントが分類に使用する MCC コード参照と支払いベンチマークも保持します。open_finance:提携するアカウント、クレジット、トランザクション、支払い履歴など、同意を通じて取得したデータを保存します。暗号化されたコレクションのここに存在する自分自身に同意します。別の組織コレクションには、利用可能な外部行が登録されています。
以下は、 コレクション内のドキュメントの例です。
accounts(leafy_ transaction):{ "_id": { "$oid": "675488b874a6710be0583b3e" }, "AccountNumber": "514624177", "AccountBank": "LeafyBank", "AccountStatus": "Active", "AccountIdentificationType": "AccountNumber", "AccountDate": { "OpeningDate": { "$date": "2024-12-07T17:41:12.710Z" } }, "AccountType": "Savings", "AccountBalance": 3910, "AccountCurrency": "USD", "AccountDescription": "Savings account for fridaklo", "AccountUser": { "UserName": "fridaklo", "UserId": { "$oid": "65a546ae4a8f64e8f88fb89e" } } } encrypted_consents(open_finance){ "_id": { "$oid": "69b444e3090356f30066927f" }, "ConsentId": "urn:greenbank:Cf5b9ff59e06f77", "Status": "CONSUMED", "Consumer": { "UserName": <encrypted data>, "UserId": <encrypted data> }, "Permissions": <encrypted data>, "Purpose": "PERSONAL_LOAN_PORTABILITY", "SourceInstitution": { "InstitutionName": <encrypted data>, "InstitutionId": "679a1001a9711d00a3bb01a1" }, "CreationDateTime": { "$date": "2026-02-05T10:55:30.061Z" }, "ExpirationDateTime": { "$date": "2026-08-04T10:55:30.061Z" }, "StatusUpdateDateTime": { "$date": "2026-02-05T11:13:52.900Z" }, "StatusHistory": [ { "Status": "AWAITING_AUTHORISATION", "DateTime": { "$date": "2026-02-05T10:55:30.061Z" }, "Reason": "Consent created" }, { "Status": "AUTHORISED", "DateTime": { "$date": "2026-02-05T10:56:06.100Z" }, "Reason": "Status changed to AUTHORISED" }, { "Status": "CONSUMED", "DateTime": { "$date": "2026-02-05T11:13:52.900Z" }, "Reason": "Data retrieved successfully" } ], "__safeContent__": [ { "$binary": { "base64": "36UjEj4mfh1fKHren43cLiOy6HVs4/b/g+e6viTwQ9Q=", "subType": "00" } } ] }
次のセクションでは GitHub リポジトリにアクセスして、ソリューション内のすべてのコレクションからサンプルデータを調べます。
ソリューションのビルド
このソリューションをビルドするには、2 つの連携するサービスを実装します。
完全な実装については、対応する GitHub リポジトリの手順に従ってください。
1一部の: オープン ファイナンス バックエンド (Github リポジトリ)
オープン 金融 API の公開
次のタスク用にセキュア エンドポイントを実装および検証します。
同意の管理:カスタマーの同意を作成、承認、取り消し、一覧表示します。
外部カスタマーデータの検索: 同意スコープでフィルターされたアカウント、クレジット、支払い履歴、ID、トランザクションを検索します。
データを計算する:集計パイプラインを使用して、残高、支払額、返金額の値を計算する。
Atlas ベクトル検索を使用してトランザクションと MCC カテゴリを分類します。
README に記載されているように、インデックス、TTL ポリシー、一意の制約を構成して、同意期限、パフォーマンス、データの整合性をサポートします。
一部の 2: エージェント チャットボットバックエンド (GitHubリポジトリ)
監視エージェントと子エージェントの構成
カスタマーメッセージを正しいエージェントにルーティングするように、 マネージャー パターンを実装する。次のタスクを実行するように 3 つのエージェントを構成します。
同意エージェント: 組織を一覧表示して同意を作成し、外部行のログインをトリガーして、データ共有を承認または取り消します。
移植性エージェントは、支出分析、クレジットの移植性の評価、集約された金銭的位置の計算用に オープン ファイナンス と リージョン ベースの API を呼び出します。
Leafy MongoDB Agent: MCPサーバーを通じてMongoDBにクエリを実行して、カスタマーの Leafy MongoDB データに関するアドホックの質問に答えます。エージェントは、セッション設定から認証されたカスタマーの ID を解決し、アカウント、内部トランザクション、ユーザー、製品、クレジット機関のスコア、支払いに関するベストプラクティスの 6 つの読み取り専用コレクションをクエリします。
リポジトリで定義されているすべてのツールを登録して、各エージェントが対応するバックエンドエンドポイントを呼び出せるようにします。
両方のサービスをエンドツーエンドで接続
チャットボットバックエンドを実行中のOpenFundamentalsバックエンドURLに差し向けます。README ファイルから参照シナリオを実行します。
外部金融ビルドと Leafy MongoDB のポート番号ものを比較してください。
MCC ベースの分類と Atlas ベクトル検索 を使用して、支払いスコアを生成します。
MongoDB Atlasを検証します。
運用データを保持します
集計とベクトルワークロードを強化
完全なエージェントへの同意とアドバイスをサポートします
段階的な設定コマンド、環境変数、およびAPI の詳細については、各リポジトリの READMEファイルの指示に従ってください。
キーポイント
MongoDB Atlasでオープンな金融データを統合 : MongoDB Atlasの内部データセットと外部データセットを運用データレイヤーとして統合し、統合の複雑さと重複を削減します。
集計パイプラインによる分析を簡素化: MongoDB集計パイプラインを使用して、単一のクエリパスで内部アカウントと外部アカウント全体の残高、支払額、移植性の節約、費やスコアを計算します。
MongoDB Queryable Encryption で機密性の高い同意データを保護します : 同意属性にQueryable Encryption を適用することで、規制された Open Government ワークロードの強力なプライバシー制御を維持しつつ機密性の高いフィールドにクエリを実行できます。
エージェント的なAIによる同意プロセスの効率化 : LingGraph ベースのマルチエージェント チャットボットを統合して、同意の範囲、期間、目的を 自然言語で説明することで、マルチバック フロー全体での放棄を減らし、カスタマーエクスペリエンスを向上させます。
ISO 20022 のベストプラクティスでデータ構造を整合させます。ISO 20022 のフィールドとコードを使用して外部トランザクションをモデル化することで、深くネストされたスキーマを過剰に処理することなく組織間でデータを標準化できます。
作成者
Saul Calderon
Kiran Tulsulkar
Ainhoa Múgica
Andrea Alaman Calderon
ディプロイ ジャーナル