Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Menu Docs
Página inicial do Docs
/

Financiamento aberto da próxima geração: portabilidade de crédito

Construa ecossistemas de financiamento aberto prontos para o futuro usando o MongoDB Atlas e a IA de agentes para realizar viagens de consenso e compartilhamento de dados para portabilidade de crédito.

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

Essa solução apresenta um ecossistema de financiamento aberto e demonstra como compartilhar dados financeiros com segurança entre organizações usando o MongoDB Atlas e a IA de agentes.

Saiba como implementar uma framework de IA por agentes com a LangGraph para simplificar a aprovação por consenso e melhorar as oferecimentos financeiros para a portabilidade de crédito. O MongoDB Atlas serve como a camada de dados operacionais que sustenta essas arquiteturas de financiamento aberto.

figura 1: diagrama de processo

figura 1. Diagrama de processo

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 Portabilidade: Analisa dados externos do banco para produzir pontuações de gastos, avaliações de crédito e ofertas determinísticas de portabilidade de crédito que mostram potencial de economia.

  • Agente do Leafy Banco: Responde a perguntas específicas sobre as contas, transações e produtos do cliente do Banco de Dados consultando o MongoDB diretamente por meio do servidor MCP.

Esta demonstração mostra quatro funcionalidades principais em que o MongoDB Atlas e a IA de agentes alimentam fluxos de trabalho abertos e seguros.

O armazenamento de registros de consenso 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 do Open Finance exigem que as organizações protejam a identidade do consumidor em cada evento do ciclo de vida do consenso : 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 exclusiva.

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:

  1. Coleção de permissões (encrypted_consents no backend do Open Finance), com quatro campos criptografados:

    • Consumer.UserName

    • Consumer.UserId

    • Permissions

    • SourceInstitution.InstitutionName

    O campo Consumer.UserName suporta 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.

  2. Coleção de perfil de agente (encrypted_agent_profiles no backend do chatbot), com três campos criptografados:

    • agent_name (pedido de igualdade)

    • system_prompttool_config

Os prompts do agente são carregados do MongoDB criptografado no tempo de execução. A Queryable Encryption gera uma chave de criptografia de dados) separada para cada campo. Ele 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 da conexão criptografada para o backend do OpenFinance:

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.

Quando um consumidor compartilha dados bancários externos por meio de um consenso, os registros de transações chegam sem categorias comerciais padronizadas. Strings brutas de fornecedores, como "Restaurante Nobu" ou "UBER TRIP", não contêm metadados de categoria. Sem classificação, a análise de gastos e a pontuação de crédito não podem funcionar.

O Atlas pesquisa vetorial classifica essas transações combinando descrições dos fornecedores com uma coleção de referência de 49 Códigos de categoria de fornecedores (MCC). A demonstração usa o modelo de incorporação voyage-finance-2 da Voyage IA — criado especificamente para textos financeiros — para gerar vetores de dimensão 1024para os dados de referência da MCC e as descrições de transações recebidas.

O exemplo a seguir mostra o pipeline de classificação de pesquisa vetorial:

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

Os documentos de referência da MCC são incorporados no momento da semente com input_type="document", enquanto as queries de transação usam input_type="query", seguindo a prática recomendada de incorporação assimétrica da Voyage IA para volumes de trabalho de recuperação.

A classificação é efêmera — os resultados são retornados ao agente , mas nunca persistem. Os dados bancários externos são pegados por meio de autorização, e não de propriedade. O agente de portabilidade usa transações classificadas para calcular pontuações de gastos, compará-las com os benchmarks de melhores práticas e gerar ofertas determinísticas de portabilidade de crédito.

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 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: use para pesquisas

  • aggregate: usar para cálculos

  • Collection-schema: use para descoberta.

Nenhum código de ferramenta personalizada é necessário por coleção.

Os fluxos de trabalho de financiamento aberto abrangem domínios distintos: gerenciamento de consenso, análise financeira e consultas internas de dados bancários. Um único agente monocrítico para lidar com os três precisaria de um grande conjunto de ferramentas e um prompt de sistema que abrangesse preocupações conflitantes. A divisão em agentes especializados mantém cada conjunto de ferramentas pequeno e cada prompt focado.

Um agente Supervisor coordena três especialistas:

  • Agente de consenso: gerencia fluxos de compartilhamento de dados

  • Agente de Portabilidade: Analisa dados externos para ofertas de crédito

  • Leafy Banco agente: Consulta dados do Leafy Banco 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
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))

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.

A demonstração utiliza dois bancos de dados MongoDB Atlas :

  • leafy_bank: armazena os dados da própria instituição, como contas de cliente , histórico de transações, produtos de crédito e as regras de subscrição que impulsionam as ofertas de portabilidade. Ele também contém referências de código MCC e benchmarks de gastos que o agente de portabilidade usa para classificação.

  • open_finance: Armazena dados obtidos por meio de consenso, como contas externas, créditos, transações e histórico de pagamentos de Instituições parceiras. Os próprios termos residem aqui em uma coleção criptografada. Uma coleção de entidades separada registra os bancos externos disponíveis.

