Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Mandate Ledger para comércio agente confiável no MongoDB

Aprenda a criar um Mandate Ledger imutável no MongoDB Atlas para criar uma camada de confiança para o comércio de agentes e fornecer garantias de responsabilidade.

Casos de uso: Inteligência Artificial, Pagamentos

Setores: Varejo

Produtos: MongoDB Atlas

Parceiros: Google cloud

Os agentes de IA transformam o comércio digital gerenciando autonomamente as tarefas, desde a descoberta do produto até o checkout final. No entanto, quando um agente de IA inicia um pagamento em nome de um cliente, ele quebra as suposições básicas do comércio tradicional e cria uma crise de confiança.

Os sistemas de pagamento existentes não podem verificar a autoridade de um agente, autenticar a verdadeira intenção de um cliente ou definir uma responsabilidade clara pela transação. Isso cria os principais desafios:

  • Autorização: verificar se um cliente autorizou o agente para uma compra específica.

  • Autenticidade: verificar se a solicitação de um agente reflete com precisão a verdadeira intenção do cliente, sem erros ou alucinações.

  • Responsabilidade: Determinar quem é responsável se uma transação falhar—o cliente, o desenvolvedor do agente, o comerciante ou o emissor.

Para resolver esses desafios, é necessário um padrão compartilhado em que todos os participantes, incluindo clientes, comerciantes e instituições financeiras, possam confiar.

O Protocolo de Pagamentos de Agentes (AP2) do Google fornece um protocolo aberto, seguro e interoperável que cria um ecossistema confiável para comerciantes, instituições financeiras e clientes comuns.

A camada de confiança

Figura 1. A camada de confiança

O AP2 protege as transações por meio de Credenciais Digitais Verificáveis (VDCs) — cargas úteis JSON insensíveis e assinadas criptograficamente que os agentes criam e trocam. O API2 categoriza esses VDCs em três mandatos principais:

  • O Mandato de Intenção: descreve o que o cliente exige e define as condições sob as quais um agente de IA pode fazer uma compra em nome do cliente.

  • O Mandato do Carrinho: Fornece um recibo digital assinado pelo comerciante e pelo cliente para autorizar compras com presença humana.

  • O Mandato de Pagamento: cria uma camada de visibilidade compartilhada diretamente com a rede de pagamento para sinalizar com segurança o envolvimento do agente de IA.

Os VDCs atuam como contratos digitais permanentes. Os agentes assinam criptograficamente essas cargas para capturar a intenção do cliente. Esse processo cria um rastro de auditoria não repudiável para cada etapa da experiência de compra.

Uma conversa contratual com prova verificável a cada passo

Figura 2. Uma conversa contratual com prova verificável em cada etapa

Visualização de intenção na interface do usuário, mostrando como cada intenção é representada na conversa

Figura 3. Visualização de intenção na interface do usuário, mostrando como cada intenção é representada na conversa

Para que esses VDCs criptográficos permaneçam confiáveis, os sistemas devem armazená-los em um ambiente seguro e verificável. O Mandate Ledger Service atua como o middleware de proteção entre os agentes de IA e o banco de dados. Por trás desse middleware está o MongoDB Atlas.

O Atlas oferece segurança de nível empresarial projetada para oferecer suporte a um registro de auditar à prova de adulterções. Crie essa arquitetura para criar a camada de confiança imutável, o Mandate Ledger Service, necessário para dimensionar o comércio agente seguro.

Imagine um cliente pedindo a um assistente de IA para comprar um novo smartphone. O agente de compras negocia autonomamente com os comerciantes para encontrar o negócio perfeito. O serviço de registro de mandatos registra toda essa jornada empacotando cada solicitação, aprovação e etapa de checkout em mandatos JSON criptograficamente assinados. O MongoDB Atlas armazena cada mandato como um documento imutável. Esse processo transforma um bate-papo simples em uma prova de intenção permanente e não repudiável.

Esta solução mostra como criar o serviço Mandate Ledger em uma arquitetura que usa o protocolo AP2.

