Crea ecosistemas de banca abierta preparados para el futuro mediante MongoDB Atlas y la IA agéntica para impulsar los procesos de consentimiento y el uso compartido de datos.
caso de uso: Inteligencia artificial, Visión única, Personalización
Industrias: Servicios financieros
Productos y herramientas: MongoDB Vector Search, Servidor MCP de MongoDB, MongoDB Queryable Encryption
emparejar: LangChain
Descripción general de la solución
Esta solución presenta un ecosistema de banca abierta y demuestra cómo compartir datos financieros de forma segura entre instituciones mediante el uso de MongoDB Atlas y la IA agéntica.
Aprende a implementar un framework de IA agéntico con LangGraph para agilizar la aprobación del consentimiento y brindar a los clientes una visión consolidada y multibancaria de sus finanzas. MongoDB Atlas sirve como la capa de datos alineada con BIAN que sustenta estas arquitecturas de banca abierta.
Arquitecturas de Referencia
Figura 1. Arquitectura de referencia de banca abierta.
Como muestra el diagrama, el proceso comienza cuando el cliente inicia sesión en Leafy Bank (nuestra institución financiera ficticia). El cliente otorga o deniega el consentimiento para acceder a datos externos: datos del proveedor externo (TPP) u otros datos de instituciones financieras (en esta demostración: MongoDB Bank, NeoFinance y Green Bank).
Un flujo de trabajo multiagente recibe la solicitud del cliente y realiza las siguientes tareas:
Supervisor Agent: Lee la conversación y redirige cada solicitud al especialista correcto.
Agente de consentimiento: Guía a los clientes a través del consentimiento seguro para compartir datos con bancos externos. Gestiona la selección de instituciones, la creación de consentimientos, el inicio de sesión bancario, la aprobación explícita por parte del cliente y la revocación.
Agente de consejo financiero: responde preguntas ad hoc sobre las cuentas, las transacciones y los productos del cliente, y analiza los gastos en bancos internos y externos mediante la consulta a MongoDB directamente a través del servidor MCP.
Capacidades básicas
Esta demostración muestra las siguientes capacidades, en las que MongoDB Atlas y la IA agéntica impulsan flujos de trabajo de banca abierta seguros e inteligentes:
Queryable Encryption para la Privacidad del Consentimiento y del Agente
Almacenar registros de consentimiento en texto sin formato expone campos confidenciales a los administradores de bases de datos, procesos de copia de seguridad y posibles brechas. Para evitar estos riesgos, los reglamentos de banca abierta exigen que las instituciones protejan la identidad de los consumidores en cada evento del ciclo de vida del consentimiento: creación, autorización, recuperación de datos y revocación. El cifrado en reposo también protege las configuraciones de los agentes de IA, como las solicitudes del sistema y las definiciones de herramientas, para limitar la exposición de la lógica patentada.
MongoDB Queryable Encryption resuelve este problema al cifrar los campos sensibles a nivel del driver, garantizando que el servidor nunca vea el texto en claro. Los campos que necesitan filtro se pueden configurar para queries de igualdad. El driver cifra el valor de la query antes de enviarlo, por lo que el servidor coincide con el texto cifrado sin ver nunca el texto en claro. Los campos que solo requieren lectura después de descifrar permanecen cifrados sin soporte de query.
La demostración aplica Queryable Encryption en dos lugares:
Recopilación de consentimiento (
openbankingConsentsen la base de datosleafy_bank_bian, gestionada por el backend de banca abierta), con cuatro campos cifrados:Consumer.UserNameConsumer.UserIdPermissionsSourceInstitution.InstitutionName
El campo
Consumer.UserNameadmite consultas de igualdad para que los servicios puedan listar los consentimientos de un cliente sin que la base de datos vea nunca el nombre de usuario en texto sin formato.Colección de perfil del agente (
openbankingAgentProfilesen el backend del chatbot), con tres campos cifrados:agent_name(consultable por igualdad)system_prompttool_config
Las indicaciones del agente se cargan desde MongoDB cifrado en tiempo de ejecución. Queryable Encryption genera una llave de cifrado de datos separada para cada campo. Admite AWS Key Management Service (KMS), Azure Key Vault y Google Cloud KMS como proveedores de gestión de claves.
El siguiente ejemplo muestra la configuración de conexión cifrada para el backend de banca abierta:
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)
Las consultas de consentimiento funcionan de manera idéntica a texto sin formato: el controlador gestiona el cifrado y descifrado de manera transparente:
# 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}))
La conexión cifrada amplía el MongoDBConnection estándar, por lo que todos los servicios que insinúan el tipo de la clase base la aceptan sin modificaciones.
Acceso a los datos agente con el servidor MongoDB MCP
Los asesores financieros y los consumidores suelen necesitar respuestas puntuales sobre los datos de las cuentas: "¿Cuál es mi saldo total?", "Mostrar mis últimas 10 transacciones", o "¿Para cuáles productos califico?". Crear endpoints API personalizados para cada posible query no es práctico.
El servidor MongoDB MCP expone las colecciones de MongoDB como herramientas que los agentes LLM pueden invocar directamente. La demo lanza el servidor MCP como un subproceso al iniciar la aplicación, lo conecta a la base de datos leafy_bank_bian en modo de solo lectura y pasa las herramientas resultantes a un agente LangGraph a través de una sesión persistente.
El siguiente ejemplo muestra la integración del servidor 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]
El agente bancario de Leafy recibe estas herramientas filtradas más una herramienta get_current_user_id que lee el identificador del cliente autenticado a partir de la configuración de LangGraph. Responde a preguntas en lenguaje natural generando consultas MongoDB de manera autónoma—el agente puede realizar las siguientes acciones:
find: usar para las búsquedas.aggregate: usar para los cálculos.Collection-schema: utilizar para el descubrimiento.
No es necesario contar con un código de herramienta personalizado por colección.
Orquestación multiagente con LangGraph
Los flujos de trabajo de banca abierta abarcan distintos dominios: gestión del consentimiento, análisis financiero y queries de datos bancarios internos. Un único agente monolítico que gestione los tres necesitaría un conjunto de herramientas amplio y un prompt del sistema que cubra preocupaciones contradictorias. La división en agentes especializados mantiene cada conjunto de herramientas pequeño y cada prompt enfocado.
Un agente supervisor orquesta a los siguientes especialistas:
Agente de consentimiento: gestiona los flujos de uso compartido de datos.
Agente de consejos financieros: analiza gastos y consulta los datos de Leafy Bank a través del servidor MCP.
LangGraph dirige cada mensaje del cliente al especialista adecuado según la intención, y MongoDB Atlas conserva el estado de la conversación a través de colecciones de puntos de control.
El siguiente ejemplo muestra el enrutamiento de supervisores con salida estructurada:
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)
Los flujos de trabajo regulados —aprobaciones de consentimientos, revisiones de KYC, autorizaciones de pago— requieren puntos de control humanos donde el agente debe hacer una pausa y esperar una decisión antes de continuar. El mecanismo interrupt() de LangGraph maneja este requerimiento serializando el estado completo del grafo en MongoDB y devolviendo una carga útil al usuario que llama. El flujo de trabajo se reanuda cuando se completa el proceso externo:
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)
Las colecciones de puntos de control de MongoDB Atlas conservan todo el estado de la conversación:
Historial de mensajes
Consentimientos activos
Decisiones de enrutamiento
El flujo de trabajo resiste interrupciones que duran segundos (un clic de botón) o incluso horas (una revisión nocturna de cumplimiento). Cada subagente ejecuta un bucle ReAct (razonar → actuar → observar) hasta que genera una respuesta final y luego devuelve el control al agente supervisor para la próxima decisión de enrutamiento.
Enfoque de modelo de datos
La demostración utiliza dos bases de datos de MongoDB Atlas:
leafy_bank_bian: esta base de datos contiene el modelo operativo compartido y alineado con BIAN sobre el que se ejecuta la demostración, como clientes (PartyReferenceDataDirectory), cuentas (CurrentAccount), transacciones y productos. Esta base de datos también contiene los registros de consentimiento en la colecciónopenbankingConsentscifrada mediante Queryable Encryption, y la coleccióncachedExternalDataque almacena datos externos obtenidos bajo un consentimiento aprobado.open_finance: esta base de datos contiene los datos de origen de las instituciones externas (external_accountsyexternal_productsde las instituciones asociadas) y un registro de instituciones.
Leafy Bank posee y guarda los datos de leafy_bank_bian. Los datos externos se toman prestados mediante el consentimiento, no se poseen. Los datos se leen de open_finance según el consentimiento aprobado, se guardan en cachedExternalData marcados con el ConsentId de concesión y se purgan cuando el consentimiento se revoca o caduca. Nunca se fusionan con los registros de cuentas y transacciones propios de la institución.
A continuación se presentan ejemplos de documentos en las colecciones:
accounts(desdeleafy_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(deleafy_bank_bian), un registro de consentimiento con Queryable Encryption en los campos confidenciales:{ "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" } ] }
Las transacciones externas utilizan el mismo esquema alineado con BIAN que las propias transacciones de Leafy Bank: el titular de la cuenta aparece como pagador en las transacciones de salida y como beneficiario en las de entrada, de modo que los datos de diferentes instituciones tienen una forma coherente.
Visita los repositorios de GitHub en la siguiente sección para explorar datos de muestra de todas las colecciones de la solución.
Compilar la solución
Para crear esta solución, implementa los siguientes servicios coordinados: el backend de banca abierta, el backend del chatbot agéntico y la interfaz de usuario integrada.
Para la implementación completa, sigue las instrucciones en los repositorios correspondientes de GitHub.
Parte 1: backend de banca abierta (repositorio de GitHub)
Exponer las API de banca abierta
Implementa y verifica los endpoints seguros para las siguientes tareas:
Gestionar consentimientos: crea, aprueba, revoca y enumera consentimientos para un cliente.
Obtener datos de clientes externos: recupera cuentas, préstamos, historial de pagos, identificación y transacciones filtradas por el ámbito del consentimiento.
Caché de datos externos: almacena los datos obtenidos bajo un consentimiento aprobado para que el agente de consejo los lea sin necesidad de una nueva recuperación en tiempo real.
Calcular datos: determina saldos, totales de deuda y ofertas de portabilidad de préstamos usando pipelines de agregación.
Configura los índices y el manejo de la expiración del consentimiento (el limpiador en segundo plano) como se describe en el README.
Parte 2: Backend de chatbot agente (Repositorio de GitHub)
Configura el framework agéntico.
Implementa el backend multiagente basado en LangGraph desde el repositorio de chatbots.
Configura el proveedor de LLM (por ejemplo, Claude a través de Amazon Bedrock), el cliente HTTP para el backend de banca abierta y la conexión de MongoDB para el estado de conversación con puntos de control.
Configura el supervisor y los agentes secundarios.
Implementa el patrón de supervisor para que dirija los mensajes de los clientes al agente correcto. Configura los dos agentes para realizar las siguientes tareas:
Agente de consentimiento: enumera las instituciones, crea consentimientos, activa el inicio de sesión bancario externo y aprueba o revoca el uso compartido de datos. Utiliza LangGraph
interrupt()para hacer una pausa para el inicio de sesión bancario y la aprobación explícita del consentimiento.Agente de consejo financiero: responde a las preguntas ad hoc sobre las cuentas, las transacciones y los productos de los clientes, y analiza los gastos en los bancos internos y externos. Realiza queries a MongoDB directamente a través del servidor MCP de solo lectura.
Conecta el servidor MongoDB MCP.
Inicia el servidor MongoDB MCP como un subproceso al inicio, conectado a la base de datos
leafy_bank_bianen modo de solo lectura.Expone solo las herramientas de lectura y query (
find,aggregate,count,list-collections,collection-schema) al agente de asesoramiento financiero.
Expone la API del chatbot.
Proporcione un endpoint de chat (por ejemplo, FastAPI con eventos enviados por el servidor) que un frontend web o móvil pueda llamar.
Asegúrese de que el endpoint transmita mensajes intermedios y gestione las interrupciones de LangGraph para el inicio de sesión bancario y la aprobación de consentimientos.
Parte 3: interfaz de usuario integrada (repositorio de GitHub)
Conecta todos los servicios de extremo a extremo
Ejecuta los escenarios de referencia de los archivos README:
Conecta un banco externo y otorga el consentimiento a través del asistente de IA.
Ve una posición consolidada y multibancaria de las cuentas internas y externas.
Pide al agente de asesoramiento financiero información sobre gastos entre bancos.
Para comandos de configuración paso a paso, variables de entorno y detalles de API, sigue las instrucciones en el archivo README de cada repositorio mencionado anteriormente.
Lecciones clave
Unifica los datos de la banca abierta en MongoDB Atlas: unifica los conjuntos de datos internos y externos en MongoDB Atlas como capa de datos operativos para reducir la complejidad y la duplicación de la integración.
Simplifica los análisis con pipelines de agregación: utiliza los pipelines de agregación de MongoDB para calcular saldos, totales de deuda y puntuaciones de gasto en todas las cuentas internas y externas en una única ruta de query.
Protege los datos de consentimiento confidenciales con el Queryable Encryption de MongoDB: aplica el Queryable Encryption a los atributos de consentimiento para que puedas realizar queries en campos confidenciales y, al mismo tiempo, mantener controles de privacidad sólidos para cargas de trabajo de banca abierta reguladas.
Optimizar los recorridos de consentimiento con IA agente: Integra un chatbot de varios agentes basado en LangGraph para explicar el alcance, la duración y el propósito del consentimiento en lenguaje natural, reduciendo el abandono en flujos multibancarios y mejorando la experiencia del cliente.
Estandariza los datos con un modelo alineado con BIAN: modela las cuentas internas y externas, las transacciones y los consentimientos de acuerdo con el estándar de dominio de servicio de BIAN para que los datos de cada institución se presenten con una forma coherente.
Autores
Saul Calderon
Kiran Tulsulkar
Ainhoa Múgica
Andrea Alaman Calderon