Crie ecossistemas de Open Banking preparados para o futuro usando o MongoDB Atlas e a IA agêntica para potencializar jornadas de consentimento e compartilhamento de dados.
Casos de uso: Inteligência artificial, Visualização única, Personalização
Setores: Serviços financeiros
Produtos e ferramentas: MongoDB Vector Search, Servidor MongoDB MCP, MongoDB Queryable Encryption
Parceiros: LangChain
Visão Geral da Solução
Esta solução apresenta um ecossistema de open banking e demonstra como compartilhar dados financeiros de forma segura entre instituições usando o MongoDB Atlas e a IA agêntica.
Aprenda a implementar um framework de IA agêntica com LangGraph para agilizar a aprovação de consentimento e dar aos clientes uma visão consolidada e multibancária de suas finanças. O MongoDB Atlas funciona como a camada de dados alinhada ao BIAN que sustenta essas arquiteturas de Open Banking.
Arquiteturas de referência
Figura 1. Arquitetura de referência de Open Banking.
Como mostra o diagrama, o processo começa quando o cliente se conecta ao Leafy Banco (nossa instituição financeira fictícia). O cliente concede ou nega o autorização para acessar dados externos — dados de fornecedores terceirizados (TPP) ou outros dados de bancos e bancos (nesta demonstração: Banco MongoDB , GeoFinance e Banco verde).
Um fluxo de trabalho de vários agentes recebe a solicitação do cliente e executa as seguintes tarefas:
Agente Supervisor: Lê a conversa e encaminha cada solicitação para o especialista correto.
Agente de anuência: Guia os clientes sobre o consenso seguro do compartilhamento de dados com bancos externos. Ele lida com a seleção da instituição, a criação do autorização, o login no banco, a aprovação explícita do cliente e a revogação.
Agente de consultoria financeira: responde a perguntas ad hoc sobre contas, transações e produtos do cliente e analisa os gastos em bancos internos e externos fazendo consultas diretamente ao MongoDB por meio do servidor MCP.
Principais funcionalidades
Esta demonstração mostra as seguintes funcionalidades em que o MongoDB Atlas e a IA agêntica impulsionam fluxos de trabalho de Open Banking seguros e inteligentes:
Queryable Encryption para consenso e privacidade do agente
Armazenar registros de consentimento em texto simples expõe campos confidenciais a administradores de banco de dados, processos de backup e possíveis violações. Para evitar esses riscos, os regulamentos de Open Banking exigem que as instituições protejam a identidade do consumidor em cada evento do ciclo de vida do consentimento: criação, autorização, recuperação de dados e revogação. A criptografia em descanso também protege as configurações do agente de IA — como prompts do sistema e definições de ferramentas — para limitar a exposição da lógica proprietária.
A Queryable Encryption resolve esse problema criptografando campos sensíveis no nível do driver, garantindo que o servidor nunca veja o texto simples. Os campos que precisam de filtragem podem ser configurados para queries de igualdade. O driver criptografa o valor da query antes de enviá-lo, para que o servidor corresponda ao texto cifrado sem nunca ver o texto simples. Os campos que exigem apenas leitura após descriptografia permanecem criptografados sem suporte a consulta.
A demonstração aplica Queryable Encryption em dois locais:
Coleção de consentimento (
openbankingConsentsno banco de dadosleafy_bank_bian, gerenciado pelo backend do Open Banking), com quatro campos criptografados:Consumer.UserNameConsumer.UserIdPermissionsSourceInstitution.InstitutionName
O campo
Consumer.UserNamesuporta query de igualdade para que os serviços possam listar os autorização de um cliente sem que o banco de dados veja o nome de usuário em texto simples.Coleção de perfil do agente (
openbankingAgentProfilesno backend do chatbot), com três campos criptografados:agent_name(pedido de igualdade)system_prompttool_config
Os prompts do agente são carregados de um MongoDB criptografado durante o tempo de execução. A Queryable Encryption gera uma chave de criptografia de dados separada para cada campo. Ela oferece suporte ao AWS Key Management Service (KMS), Azure Key Vault e Google Cloud KMS como provedores de gerenciamento de chaves.
O exemplo a seguir mostra a configuração de conexão criptografada para o backend do Open Banking:
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)
As queries de consenso funcionam de forma idêntica ao texto simples – o driver lida com a criptografia e a descriptografia de forma 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}))
A conexão criptografada estende o padrão MongoDBConnection, portanto, cada serviço que digita a classe base a aceita sem modificação.
Acesso aos dados do Agentic com o servidor do MongoDB MCP
Consultores financeiros e consumidores geralmente precisam de respostas ad-hoc sobre dados da conta: "Qual é o meu saldo total?", "Mostrar minhas últimas 10 transações" ou "Para quais produtos me qualifiquei?". Criar pontos de extremidade de API personalizados para cada query possível não é prático.
O servidor MongoDB MCP expõe coleções MongoDB como ferramentas que os agentes LLM podem invocar diretamente. A demonstração inicia o servidor MCP como um subprocesso na inicialização do aplicativo, conecta-o ao banco de dados leafy_bank_bian no modo somente leitura e passa as ferramentas resultantes para um agente LangGraph por meio de uma sessão persistente.
O exemplo a seguir mostra a integração do 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]
O agente do banco rolante recebe essas ferramentas filtradas mais uma ferramenta get_current_user_id que lê o identificador do cliente autenticado a partir da configuração do LangGraph. Ele responde a perguntas de linguagem natural gerando queries MongoDB autoticamente — o agente pode executar as seguintes ações:
find: usar para consultas.aggregate: usar para cálculos.Collection-schema: use para descoberta.
Nenhum código de ferramenta personalizada é necessário por coleção.
Orquestração de vários agentes com LangGraph
Os fluxos de trabalho do Open Banking abrangem domínios distintos: gestão de consentimento, análise financeira e queries de dados bancários internos. Um único agente monolítico lidando com todos os três precisaria de um grande conjunto de ferramentas e de um prompt do sistema que cobrisse preocupações conflitantes. A divisão em agentes especializados mantém cada conjunto de ferramentas pequeno e cada prompt focado.
Um agente supervisor orquestra os seguintes especialistas:
Agente de consentimento: Gerencia os fluxos de compartilhamento de dados.
Agente de consultoria financeira: analisa gastos e realiza queries de dados do Leafy Bank através do servidor MCP.
O LangGraph encaminha cada mensagem do cliente para o especialista apropriado com base na intenção, e o MongoDB Atlas persiste o estado de conversa por meio de coleções de checkpoint .
O exemplo a seguir mostra o roteamento do Supervisor com saída estruturada:
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)
Fluxos de trabalho regulamentados – aprovações de consenso, revisões de KYC, autorizações de pagamento – exigem checkpoints humanos nos quais um agente deve fazer uma pausa e aguardar uma decisão antes de prosseguir. O mecanismo interrupt() do LangGraph lida com esse requisito serializando o estado completo do grafo para o MongoDB e retornando uma carga útil para o chamador. O fluxo de trabalho é retomado quando o processo externo é concluído:
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)
As collections de checkpoint do MongoDB Atlas persistem o estado completo da conversa:
Histórico de mensagens
Consensos ativos
Decisões de roteamento
O fluxo de trabalho sobrevive a interrupções nos últimos segundos (um clique de botão) ou horas (uma revisão de conformidade durante a noite). Cada subagente executa um loop ReAct (motivo → agir → observar) até produzir uma resposta final e, em seguida, retornar o controle ao agente Supervisor para a próxima decisão de roteamento.
Abordagem do modelo de dados
A demonstração utiliza dois bancos de dados MongoDB Atlas :
leafy_bank_bian: Este banco de dados contém o modelo operacional compartilhado e alinhado ao BIAN no qual a demonstração é executada, como clientes (PartyReferenceDataDirectory), contas (CurrentAccount), transações e produtos. Este banco de dados também contém os registros de consentimento na coleçãoopenbankingConsentscom criptografia de query e na coleçãocachedExternalDataque armazena dados externos obtidos mediante um consentimento aprovado.open_finance: Este banco de dados contém os dados de origem das instituições externas—external_accountseexternal_productsde instituições parceiras—além de um registro de instituições.
O Leafy Bank possui e grava os dados leafy_bank_bian. Dados externos são concedidos mediante consentimento, não adquiridos. Os dados são lidos de open_finance conforme o consentimento aprovado, armazenados em cache em cachedExternalData com a tag do ConsentId concedente e eliminados quando o consentimento é revogado ou expira. Eles nunca são mesclados aos registros de conta e transações da própria instituição.
Veja a seguir exemplos de documentos nas coleções:
accounts(deleafy_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), um registro de consentimento com Queryable Encryption nos campos confidenciais:{ "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" } ] }
As transações externas usam o mesmo esquema alinhado ao BIAN que as próprias transações do Leafy Bank — o titular da conta aparece como pagador nas transações de saída e como beneficiário nas de entrada — portanto, os dados de diferentes instituições chegam em um formato consistente.
Visite os repositórios do GitHub na próxima seção para explorar dados de amostra de todas as coleções na solução.
Construir a solução
Para criar essa solução, implemente os seguintes serviços coordenados: o backend de Open Banking, o backend de chatbot de agentes e a IU integrada.
Para a implementação completa, siga as instruções nos repositórios GitHub correspondentes.
Parte 1: backend de Open Banking (repositório GitHub)
Exponha APIs de Open Banking
Implemente e verifique os pontos de extremidade seguros para as seguintes tarefas:
Gerenciar consentimentos: criar, aprovar, revogar e listar consentimentos para um cliente.
Busque dados externos do cliente: recupere contas, empréstimos, histórico de pagamentos, identificação e transações filtradas pelo escopo de consentimento.
Armazene dados externos em cache: armazene dados buscados sob um consentimento aprovado para que o agente de conselhos os leia sem uma nova busca ao vivo.
Calcule dados: determine saldos, totais de dívidas e ofertas de portabilidade de empréstimo usando pipelines de agregação.
Configure os índices e o gerenciamento de expiração de consentimento (o varredor em segundo plano) conforme descrito no README.
Parte 2: backend do chatbot agente (repositório do GitHub)
Configure o framework de agentes.
Implemente o backend multiagente baseado em LangGraph a partir do repositório do chatbot.
Configure o provedor de LLM (por exemplo, Claude através do Amazon Bedrock), o cliente HTTP para o backend de Open Banking e a conexão do MongoDB para o checkpoint do estado da conversa.
Configure os agentes supervisor e filhos.
Implemente o padrão do supervisor para que ele roteie as mensagens do cliente para o agente correto. Configure os dois agentes para realizar as seguintes tarefas:
Agente de consentimento: lista instituições, cria consentimentos, aciona o login em banco externo e aprova ou revoga o compartilhamento de dados. Ele usa o LangGraph
interrupt()para pausar para login bancário e aprovação de consentimento explícita.Agente de consultoria financeira: responde a perguntas ad hoc sobre contas, transações e produtos do cliente e analisa os gastos em bancos internos e externos. Ele consulta o MongoDB diretamente pelo servidor MCP somente leitura.
Conecte o servidor MCP do MongoDB.
Inicie o servidor MongoDB MCP como um subprocesso na inicialização, conectado ao banco de dados
leafy_bank_bianno modo somente leitura.Exponha apenas as ferramentas de leitura e query (
find,aggregate,count,list-collections,collection-schema) ao agente de consultoria financeira.
Exponha a API do chatbot.
Forneça um ponto de extremidade de chat (por exemplo, FastAPI com eventos enviados pelo servidor) que um frontend da Web ou de um dispositivo móvel possa chamar.
Certifique-se de que o ponto de extremidade transmita mensagens intermediárias e lida com interrupções do LangGraph para login do banco e aprovação de autorização.
Parte 3: IU integrada (repositório do GitHub)
Conecte todos os serviços de ponta a ponta
Execute os cenários de referência dos arquivos README:
Conecte um banco externo e forneça consentimento por meio do assistente de IA.
Veja uma posição consolidada e de vários bancos em contas internas e externas.
Peça ao Agente de consultoria financeira análises sobre os gastos em diferentes bancos.
Para obter comandos de configuração passo a passo, variáveis de ambiente e detalhes da API, siga as instruções no arquivo README de cada repositório mencionado acima.
Principais Aprendizados
Unifique os dados do open banking no MongoDB Atlas: unifique conjuntos de dados internos e externos no MongoDB Atlas como sua camada de dados operacionais para reduzir a complexidade e a duplicação da integração.
Simplifique a análise com pipelines de agregação: use pipelines de agregação do MongoDB para calcular saldos, totais de dívidas e pontuações de gastos em contas internas e externas em um único caminho de query.
Proteja dados confidenciais de consentimento com a criptografia de query do MongoDB: aplique a Queryable Encryption aos atributos de consentimento para que você possa executar a query em campos confidenciais mantendo controles de privacidade rigorosos para cargas de trabalho regulamentadas de Open Banking.
Simplifique as viagens de consenso com a IA de agentes: integre um chatbot multiagente baseado em LangGraph para explicar o escopo, a duração e a finalidade do consenso em linguagem natural, reduzindo o abandono nos fluxos multibancos e melhorando a experiência do cliente.
Padronize dados com um modelo alinhado ao BIAN: modele contas internas e externas, transações e consentimentos no padrão de domínio de serviço BIAN para que os dados de cada instituição cheguem em um formato consistente.
Autores
Saul Calderon
Kiran Tulsulkar
Ainhoa Múgica
Andrea Alaman Calderon