O AP2 usa uma arquitetura baseada em funções projetada para fornecer segurança e responsabilidade clara pelas transações. Cada ator neste ecossistema tem responsabilidades distintas para simplificar a integração e proteger a privacidade do cliente.

Arquitetura do serviço de contabilidade do MongoDB Mandate

Figura 4. Arquitetura do serviço de registro de mandato do MongoDB

Revisar as funções principais definidas nesta arquitetura:

  • O cliente: realiza interação diretamente com o agente de compras para iniciar a descoberta de produtos e as solicitações de compra.

  • O agente de compras: realiza interação diretamente com o cliente para descobrir produtos, negociar o carrinho e assinar mandatos.

  • O agente comercial: representa o vendedor para exibir o inventário, negociar ofertas e assinar mandatos para garantir o cumprimento do pedido.

  • O provedor de credenciais: gerencia os métodos de pagamento do cliente com segurança e seleciona os tokens de pagamento apropriados para a transação.

  • O processador de pagamentos do comerciante: constrói e roteia a mensagem de autorização da transação diretamente para a rede de pagamentos e o emissor.

  • O agente de auditoria: inspeciona o rastreamento de auditoria imutável após uma transação para verificar pagamentos e assinaturas usando acesso somente leitura.

  • O serviço de contabilidade de mandatos: atua como o middleware de proteção entre os agentes de IA e o MongoDB Atlas para armazenar os mandatos criptograficamente assinados nativamente como documentos JSON. O MongoDB Atlas serve como o livro-razão central e imutável.

Esta solução usa uma arquitetura multiagente em que os agentes se comunicam usando o protocolo Agente-para-Agente (A2A). O AP2 também oferece suporte ao Protocolo de Comércio Universal (UCP) para executar transações.

O serviço Mandate Ledger atua como um middleware de proteção que conecta o agente comercial ao banco de dados. Crie este serviço usando FastAPI ou gRPC.

Arquitetura detalhada do serviço de contabilidade de mandatos

Figura 5. Arquitetura detalhada do serviço de registro

Processe todas as solicitações de agente por três camadas distintas e seguras:

  • A camada de autenticação: valida as chaves de API para identificar agentes com segurança. Ele aplica o controle de acesso baseado em função (RBAC) por tipo de agente para forçar permissões rígidas do agente.

  • A Camada de Lógica de Negócios: executa a validação de solicitações principais e o controle de concorrência. Ele impõe a idempotência para novas tentativas de rede seguras e oferece suporte à imutabilidade estrita do mandato.

  • A camada de acesso aos dados: usa o cliente MongoDB e a indexação otimizada para executar operações de banco de dados. Essa camada define o campo _id como imutável e bloqueia todas as operações de atualizar e excluir por meio da validação de esquema.

Cada transação AP2 progride por meio de uma sequência estruturada de mandatos criptograficamente assinados. Cada etapa produz um registro imutável no MongoDB Atlas, criando um rastro de auditoria completo da intenção ao pagamento.

Fluxo de dados

Figura 6. Fluxo de dados

