对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

开放银行:使用 MongoDB 进行安全数据共享

使用 MongoDB Atlas 和智能体式 AI 构建面向未来的开放银行生态系统,以赋能授权流程和数据共享。

使用案例: 人工智能、单一视图、个性化

行业: 金融服务

产品和工具: MongoDB Vector Search、 MongoDB MCP Server、 MongoDB Queryable Encryption

合作伙伴: LangChain

该解决方案呈现了一个开放银行生态系统,并演示了如何通过使用 MongoDB Atlas 和智能体 AI 在机构之间安全地共享金融数据。

了解如何使用 LangGraph 实现智能体 AI 框架,以简化授权审批流程,并为客户提供整合的多银行财务状况视图。MongoDB Atlas 作为符合 BIAN 标准的数据层,为这些开放银行架构提供底层支撑。

图 1:开放银行参考架构

图 1。 开放银行参考架构。

点击放大

如图所示,当客户登录 Leafy Bank(我们虚构的金融机构)时,该进程就开始了。客户同意或拒绝访问权限外部数据 — 第三方提供商 (TPP) 数据或其他金融机构数据(在本演示中: MongoDB Bank、NeoFinance 和 Green Bank)。

多代理工作流接收客户请求并执行以下任务:

  • 主管代理:读取对话并将每个请求路由给正确的专家。

  • 同意代理:指导客户与外部银行达成安全数据共享同意。它处理机构选择、同意创建、银行登录、显式客户批准和撤销。

  • 财务顾问智能体:回答有关客户账户、交易和产品的临时问题,并通过 MCP 服务器直接查询 MongoDB,分析内部和外部银行的支出情况。

此演示展示了以下功能,其中 MongoDB Atlas 和智能体 AI 为安全、智能的开放银行工作流提供动力:

以明文形式存储授权记录会将敏感字段暴露给数据库管理员、备份流程及潜在的数据泄露风险。为防范这些风险,开放银行法规要求机构在授权的每个生命周期事件(创建、授权、数据检索和撤销)中保护消费者身份信息。静态加密还可保护 AI 智能体配置(如系统提示词和工具定义),以限制专有逻辑的暴露。

MongoDB Queryable Encryption通过在驱动程序级别加密敏感字段来解决这个问题,确保服务器永远看不到明文。可以为相等查询配置需要过滤器的字段。驱动程序在发送查询值之前对其进行加密,因此服务器可以在不查看明文的情况下匹配密文。仅需要解密后读取的字段将保持加密,而不支持查询。

该演示在两个地方应用了Queryable Encryption :

  1. 授权集合(位于 leafy_bank_bian 数据库中的 openbankingConsents,由开放银行后端管理),包含四个加密字段:

    • Consumer.UserName

    • Consumer.UserId

    • Permissions

    • SourceInstitution.InstitutionName

    Consumer.UserName字段支持相等查询,因此服务可以列出客户的同意情况,而数据库无需看到明文用户名。

  2. 智能体配置文件集合(聊天后端中的 openbankingAgentProfiles),包含三个加密字段:

    • agent_name (equality-queryable)

    • system_prompt

    • tool_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,因此每个对基类进行类型提示的服务都会接受该连接而不进行修改。

财务顾问和消费者经常需要有关帐户数据的临时答案:“我的总余额是多少?”,“显示我最近的 10 笔事务”或“我有资格获得哪些产品?”。为每个可能的查询构建自定义API终结点是不切实际的。

MongoDB MCP 服务器将MongoDB集合公开为 LLM 代理可以直接调用的工具。该演示在应用程序初创企业时将 MCP服务器作为子进程启动,以只读模式将其连接到 leafy_bank_bian数据库,并通过持久会话将生成的工具传递给 LangGraph代理。

以下示例显示了 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]

叶子银行代理接收这些过滤后的工具以及从 LangGraph 配置中读取经过身份验证的客户标识符的 get_current_user_id 工具。它通过自主生成MongoDB查询来回答自然语言问题 —代理可以执行以下操作:

  • find:用于查找。

  • aggregate:用于计算。

  • Collection-schema:用于发现。

每个集合不需要自定义工具代码。

开放银行工作流涵盖了不同的领域:授权管理、财务分析和内部银行数据查询。一个处理所有这三项工作的单一智能体将需要庞大的工具集,以及涵盖冲突问题的系统提示。拆分为专门的智能体可使每个工具集保持小巧,每个提示保持专注。

监督智能体协调以下专门代理:

  • 授权智能体:管理数据共享流程。

  • 财务顾问智能体:通过 MCP 服务器分析支出和查询 Leafy Bank 数据。

LangGraph 根据意图将每条客户消息路由到相应的专家, 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 审查、付款授权)需要人工检查点,在这些检查点,代理必须暂停并等待决策,然后才能继续。LangGraph 的 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 循环(原因 → 行动 → 观察),直到产生最终响应,然后将控制权返回给主管代理以进行下一个路由决策。

该演示使用两个MongoDB Atlas数据库:

  • leafy_bank_bian:此数据库包含演示所运行的、共享的、符合 BIAN 标准的操作模型,例如客户(PartyReferenceDataDirectory)、账户(CurrentAccount)、交易和产品。此数据库还在 Queryable-Encrypted openbankingConsents 集合中保存授权记录,并在 cachedExternalData 集合中保存根据已批准授权获取的外部数据。

  • open_finance:此数据库包含外部机构的源数据(来自合作机构的 external_accountsexternal_products)以及机构注册表。