Veja a seguir exemplos de documentos nas coleções:

  • accounts (leafy_banco):

    {
    "_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_financiamento)

    {
    "_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"
    }
    }
    ]
    }

Visite os repositórios do GitHub na próxima seção para explorar dados de amostra de todas as coleções na solução.

Para construir esta solução, implemente dois serviços coordenados:

Para a implementação completa, siga as instruções nos repositórios GitHub correspondentes.

1Parte: backend do Open Cloud (repositório do GitHub)

1
  • Criar um projeto e cluster do MongoDB Atlas .

  • Crie os dois bancos de dados usados nesta demonstração: um para dados internos do Leafy Banco e outro para dados externos do Open Archive.

2
  • Preencha as coleções descritas no documento de planejamento e README.

  • Carregue clientes e transações de amostra para executar os fluxos de referência de ponta a ponta.

3
  • Implemente o aplicativo open-finance-next-gen FastAPI (localmente ou no tempo de execução de sua preferência).

  • Configure variáveis de ambiente para a conexão do MongoDB , segurança e quaisquer sinalizadores de recurso documentados no repositório.

4

Implemente e verifique os pontos de extremidade seguros para as seguintes tarefas:

  • Gerenciar autorização: crie, aprove, revogue e liste autorização para um cliente.

  • Buscar dados de cliente externos: recupere contas, créditos, histórico de pagamentos, identificação e transações filtradas por escopo de autorização.

  • Calcule dados: determine saldos, totais de dividas e ofertas de portabilidade de crédito usando pipelines de agregação .

  • Classifique transações e categorias do MCC utilizando o Atlas pesquisa vetorial.

Configure índices, políticas de TTL e restrições exclusivas, conforme descrito no README, para suportar a expiração do autorização, o desempenho e a integridade dos dados.

Parte 2: backend do chatbot agente (repositório do GitHub)

1
  • Implemente o backend multiagente baseado em LangGraph a partir do repositório do chatbot.

  • Configure o provedor LLM (por exemplo, Claude through Amazon Bedrock), cliente HTTP e a conexão MongoDB para o estado de conversação de checkpointing.

2

Implemente o padrão do Supervisor para que ele roteie as mensagens do cliente para o agente correto. Configure os três agentes para executar as seguintes tarefas:

  • Agente de consenso: liste organizações, crie consensos, trigger o login do banco externo e aprove ou revogue o compartilhamento de dados.

  • Agente de portabilidade Ligue para as APIs Open Cloud e Leafy Banco para análise de gastos, avaliação de portabilidade de crédito e cálculos de posição financeira consolidada.

  • Agente do Leafy Banco: Responda a perguntas específicas sobre os dados do Banco de Dados do cliente consultando o MongoDB por meio do servidor MCP. O agente resolve a identidade do cliente autenticado da configuração da sessão e consulta seis coleções somente para leitura: contas, transações internas, usuários, produtos, pontuações de departamento de crédito e práticas recomendadas de gastos.

Registre todas as ferramentas definidas no repositório para que cada agente possa chamar os pontos de extremidade de backend correspondentes.

3
  • 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.

4

Aponte o backend do chatbot para o URL base do backend do OpenFinance em execução . Execute os cenários de referência a partir dos arquivos README:

  • Compare um crédito de banco externo com uma oferta de portabilidade do Leafy Banco.

  • Gerando uma pontuação de gastos usando a classificação baseada em MCC e a Pesquisa Vetorial do Atlas.

Validar esse MongoDB Atlas:

  • Persiste dados operacionais

  • agregação de energia e cargas de trabalho vetoriais

  • Suporta todo o consenso do agente e a viagem de conselhos

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.

  • Unifique dados financeiros abertos no MongoDB Atlas: Unifique conjuntos de dados internos e externos no MongoDB Atlas como sua camada de dados operacional para reduzir a complexidade e a duplicação da integração.

  • Simplifique a análise com pipelines de agregação: use os pipelines de agregação do MongoDB para calcular saldos, totais de dividas, economia de portabilidade e pontuações de gastos em contas internas e externas em um único caminho de query.

  • Proteja dados de consenso confidenciais com a Queryable Encryption do MongoDB: aplique a Queryable Encryption aos atributos de consenso para que possa executar a query em campos confidenciais e, ao mesmo tempo, manter fortes controles de privacidade para cargas de trabalho de financiamento aberto regulamentadas.

  • 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.

  • Alinhe as estruturas de dados com as práticas recomendadas da ISO 20022 : modele transações externas usando campos e códigos parecidos com a ISO 20022para padronizar os dados entre as organizações sem criar esquemas profundamente aninhados.

  • Saul Calderon

  • Kiran Tulsulkar

  • Ainhoa Múgica

  • Andrea Alaman Calderon

  • David Jamir

  • Orquestração de pagamentos com IA agêntica

  • Mitigação de Crimes Financeiros com o MongoDB Atlas

Voltar

Inteligência de documentos com Agentic IA

Nesta página