Para mover uma transação da intenção para o pagamento, os agentes AP2 concluem a seguinte sequência de transações:

  1. Capture a intenção do cliente. O agente de compras traduz a solicitação do cliente, como uma descrição em linguagem natural de "tênis de corrida", em um mandato de intenção estruturado. O mandato de intenção captura o comerciante de destino, os requisitos de reembolso, as preferências de confirmação do carrinho e uma janela de expiração. O agente de compras assina o mandato usando EdDSA em nome do cliente e o envia ao agente do comerciante com um status de signed e um hash de versão bloqueando seu conteúdo.

  2. Armazenar o Mandato de Intenção. O Agente Comerciante grava o Mandato de Intenção no Atlas por meio do Serviço de Razão de Mandatos. O serviço de razão valida a solicitação, aplica o RBAC e anexa o registro de forma imutável.

  3. Crie o Mandato do Carrinho. O Agente Comerciante cria uma oferta de carrinho contendo todos os detalhes do produto: nome do item, preço, moeda, métodos de pagamento aceitos e validade. O Agente Comerciante então o armazena no Atlas através do Serviço de Registro de Mandatos, onde o registro recebe um status de proposed e um hash de versão para garantir a integridade.

  4. Ofereça o carrinho ao cliente. O agente do comerciante retorna o mandato de carrinho proposto ao agente de compras, que apresenta as opções de produto disponíveis ao cliente.

  5. Aceite o Mandato do Carrinho. O cliente seleciona uma opção. O agente de compras coassina o Mandato do Carrinho em nome do cliente usando uma chave de dispositivo com suporte de hardware e envia o mandato aceito de volta ao agente do comerciante.

  6. Contrassinar e finalizar o Mandate do carrinho. O agente do comerciante adiciona sua assinatura criptográfica ao carrinho aceito e armazena o Mandate do carrinho totalmente assinado duplamente no Atlas, bloqueando os termos acordados com um status signed.

  7. Crie o mandato de pagamento. O agente de compras consulta o provedor de credenciais para recuperar o token de pagamento apropriado. O agente de compras então cria e assina o mandato de pagamento em nome do cliente e o envia ao agente comercial. O provedor de credenciais nunca retorna números completos de cartão de crédito, o que garante que o agente de compras nunca acesse dados brutos.

  8. Armazene o mandato de pagamento. O agente comercial grava o mandato de pagamento assinado no Atlas por meio do serviço de registro de mandatos. O serviço de registro compartilha esse mandato diretamente com instituições financeiras para sinalizar o envolvimento do agente de IA, e o processador de pagamento usa esse mandato para rotear a autorização para a rede de pagamento.

Os agentes não podem modificar ou excluir registros existentes. O MongoDB Atlas impõe gravações somente de acréscimo, de modo que toda a cadeia de mandatos — intenção, carrinho e pagamento — permanece intacta e verificável de forma independente pelo agente auditor a qualquer momento.

Estruture o banco de dados MongoDB usando cinco coleções principais para suportar e dimensionar o e-commerce:

  • mandate_ledger: Armazena versões de mandato imutáveis com segurança.

  • payments: Armazena registros de conclusão de pagamento ultraleves.

  • api_keys: gerencia chaves de API para identificar agentes com segurança.

  • audit_log: Mantém um registro completo de auditar operações.

  • idempotency_records: Armazena em cache os dados da solicitação para deduplicar as operações.

A coleção mandate_ledger armazena todos os três tipos de mandato em uma única coleção. Use o campo entity_type para distingui-los no momento da query, o que elimina a necessidade de joins ou coleções separadas por tipo de mandato.

Todos os documentos compartilham uma estrutura de envelope comum:

{
"entity_id": "IntentMandate_955181ea-11c3-4379-92c4-3e27c5f278d3",
"entity_type": "IntentMandate",
"version": 1,
"status": "signed",
"transaction_id": "txn_fca7db66-c769-4206-b891-7140af37f8f4",
"user_id": "hunter-d53910cf-b9e2-4876-8668-8251c990e203",
"created_by_agent": "merchant_agent_dev",
"created_by_agent_type": "merchant-agent",
"current_version_hash": "4a822a01468a27dfd...",
"signatures": [...],
"mandate_data": { ... }
}

O campo mandate_data carrega a carga útil específica do tipo, onde cada tipo de mandato armazena uma estrutura de dados diferente:

O documento IntentMandate captura a intenção de compra do cliente como dados estruturados. Esses dados incluem uma descrição em linguagem natural, comerciantes-alvo, SKUs específicos, requisitos de reembolsabilidade e uma janela de expiração:

IntentMandate document
"mandate_data": {
"natural_language_description": "cheapest french press coffee maker",
"merchants": [],
"skus": [],
"requires_refundability": true,
"user_cart_confirmation_required": true,
"intent_expiry": "2026-04-18T20:00:03.651746+00:00"
}

O agente de compras assina este documento usando EdDSA antes de enviá-lo ao agente do comerciante. O documento entra no ledger com um payload "status": "signed" e um valor current_version_hash que bloqueia seu conteúdo.

O documento CartMandate inclui a oferta comercial completa, incluindo itens de linha com preços e moedas, custos de envio, impostos, métodos de pagamento aceitos e uma janela de expiração do carrinho:

Documento CartMandate
"mandate_data": {
"contents": {
"payment_request": {
"method_data": [{ "supported_methods": "CARD", "data": { "network": ["mastercard", "paypal", "amex"] }}],
"details": {
"display_items": [
{ "label": "Standard Laptop", "amount": { "currency": "USD", "value": 1203.50 }, "refund_period": 30 },
{ "label": "Shipping", "amount": { "currency": "USD", "value": 2.00 }},
{ "label": "Tax", "amount": { "currency": "USD", "value": 1.50 }}
],
"total": { "label": "Total", "amount": { "currency": "USD", "value": 1203.50 }}
}
},
"shipping_address": { "recipient": "Bugs Bunny", "address_line": ["123 Main St"], "city": "Sample City", "country": "US" },
"cart_expiry": "2026-04-17T20:29:05.197984+00:00"
},
"merchant_authorization": "eyJhbGciOiJSUzI1NiIs..."
}

Este documento entra no livro-razão com uma designação "status": "proposed". Quando o cliente aceita a oferta, o agente de compras a coassina. O agente do comerciante então grava um novo documento no livro-razão com o mesmo transaction_id, um version incrementado e um campo "status": "signed". Incluir ambas as assinaturas no array torna os termos acordados bilateralmente vinculativos:

"signatures": [
{ "signer_type": "shopping-agent", "algorithm": "EdDSA", "signed_at": "2026-04-17T19:59:49Z" },
{ "signer_type": "merchant-agent", "algorithm": "JWT", "signed_at": "2026-04-17T19:59:50Z" }
]

O documento PaymentMandate vincula o carrinho acordado a um token de pagamento específico recuperado do provedor de credenciais e inclui os detalhes de envio e contato do pagador:

documento PaymentMandate
"mandate_data": {
"payment_mandate_contents": {
"payment_details_total": { "label": "Total", "amount": { "currency": "USD", "value": 1203.50 }},
"payment_response": {
"method_name": "CARD",
"details": { "token": { "value": "fake_payment_credential_token_5" }},
"shipping_address": { "recipient": "Bugs Bunny", "address_line": ["123 Main St"], "city": "Sample City" },
"payer_email": "bugsbunny@gmail.com"
},
"merchant_agent": "Generic Merchant",
"timestamp": "2026-04-17T20:00:22.603453+00:00"
},
"user_authorization": "fake_cart_mandate_hash_cart_fb1b4c86..._fake_payment_mandate_hash_812843b2..."
}

O hash user_authorization vincula criptograficamente este PaymentMandate ao CartMandate aceito, o que impede que o token de pagamento seja reproduzido em outra transação.

Crie um índice nos campos transaction_id e entity_type para recuperar a cadeia de mandatos completa para qualquer transação em uma única query.

A coleção payments armazena um documento por transação concluída. Esta coleção aplica o padrão de Referência estendida.

Em vez de fazer embedding do conteúdo completo do mandato, cada documento armazena apenas o ID do mandato e a assinatura de autorização para cada um dos três mandatos. Esse design mantém o registro de pagamento pequeno e rápido de ler, preservando um ponteiro direto para os dados completos na coleção mandate_ledger quando um rastreamento completo para auditar é necessário.

{
"payment_id": "pay_123c25ac-7b56-4e45-8dd1-30cdcda944c7",
"transaction_id": "txn_6fbab918-2b5d-4ddd-89d8-fdb96e5648d9",
"user_id": "hunter-263b752e-92be-4001-ab9d-38847811c663",
"intent_mandate": { "mandate_id": "IntentMandate_41bbeacf-...", "signature": "0x_shopping_agent_sig_...", "timestamp": "2026-04-15T19:50:57Z" },
"cart_mandate": { "mandate_id": "CartMandate_c0e8f369-...", "signature": "eyJhbGciOiJSUzI1NiIs...", "timestamp": "2026-04-15T19:52:07Z" },
"payment_mandate": { "mandate_id": "PaymentMandate_33c39b8c-...", "signature": "fake_cart_mandate_hash_...", "timestamp": "2026-04-15T19:53:53Z" },
"amount": 28,
"currency": "USD",
"status": "SUCCESS",
"payment_method_type": "CARD",
"merchant_agent": "merchant_agent_dev",
"payment_processor_agent": "payment_processor",
"processed_at": "2026-04-15T19:54:14Z"
}

