MongoDB Atlas とエージェント型 AI を使用して将来を見据えたオープンバンキングエコシステムを構築し、同意取得ジャーニーとデータ共有を強化します。
業種: 金融サービス
製品およびツール: MongoDB Vector Search, MongoDB MCP Server, MongoDB Queryable Encryption
パートナー: LgChuin
ソリューション概要
このソリューションはオープンバンキングのエコシステムを提示し、MongoDB Atlas とエージェント型 AI を使用して機関間で金融データを安全に共有する方法を実証します。
LangGraph でエージェント型 AI フレームワークを実装し、同意承認を合理化してカスタマーに統合されたマルチバンクの財務ビューを提供する方法をご覧ください。MongoDB Atlas は、これらのオープンバンキングアーキテクチャを支える BIAN 標準のデータレイヤーとして機能します。
参照アーキテクチャ
図 1. オープンバンキングの参照アーキテクチャ
図が示すように、プロセスは、カスタマーがLeafy MongoDB (架空の金融機関)にログインすると開始されます。カスタマーは、外部データ(Third-Party Provider(TPP)データやその他の金融機関データ(このデモではMongoDB Advisor、MongoDB Advisor、neoFinance、Green MongoDB )の外部データにアクセスするための同意を付与または拒否します。
マルチエージェント ワークフローはカスタマーリクエストを受け取り、次のタスクを実行します。
スーパーバイザーエージェント: やり取りを読み取り、各リクエストを適切なスペシャリストにルーティングします。
同意エージェント: 外部行との安全なデータ共有同意を通じてカスタマーをガイドします。組織の選択、同意書の作成、金融機関のログイン、明示的なカスタマーの承認、取り消しを処理します。
金融アドバイスエージェント:MCP サーバーを通じて直接 MongoDB にクエリを実行し、カスタマーの口座、取引、製品に関する単発の質問に答え、内外の銀行全体の支出を分析します。
コア機能
このデモでは、 MongoDB Atlasとエージェント型 AI が、安全でインテリジェントなオープンバンキングのワークフローを強化する次の機能を示します。
同意とエージェントのプライバシーのためのQueryable Encryption
同意レコードをプレーンテキストで保存すると、機密フィールドがデータベース管理者、バックアッププロセス、潜在的な侵害にさらされます。これらのリスクを防ぐために、オープンバンキング規制では、機関はすべての同意ライフサイクルイベント(作成、承認、データ取得、取り消し)で消費者の ID を保護することが義務付けられています。保管時の暗号化は、システムプロンプトやツール定義などの AI エージェントの構成も保護し、専有ロジックの露出を制限します。
MongoDB Queryable Encryption は、機密フィールドをドライバー レベルで暗号化することでこの問題を解決し、サーバーがプレーンテキストを認識しないようにします。フィルターが必要なフィールドは、等価クエリに設定できます。ドライバーはクエリ値を送信する前に暗号化するため、サーバーはプレーンテキストを表示することなく暗号化を照合します。復号化後の読み取りのみを必要とするフィールドは、クエリ サポートなしで暗号化されたままになります。
このデモでは、次の 2 つの場所でQueryable Encryptionを適用します。
同意コレクション(
leafy_bank_bianデータベースのopenbankingConsents、オープンバンキングバックエンドが管理)には、暗号化されたフィールドが4つあります。Consumer.UserNameConsumer.UserIdPermissionsSourceInstitution.InstitutionName
Consumer.UserNameフィールドは等価クエリをサポートしているため、データベースがプレーンテキストでユーザー名を参照することなく、サービスはカスタマーの同意書を一覧表示できます。エージェントプロファイルコレクション(チャットボットバックエンドの
openbankingAgentProfiles)には、暗号化されたフィールドが3つあります。agent_name(等価クエリ可能)system_prompttool_config
エージェントのプロンプトは、実行時に暗号化された MongoDB から読み込まれます。Queryable Encryption は、各フィールドに対して個別のデータ暗号化キーを生成します。キーマネジメントプロバイダーとして、AWS Key Management Service(KMS)、Azure Key Vault、 Google Cloud KMS をサポートしています。
次の例では、オープンバンキングバックエンドの暗号化された接続設定を示しています。
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 MCP Server によるエージェント的データアクセス
金融アドバイザーと利用者は、多くの場合、アカウントデータについてアドホックな応答を必要とします。「合計残高は?」、「最近の 10 トランザクションを表示」または「どの製品が対象となりますか?可能なクエリごとにカスタムAPIエンドポイントを構築するのは非効率的です。
MongoDB MCP サーバーは、 MongoDBコレクションを LLM エージェントが直接呼び出せるツールとして公開します。このデモでは、アプリケーションのスタートアップ時に MCPサーバーをサブプロセスとして起動し、 読み取り専用モードで leafy_bank_bianデータベースに接続し、結果として得られるツールを永続的なセッションを通じて 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つすべてを処理する単一のモノリシックエージェントには、大規模なツールセットと、相反する懸念を網羅するシステムプロンプトが必要になります。専門のエージェントに分割することで、各ツールセットを小さく保ち、各プロンプトを集中させることができます。
スーパーバイザーエージェントは、以下の専門家を調整します。
同意エージェント:データ共有フローを管理します。
金融アドバイスエージェント:支出を分析し、MCP サーバーを介して Leafy Bank データをクエリします。
LongGraph は意向に基づいて各カスタマーメッセージを適切なスペシャリストにルーティングし、 MongoDB Atlas はチェックポイントコレクションを通じて対話状態を永続化します。
次の例は、構造化出力を持つ監視ルーティングの例です。
from langgraph.graph import StateGraph, START, END from langgraph.checkpoint.mongodb import MongoDBSaver # Each specialist is built from a factory that loads its system prompt # from a Queryable-Encryption-backed MongoDB collection at startup. consent_agent = create_consent_agent(prompts["consent_agent"]) financial_advice_agent = create_financial_advice_agent( prompts["financial_advice_agent"], mcp_tools ) supervisor = create_supervisor_node(prompts["supervisor"]) def route_from_supervisor(state: AgentState) -> str: # The supervisor writes its routing decision to state["next"] return state.get("next", "FINISH") workflow = StateGraph(AgentState) workflow.add_node("supervisor", supervisor) workflow.add_node("consent_agent", consent_agent) workflow.add_node("financial_advice_agent", financial_advice_agent) workflow.add_edge(START, "supervisor") workflow.add_conditional_edges("supervisor", route_from_supervisor, { "consent_agent": "consent_agent", "financial_advice_agent": "financial_advice_agent", "FINISH": END, }) workflow.add_edge("consent_agent", "supervisor") workflow.add_edge("financial_advice_agent", "supervisor") checkpointer = MongoDBSaver( client=db.client, db_name=DATABASE_NAME, checkpoint_collection_name=CHECKPOINTS_AIO_COLLECTION, writes_collection_name=CHECKPOINTS_WRITES_AIO_COLLECTION, ) graph = workflow.compile(checkpointer=checkpointer)
規制されたワークフロー(同意の承認、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_bian:このデータベースには、デモの実行基盤となる、カスタマー(PartyReferenceDataDirectory)、アカウント(CurrentAccount)、トランザクション、製品などの共有された BIAN 標準の運用モデルが含まれています。このデータベースは、Queryable-Encrypted のopenbankingConsentsコレクションの同意レコードと、承認された同意に基づいて取得された外部データを保存するcachedExternalDataコレクションも保持します。open_finance:このデータベースには、外部機関のソースデータ—external_accountsと提携機関のexternal_productsに加えて機関登録簿が含まれています。
Leafy Bank は leafy_bank_bian データを所有し、書き込み (write) を行います。外部データは同意を得て借用され、所有されません。データは承認された同意に基づいて open_finance から読み取られ、付与された ConsentId でタグを付けた状態で cachedExternalData にキャッシュされ、同意が取り消されるか期限切れになると消去されます。これが機関自身の口座やトランザクションのレコードに統合されることはありません。
以下は、 コレクション内のドキュメントの例です。
accounts(leafy_bank_bianから):{ "accountId": "ACC-e0583b3b", "accountBank": "Leafy Bank", "accountNumber": "212100310", "currency": "USD", "balance": { "current": 315, "available": 315, "ledger": 315, "hold": 0, "overdraftLimit": 0 }, "customerSnapshot": { "customerId": "CUST-00528224" }, "gl": { "accountCode": "2121", "costCenter": "CC-RETAIL-DEFAULT" }, "productId": "PROD-STD-SA-USD", "openedAt": "2024-12-07" } openbankingConsents(leafy_bank_bianから)、機密フィールドに Queryable Encryption を適用した同意レコード:{ "ConsentId": "urn:greenbank:Cf5b9ff59e06f77", "Status": "AUTHORISED", "Consumer": { "UserName": "< encrypted >", "UserId": "< encrypted >" }, "Permissions": "< encrypted >", "Purpose": "FINANCIAL_ADVICE", "SourceInstitution": { "InstitutionName": "< encrypted >", "InstitutionId": "679a1001a9711d00a3bb01a1" }, "CreationDateTime": "2026-02-05T10:55:30Z", "ExpirationDateTime": "2026-08-04T10:55:30Z", "StatusHistory": [ { "Status": "AWAITING_AUTHORISATION", "DateTime": "2026-02-05T10:55:30Z" }, { "Status": "AUTHORISED", "DateTime": "2026-02-05T10:56:06Z" } ] }
外部トランザクションは Leafy Bank 自体のトランザクションと同じ BIAN 標準スキーマを使用します。口座名義人は送信トランザクションでは支払人、受信トランザクションでは受取人として表示されるため、さまざまな機関からのデータがコンシステントな形式になります。
次のセクションでは GitHub リポジトリにアクセスして、ソリューション内のすべてのコレクションからサンプルデータを調べます。
ソリューションのビルド
このソリューションをビルドするには、オープンバンキングバックエンド、エージェント型チャットボット バックエンド、統合 UI という、連携するサービスを実装します。
完全な実装については、対応する GitHub リポジトリの手順に従ってください。
パート 1:オープンバンキングのバックエンド(GitHub リポジトリ)
オープンバンキング APIを公開する
次のタスク用にセキュア エンドポイントを実装および検証します。
同意を管理:カスタマーの同意を作成、承認、取り消し、一覧表示します。
外部カスタマーデータを取得:同意範囲で絞り込まれたアカウント、ローン、返済履歴、識別情報、トランザクションを検索します。
外部データをキャッシュ:アドバイスエージェントがライブで再取得しないように、承認された同意の下で取得されたデータを保存します。
データを計算:集計パイプラインを使用して、残高、負債合計、ローン移行オファーを決定します。
README の記述どおりにインデックスと同意期限の処理(バックグラウンド スイーパー)を設定します。
一部の 2: エージェント チャットボットバックエンド (GitHubリポジトリ)
スーパーバイザーと子エージェントを設定します。
カスタマーからのメッセージが適切なエージェントにルーティングされるように、スーパーバイザーのパターンを実装します。以下のタスクを実行する2つのエージェントを構成します。
同意エージェント:機関を一覧表示し、同意を作成し、外部銀行ログインをトリガーし、データ共有を承認または取り消します。LangGraph
interrupt()を使用して、銀行ログインおよび明示的な同意承認のために一時停止します。金融アドバイスエージェント:カスタマーの口座、トランザクション、製品に関する単発の質問に答え、内部銀行と外部銀行全体の支出を分析します。読み取り専用の MCP サーバーを介して MongoDB を直接クエリします。
パート 3:統合 UI(GitHubリポジトリ)
段階的な設定コマンド、環境変数、APIの詳細については、前述の各リポジトリの README ファイルの指示に従います。
キーポイント
MongoDB Atlas のオープンバンキングデータを統合:MongoDB Atlas の内部データセットと外部データセットを運用データ層として統合し、統合の複雑さと重複を削減します。
集計パイプラインで分析を簡素化:MongoDB の集計パイプラインを使用して、単一のクエリパスで内部アカウントと外部アカウント全体の残高、負債合計、支出スコアを計算します。
MongoDB Queryable Encryption で機密の同意データを保護:Queryable Encryption を同意属性に適用して、機密フィールドのクエリを実行するとともに、規制されたオープンバンキングのワークロードに対して強力なプライバシー制御を維持します。
エージェント的なAIによる同意プロセスの効率化 : LingGraph ベースのマルチエージェント チャットボットを統合して、同意の範囲、期間、目的を 自然言語で説明することで、マルチバック フロー全体での放棄を減らし、カスタマーエクスペリエンスを向上させます。
BIAN 標準モデルでデータを標準化:すべての機関からのデータがコンシステントな形式になるように、内部アカウントと外部のアカウント、トランザクション、同意を BIAN サービスドメイン標準でモデル化します。
作成者
Saul Calderon
Kiran Tulsulkar
Ainhoa Múgica
Andrea Alaman Calderon