Leafy Bank 拥有并写入 leafy_bank_bian 数据。外部数据通过授权借用,而非拥有。根据批准的授权从 open_finance 读取数据,在 cachedExternalData 中缓存并标记授予的 ConsentId,当授权被撤销或过期时清除。它永远不会被合并到机构自身的账户和交易记录中。

以下是集合中文档的示例:

  • 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 存储库,探索解决方案中所有集合的示例数据。

为了构建该解决方案,需要实现以下协调服务:开放银行后端、智能体聊天机器人后端和集成用户界面。

要完整实现,请按照相应 Github 存储库中的说明进行操作。

第 1 部分:开放银行后端 (Github 存储库)

1
  • 创建MongoDB Atlas项目和集群。

  • 创建此演示中使用的两个数据库:leafy_bank_bian 用于内部数据,open_finance 用于外部数据和授权。

2
  • 填充规划文档和自述文件中描述的集合。

  • 加载示例数据以端到端地运行参考流程。

3
  • 生成本地主密钥,或为生产环境配置云 KMS(例如 AWS KMS)。

  • 运行设置脚本以创建可查询加密 encrypted_consents 集合及其密钥保管库。

4
  • 部署 open-finance-next-gen FastAPI应用(在本地或首选运行时)。

  • 为存储库中记录的 MongoDB 连接、KMS 提供商和 API 设置配置环境变量。

5

实现并验证以下任务的安全终结点:

  • 管理授权:为客户创建、批准、撤销和列出授权。

  • 获取外部客户数据:检索按授权范围过滤的账户、贷款、还款历史、身份信息和交易。

  • 缓存外部数据:存储根据已批准授权获取的数据,以便顾问智能体无需实时重新获取即可读取。

  • 计算数据:利用聚合管道确定余额、债务总额和贷款可转移方案。

按照 README 中的描述配置索引和授权过期处理(后台扫描程序)。

2部分:代理聊天机器人后端(GitHub存储库)

1
  • 从聊天机器人存储库部署基于 LangGraph 的多代理后端。

  • 配置 LLM 提供商(例如,通过 Amazon Bedrock 使用 Claude)、开放银行后端的 HTTP 客户端以及用于检查点对话状态的 MongoDB 连接。

2
  • 运行设置脚本以创建可查询加密 encrypted_agent_profiles 集合。

  • 初始化智能体系统提示和工具配置;图表会在启动时加载它们。

3

实现监督智能体模式,以便将客户数消息路由到正确的智能体。配置这两个智能体以执行以下任务:

  • 授权智能体:列出机构、创建授权、触发外部银行登录,以及批准或撤销数据共享。它使用 LangGraph interrupt() 暂停以进行银行登录和明确的授权审批。

  • 财务顾问智能体:回答有关客户账户、交易和产品的临时问题,并分析内部和外部银行的支出情况。它通过只读 MCP 服务器直接查询 MongoDB。

4
  • 在启动时将 MongoDB MCP 服务器作为子进程启动,并以只读模式连接到 leafy_bank_bian 数据库。

  • 仅向财务顾问智能体公开读取和查询工具(findaggregatecountlist-collectionscollection-schema)。

5
  • 提供 Web 或移动前端可以调用的聊天终结点(示例,具有服务器发送事件的 FastAPI)。

  • 确保终结点流式传输中间消息并处理 LangGraph 中断,以进行银行登录和同意批准。

第 3 部分:集成用户界面 (GitHub 存储库)

1
  • 部署 open-finance-next-gen-ui Next.js 应用,并将其指向聊天机器人和开放银行后端 URL。
2

运行 README 文件中的参考场景:

  • 通过 AI 助手连接外部银行并授予授权。

  • 查看跨内部和外部账户的整合多银行头寸。

  • 向财务顾问智能体咨询跨银行的支出见解。

3
  • 持久化操作和授权数据。

  • 为聚合工作负载和对话检查点提供支持。

  • 支持完整的智能体授权和顾问旅程。

有关分步设置命令、环境变量和 API 详细信息,请遵循上述每个存储库 README 文件中的说明。

  • 在 MongoDB Atlas 上统一开放银行数据:在 MongoDB Atlas 上统一内部和外部数据集,作为您的操作数据层,以减少集成复杂性和重复。

  • 利用聚合管道简化分析:使用 MongoDB 聚合管道在单个查询路径中计算跨内部和外部账户的余额、债务总额和支出评分。

  • 使用 MongoDB Queryable Encryption 保护敏感的授权数据:将 Queryable Encryption 应用于授权属性,以便您可以在对敏感字段进行查询的同时,为受监管的开放银行工作负载保持强大的隐私控制。

  • 利用代理AI简化同意流程:集成基于 LangGraph 的多代理聊天机器人,以自然语言解释同意范围、持续时间和目的,从而减少多银行流程中的放弃并改善客户体验。

  • 使用符合 BIAN 标准的数据模型标准化数据:基于 BIAN 服务域标准对内部和外部账户、交易和授权进行建模,以便来自每个机构的数据以一致的格式呈现。

  • Saul Calderon

  • Kiran Tulsulkar

  • Ainhoa Múgica

  • Andrea Alaman Calderon