Esse design mantém intencionalmente o documento pequeno. Os termos completos, itens de linha e provas criptográficas residem na coleção mandate_ledger. O registro de pagamento existe apenas para confirmar que a transação está concluída e para fornecer os três ponteiros necessários para reconstruir a cadeia de auditar completa. Use o campo transaction_id para unir as duas coleções quando for necessário um rastreamento completo.

A coleção api_keys gerencia chaves de API para identificar agentes com segurança. Use esta coleção para armazenar as chaves associadas a cada agente que chamar o serviço.

A coleção audit_log armazena todas as operações da API para compliance e depuração. Use esta coleção para registrar eventos de nível de serviço, como criação de mandatos, tentativas de acesso e resultados de validação. Essa abordagem impede a expansão do próprio livro-razão de mandatos imutáveis. Adicione um índice TTL para remover automaticamente os registros após 90 dias. Isso preserva um rastro operacional útil enquanto mantém a coleção limitada.

A coleção inclui os seguintes campos-chave:

  • event_type: Identifica o tipo de operação, como mandate.created.

  • entity_id: Faz referência ao mandato relacionado.

  • actor_agent_id: Captura qual agente realizou a ação.

  • event_timestamp: registra quando o evento ocorreu e oferece suporte à política TTL.

  • expires_at: Define quando o MongoDB exclui automaticamente o registro.

A coleção idempotency_records armazena chaves de idempotência para evitar operações duplicadas. Use esta coleção para reter a chave fornecida pelo cliente, o agente que fez a solicitação e a entrada do livro-razão criada para essa operação. Adicione um índice TTL para remover automaticamente os registros após 24 horas.

A coleção inclui os seguintes campos-chave:

  • idempotency_key: Armazena a chave exclusiva fornecida pelo cliente e requer um índice.

  • agent_id: Identifica o agente que fez a solicitação.

  • ledger_entry_id: Faz referência ao mandato criado para a solicitação original.

  • expires_at: Define quando o MongoDB exclui automaticamente o registro.

Antes de começar, verifique se você instalou e configurou o seguinte:

  • MongoDB Atlas ou MongoDB autogerenciado 7.0 ou posterior

  • Python 3.13 (versão 3.13.x)

  • uv para gerenciamento de dependência

  • Uma chave de API do Google ou acesso ao Vertex AI

  • Docker para executar serviços como contêineres

  • Node.js e npm para o aplicativo frontend

1
  1. Clone o repositório e instale o Mandate Ledger Service:

    git clone https://github.com/mongodb-industry-solutions/retail-agent-shopping-ap2-ucp.git
    cd retail-agent-shopping-ap2-ucp/mandate_ledger_service
    python3.13 -m venv .venv
    source .venv/bin/activate
    pip install -e .
  2. Crie um arquivo .env no diretório mandate_ledger_service/ :

    MONGODB_URI= # Your connection string
    MONGODB_DATABASE=mandate_ledger
    SERVICE_NAME=mandate-ledger-service
    ENVIRONMENT=development
    # Bootstrap Auth (dev only — set to false after Step 2)
    BOOTSTRAP_ADMIN_KEY=**** # Generate: openssl rand -hex 32
    ENABLE_BOOTSTRAP_AUTH=true
    ALLOWED_CORS_ORIGINS=*
    DEFAULT_RATE_LIMIT_PER_MINUTE=60
  3. Inicie o serviço:

    uvicorn src.main:app --reload --port 5000
  4. Para executar o serviço com o Docker:

    docker build -t mandate-ledger .
    docker run --rm \
    -p 5000:5000 \
    --env-file .env \
    mandate-ledger
2
  1. Abra um novo terminal e execute:

    cd mandate_ledger_service
    source .venv/bin/activate
    PYTHONPATH=. python3 scripts/setup_agent_keys.py
  2. Copie a Merchant chave de API do agente da saída. Defina ENABLE_BOOTSTRAP_AUTH=false em seu arquivo .env e reinicie o serviço.

Observação de produção: use um gerente de segredos, como o Google Secret Gerente ou o AWS Secrets Gerente, e implemente a rotação de chaves.

3

O serviço /backend faz interação com o serviço de registro de mandatos e envia novos mandatos para o registro. Este serviço é adaptado do repositório AP2 do Google usando a amostra AP2 + A2A.

  1. Crie um arquivo .env em /backend. Defina MANDATE_LEDGER_API_KEY para o valor mlsk_merchant_key gerado na Etapa 2:

    GOOGLE_API_KEY=
    MANDATE_LEDGER_SERVICE_URL=http://localhost:5000
    MANDATE_LEDGER_API_KEY=
  2. Para o Vertex AI, substitua a primeira linha por:

    GOOGLE_GENAI_USE_VERTEXAI=true
    GOOGLE_CLOUD_PROJECT=your-project-id
    GOOGLE_CLOUD_LOCATION=us-central1
  3. Crie e execute o contêiner de backend:

    docker build -f backend/Dockerfile -t retail-backend ./backend
    docker run --rm \
    -p 8000:8000 \
    -p 8001:8001 \
    -p 8002:8002 \
    -p 8003:8003 \
    -p 8004:8004 \
    --env-file backend/.env \
    retail-backend
  4. A API de backend começa em http://localhost:8000 e inicia automaticamente os seguintes agentes AP2:

    Agente
    Porta

    Agente de compras (integrado ao backend principal)

    8000

    Agente comercial

    8001

    Agente do provedor de credenciais

    8002

    Agente processador de pagamentos

    8003

    Agente do auditor

    8004

4

O frontend é um aplicativo Next.js que faz interação com o serviço /backend.

  1. Copie o arquivo .env de exemplo e defina os pontos de extremidade do backend e do assistente:

    cd frontend
    cp EXAMPLE.env .env.local
  2. Atualize frontend/.env.local com seus valores:

    MONGODB_URI=<your-mongodb-string>
    MONGODB_DATABASE=<your-database-name>
    NEXT_PUBLIC_BACKEND_ENDPOINT=http://localhost:8000
    ASSISTANT_ENDPOINT=http://localhost:3333
  3. Instale as dependências e execute o frontend:

    npm install
    npm run dev
  4. Para executar o frontend como um contêiner, use o Dockerfile raiz.

Habilite as respostas sugeridas na IU do bate-papo

A interface de bate-papo gera respostas sugeridas por meio de um microsserviço de assistente externo. Para habilitar esse recurso, configure e execute o Microsserviço do assistente antes de iniciar a demonstração. Sem esse serviço, o aplicativo carrega, mas não gera respostas sugeridas.

5
  1. Inicie todos os três serviços em terminais separados e, em seguida, abra o aplicativo em http://localhost:8080.

  2. A API de backend permanece disponível em http://localhost:8000.

  3. Siga o Guia do usuário para obter instruções completas sobre como navegar no aplicativo.

Estabeleça confiança no comércio agentic. Supere a crise de confiança ancorando as transações de IA em provas determinísticas e não repudiáveis da intenção do cliente:

  • Garanta a imutabilidade da transação: Force regras somente de acréscimo no seu serviço de Mandate Ledger para criar um registro para auditar à prova de adulterções.

  • Preservar assinaturas criptográficas: use o document model do MongoDB para armazenar nativamente mandatos JSON profundamente aninhados exatamente como os agentes os geram.

  • Controlar o acesso do agente: implementar o controle de acesso baseado em função para garantir que os agentes de IA executem apenas ações autorizadas com base em suas funções específicas.

  • Evitar cobranças duplicadas: Forçar chaves de idempotência na camada de serviço para lidar com segurança com novas tentativas de rede sem cobrar o cliente duas vezes.

  • Angelica Guemes, MongoDB

  • Florencia Arin, MongoDB

  • Sakshi Garg, MongoDB

  • Genevive Broadhead, MongoDB

  • Antonio Membrides, MongoDB

  • Daniel Jamir, MongoDB