

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Tutorial: criar um fluxo que processe pedidos de hipoteca
<a name="getting-started-mortgage-flow"></a>

Para nos familiarizarmos com os recursos do Amazon Bedrock e suas capacidades, usaremos um CloudFormation modelo para configurar um [fluxo](flows.md) que automatiza os processos do processo de solicitação de hipoteca combinando vários recursos do Amazon Bedrock e outros. AWS 

**nota**  
Para este tutorial, usaremos a *us-east-1* Região. Você pode usar qualquer região que permita o uso de agentes, fluxos, barreiras de proteção, bases de conhecimento e gerenciamento de prompts. Para ver uma tabela recursos compatíveis por região, consulte [Suporte de recursos do Região da AWS Amazon Bedrock](features-regions.md). Você deve ter permissões para criar recursos do Amazon S3, Amazon Bedrock, Lambda e DynamoDB na região que você usa.

Esse fluxo não se destina a implantações. Ele deve ser usado como um tutorial para entender os recursos do Amazon Bedrock. A seguinte imagem é uma representação visual do fluxo no Console de gerenciamento da AWS:

![\[Fluxo de processamento de hipotecas\]](http://docs.aws.amazon.com/pt_br/bedrock/latest/userguide/images/cloudformation/mortgage-processing-flow.png)


O fluxo combina um [agente](agents.md) do Amazon Bedrock, [prompts](prompt-management.md) e uma [função do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) para criar um fluxo de processamento de hipotecas que coleta informações financeiras do cliente e examina se o cliente se qualifica para um empréstimo. Uma [base de conhecimento](knowledge-base.md) e uma [barreira de proteção](guardrails.md) do Amazon Bedrock também estão conectadas ao agente do fluxo para aumentar as respostas e oferecer proteções. Para ter mais informações sobre os componentes do fluxo, consulte [Detalhes sobre o fluxo de processamento de hipotecas](getting-started-mortgage-flow-details.md).

**Topics**
+ [

## Pré-requisitos
](#getting-started-mortgage-flow-prereqs)
+ [

## Crie o fluxo de processamento de hipotecas usando CloudFormation
](#getting-started-mortgage-flow-create)
+ [

## Testar o fluxo de processamento de hipotecas
](#getting-started-mortgage-flow-test)
+ [

## Limpar: exclusão de recursos
](#getting-started-mortgage-flow-delete)
+ [

# CloudFormation modelos
](getting-started-mortgage-flow-template.md)
+ [

# Detalhes sobre o fluxo de processamento de hipotecas
](getting-started-mortgage-flow-details.md)

## Pré-requisitos
<a name="getting-started-mortgage-flow-prereqs"></a>

Para criar esse fluxo, você baixará um arquivo .zip e seguirá as instruções para executar um script que configurará os recursos e o modelo para você.

**Importante**  
Enquanto você não excluir os recursos da Amazon que você criar, você receberá cobranças por eles.

Em seguida, atenda aos seguintes pré-requisitos:

1. Faça o download do [cloudformation-mortgage-flow-setuparquivo.zip](samples/cloudformation-mortgage-flow-setup.zip).

1. Descompacte o arquivo. Você pode saber mais sobre o conteúdo em [CloudFormation modelos](getting-started-mortgage-flow-template.md).

1. Solicite acesso aos modelos de base do Amazon Bedrock fazendo o seguinte:

   1. Faça login no Console de gerenciamento da AWS com uma identidade do IAM que tenha permissões para usar o console Amazon Bedrock. Em seguida, abra o console Amazon Bedrock em [https://console.aws.amazon.com/bedrock.](https://console.aws.amazon.com/bedrock)

   1. Verifique no canto superior direito se você está na região **Leste dos EUA (Norte da Virgínia)**. Se não estiver, mude de região.

   1. Selecione **Acesso ao modelo** na parte inferior do painel de navegação à esquerda.

   1. Escolha **Modificar acesso ao modelo**.

   1. Execute um destes procedimentos:
      + Para solicitar acesso a todos os modelos, escolha **Habilitar todos os modelos**. Na página para a qual você é direcionado, as caixas de seleção ao lado de todos os modelos estarão preenchidas.
      + Para solicitar acesso a modelos específicos, escolha **Habilitar modelos específicos**. Na página que é aberta, você tem as seguintes opções:
        + Para solicitar acesso a todos os modelos por um provedor, marque a caixa de seleção ao lado do nome do provedor.
        + Para solicitar acesso a um modelo, marque a caixa de seleção ao lado do nome do modelo.

   1. Para os tutoriais a seguir, você deve solicitar no mínimo o acesso aos modelos **Titan Embeddings G1 - Text** e **Claude 3 Haiku**. Escolha **Próximo**.

   1. Analise os modelos aos quais você está solicitando acesso e os **Termos**. Quando tudo estiver pronto, escolha **Enviar** para solicitar acesso.

## Crie o fluxo de processamento de hipotecas usando CloudFormation
<a name="getting-started-mortgage-flow-create"></a>

Para criar o fluxo de processamento de hipotecas e seus recursos associados, criaremos um CloudFormation modelo e o usaremos para criar uma pilha contendo recursos do Amazon Bedrock.

**Importante**  
Enquanto você não excluir os recursos da Amazon que você criar, você receberá cobranças por eles.

### Crie os recursos e o arquivo CloudFormation de modelo
<a name="getting-started-mortgage-flow-file"></a>

Primeiro, use o script do arquivo.zip para carregar os recursos em um bucket do S3 e criar os CloudFormation modelos.

1. Em um terminal, execute o comando a seguir para copiar os recursos em um bucket do Amazon S3 e preencher os arquivos `main-stack.yaml` e `main-stack.json` com o nome do bucket do S3 como valor padrão para o parâmetro do nome do bucket.

   ```
   bash deploy.sh
   ```
**nota**  
O uso do script é`bash deploy.sh <region> <bucket-name>`, onde *<region>* e *<bucket-name>* são argumentos opcionais. Se você não os fornecer, os seguintes valores padrão serão usados:  
*<region>*— A AWS região padrão especificada na configuração de suas AWS credenciais.
*<bucket-name>*— O bucket será nomeado*mortgage-flow-deployment-<AccountId>-<Region>*, onde *<AccountId>* está o ID AWS da sua conta e *<Region>* corresponde ao valor fornecido ou à AWS região padrão especificada na configuração de suas AWS credenciais.

1. Confirme os prompts. Depois que você concluir a implantação, deverá ter um modelo `main-stack.yaml` e `main-stack.json` completos para a próxima etapa.

**nota**  
Se o script falhar, você poderá preparar manualmente os recursos fazendo o seguinte:  
Faça upload do *conteúdo* (não inclua a pasta em si) da `cloudformation-mortgage-flow-setup` pasta descompactada em um bucket do S3 no Leste dos EUA (Norte da Virgínia) no console do Amazon S3 em. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)
Encontre o arquivo `templates/json/main-stack-tmp.yaml` ou `templates/json/main-stack-tmp.json` e faça o seguinte:  
Altere o `Default` valor do `Q01pS3BucketName` parâmetro de *MortgageFlowBucket* para o nome do bucket do S3.
Remova `-tmp` do nome do arquivo, de forma que ele se torne `templates/json/main-stack.yaml` ou`templates/json/main-stack.json`.

### Crie a pilha usando o console CloudFormation
<a name="getting-started-mortgage-flow-stack"></a>

Em seguida, use o modelo que você salvou para provisionar uma CloudFormation pilha.

1. Abra o CloudFormation console em [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/). Verifique no canto superior direito se você está na região **Leste dos EUA (Norte da Virgínia)**. Se não estiver, mude de região.

1. Na página **Pilhas**, no menu **Criar pilha**, escolha **com novos recursos (padrão)**.

1. Especifique o modelo:

   1. Em **Pré-requisito**, escolha **Escolher um modelo existente**.

   1. Em **Especificar modelo**, escolha **Fazer upload de um arquivo de modelo**.

   1. Selecione **Escolher arquivo**, navegue até `main-stack.yaml` ou o modelo `main-stack.json` e selecione-o.

   1. Escolha **Próximo**.

1. Especifique os detalhes da pilha:

   1. No campo **Nome da pilha**, insira um nome para a pilha.

   1. No campo **Parâmetros**, mantenha os valores padrão.
**nota**  
O valor `Q01pS3BucketName` deve corresponder ao nome do bucket do S3 no qual você fez upload dos recursos para esse modelo. Os argumentos restantes estão relacionados às configurações da base de conhecimento. Se você modificar qualquer um deles, verifique se as configurações são compatíveis umas com as outras. Para obter mais informações, consulte [Pré-requisitos para usar o armazenamento de vetores que você criou para uma base de conhecimento](knowledge-base-setup.md).

   1. Escolha **Próximo**.

1. Configurar as opções da pilha:

   1. Em **Opções de falha de pilha**, escolha **Excluir todos os recursos recém-criados**.
**nota**  
A escolha dessa opção evita que você seja cobrado por recursos cuja política de exclusão especifica que eles sejam retidos mesmo que a criação da pilha falhe. Para ter mais informações, consulte [Atributo `DeletionPolicy`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html) no *Guia do usuário do CloudFormation *.

   1. Em **Capacidades**, marque a caixa para reconhecer que isso CloudFormation pode criar recursos do IAM em sua conta.

   1. Escolha **Próximo**.

1. Revise os detalhes da pilha e escolha **Enviar**. CloudFormation cria a pilha. A criação levará alguns minutos. Ao concluir a criação da pilha, você pode usar a guia **Recursos** na página de detalhes da pilha para visualizar os recursos que foram provisionados em sua conta.

1. Assim que a criação da pilha for concluída, faça o seguinte para sincronizar a fonte de dados da base de conhecimento para que a base de conhecimento possa ser consultada:

   1. Faça login no Console de gerenciamento da AWS com uma identidade do IAM que tenha permissões para usar o console Amazon Bedrock. Em seguida, abra o console Amazon Bedrock em [https://console.aws.amazon.com/bedrock.](https://console.aws.amazon.com/bedrock)

   1. No painel de navegação à esquerda, escolha **Bases de conhecimento** e selecione a base de conhecimento que você criou, chamada `AWSDocsTutorial-MortgageKB`.

   1. Na seção **Fonte de dados**, selecione a caixa de seleção ao lado da fonte de dados que foi criada, chamada `AWSDocsTutorial-MortgageKB-DS`.

   1. Escolha **Sincronizar**. Assim que a sincronização for concluída, você poderá testar o fluxo.

## Testar o fluxo de processamento de hipotecas
<a name="getting-started-mortgage-flow-test"></a>

Depois que o fluxo de processamento da hipoteca for criado, você poderá usar o console do Amazon Bedrock para examinar, testar e modificar o fluxo. Também é possível examinar, testar e modificar os recursos individuais no fluxo.

**Como testar o fluxo**

1. Faça login no Console de gerenciamento da AWS com uma identidade do IAM que tenha permissões para usar o console Amazon Bedrock. Em seguida, abra o console Amazon Bedrock em [https://console.aws.amazon.com/bedrock.](https://console.aws.amazon.com/bedrock)

1. No painel de navegação à esquerda, escolha **Fluxos**. Verifique no canto superior direito se você está na região **Leste dos EUA (Norte da Virgínia)**. Se não estiver, mude de região.

1. Na seção **Fluxos**, selecione o fluxo que foi criado a partir do CloudFormation modelo. Deveria ser `AWSDocsTutorial-MortgageFlow`.

1. Escolha **Editar no construtor de fluxo**. Você pode arrastar nós individuais no fluxo para modificar a representação visual do fluxo.

1. No painel **Testar fluxo**, insira o seguinte no campo de texto e selecione **Executar**:

   ```
   {
       "income": 80000, 
       "totalDebt": 5000, 
       "loanTerm": 30, 
       "loanAmount": 600000, 
       "creditScore": 750, 
       "mlsId": "MLS-5678"
   }
   ```

   Como o valor do empréstimo é maior do que o empréstimo máximo viável calculado, o prompt **incomeDebt** é acionado e o fluxo gera uma carta de rejeição. Você pode escolher **Mostrar rastreamento** para ver os nós que foram executados no fluxo.

1. Novamente, no painel **Testar fluxo**, insira o seguinte no campo de texto e selecione **Executar**:

   ```
   {
       "income": 120000, 
       "totalDebt": 5000, 
       "loanTerm": 30, 
       "loanAmount": 200000, 
       "creditScore": 650, 
       "mlsId": "MLS-3456"
   }
   ```

   Como o valor do empréstimo é menor do que o empréstimo acessível máximo calculado, o prompt **ProcessApplication** é acionado e enviado para o **mortgageProcessingAgent**, que consulta a base de conhecimento anexa e gera uma resposta que avalia, com base nos valores de entrada, se o cliente se qualifica para um empréstimo.

1. (Opcional) Tente executar o fluxo usando valores diferentes para os campos no objeto JSON. Os valores de `mlsId` correspondem às propriedades listadas no Multiple Listing Service. Você pode encontrar valores `mlsId` válidos fazendo o seguinte:

   1. Faça login no Console de gerenciamento da AWS e abra o console do DynamoDB em. [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)

   1. No painel de navegação à esquerda, selecione **Tabelas**.

   1. Selecione a tabela que diz **AWSDocsTutorial-PropertyListing**.

   1. Escolha **Explore table items** (Explorar itens da tabela).

   1. Você pode usar qualquer um dos valores na coluna **mls\$1id** na entrada do fluxo.

Você também pode navegar até as páginas de **gerenciamento de **Agentes**, **Bases de Conhecimento**, **Guardrails** e Prompt** no Console de gerenciamento da AWS para examinar cada recurso do Amazon Bedrock usado no fluxo, de forma independente. Para saber mais sobre o fluxo e entender mais detalhadamente os componentes, consulte [Detalhes sobre o fluxo de processamento de hipotecas](getting-started-mortgage-flow-details.md).

## Limpar: exclusão de recursos
<a name="getting-started-mortgage-flow-delete"></a>

Depois que você explorar os recursos e entender melhor as capacidades dos diferentes recursos do Amazon Bedrock, excluiremos a pilha e os recursos que ela contém.

**Importante**  
Enquanto você não excluir os recursos da Amazon que você criar, você receberá cobranças por eles.

1. Abra o [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. No painel de navegação à esquerda, escolha **Pilhas**.

1. Escolha a pilha que você criou com base no modelo. Escolha **Excluir** e, para confirmar, selecione **Excluir**.

   CloudFormation inicia a exclusão da pilha principal, de todas as pilhas aninhadas e de todos os recursos incluídos nas pilhas.

# CloudFormation modelos
<a name="getting-started-mortgage-flow-template"></a>

O arquivo `cloudformation-mortgage-flow-setup.zip` que você baixou contém os seguintes arquivos:
+ `deploy.sh`— Um script de shell que implanta seus recursos e prepara o CloudFormation modelo principal que você usará.
+ `artifacts`: uma pasta que contém arquivos .zip com funções para o agente e os modelos da base de conhecimento:
  + Funções do Lambda para os grupos de ação do agente
    + `agent_loan_calculator.zip`
    + `mls_lookup.zip`
    + `loader_deployment_package.zip`
  + Funções para configurar a base de conhecimento
    + `custom-resource-lambda.zip`
    + `opensearchpy-layer.zip`
    + `provider-event-handler.zip`
+ `api-schema`: uma pasta que contém esquemas de API para grupos de ação.
+ `knowledge-base-data-source`: uma pasta que contém o PDF do [Selling Guide](https://selling-guide.fanniemae.com/) da Fannie Mae.
+ `templates`: uma pasta que contém os modelos dos recursos desse fluxo, nos formatos JSON e YAML:
  + `main-stack-tmp`: o modelo principal que implanta os modelos restantes como pilhas aninhadas. Esse arquivo é transformado em `main-stack` após a execução do script de implantação.
  + `guardrails-template`: o modelo para a barreira de proteção a ser associada ao agente.
  + `prompts-template`: o modelo para os prompts a serem usados no fluxo.
  + `kb-role-template`— O modelo para a função da base de conhecimento, a ser usado tanto pelo OpenSearch modelo quanto pelo modelo da base de conhecimento.
  + `oss-infra-template`— O modelo para o armazenamento vetorial Amazon OpenSearch Serverless a ser usado para a base de conhecimento.
  + `kb-infra-template`: o modelo para a base de conhecimento de empréstimo hipotecário a ser associada ao agente.
  + `agent-template`: o modelo para o agente de processamento de hipotecas a ser usado no fluxo.
  + `mortgage-flow-template`: o modelo para o fluxo de processamento de hipotecas que combina todos os recursos.
+ `README.md`: um arquivo README que descreve as etapas para usar o modelo.

Os tópicos a seguir mostram os CloudFormation modelos usados para cada pilha. A pilha principal implanta as pilhas restantes como [pilhas aninhadas](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html).

**Topics**
+ [

## Pilha principal
](#getting-started-mortgage-templates-main)
+ [

## Pilha de Barreiras de proteção do Amazon Bedrock
](#getting-started-mortgage-guardrail-templates)
+ [

## Pilha de Gerenciamento de Prompts do Amazon Bedrock
](#getting-started-mortgage-prompts-templates)
+ [

## Pilha de Bases de Conhecimento do Amazon Bedrock
](#getting-started-mortgage-kb-templates)

## Pilha principal
<a name="getting-started-mortgage-templates-main"></a>

A pilha principal define os parâmetros que você pode especificar ao fazer upload do modelo. Esses valores são transmitidos para cada uma das pilhas aninhadas restantes. O script de implantação substitui *MortgageFlowBucket* o valor padrão do `Q01pS3BucketName` parâmetro pelo bucket real do S3 que contém os recursos implantados pelo script.

------
#### [ YAML ]

```
AWSTemplateFormatVersion: '2010-09-09'
Description: "[AWSDocs] AmazonBedrockDocs: getting-started-mortgage-flow"

Parameters:
  Q01pS3BucketName:
    Type: String
    Description: Provide existing S3 bucket name where data is already stored
    Default: MortgageFlowBucket
  Q02pFlowName:
    Type: String
    Description: Name for the flow
    Default: MortgageFlow
  Q03pGuardrailName:
    Type: String
    Description: Name for guardrail to attach to agent
    Default: MortgageGR
  Q04pKnowledgeBaseName:
    Type: String
    Description: Name for knowledge base to associate with agent
    Default: MortgageKB
  Q05pAgentName:
    Type: String
    Description: Name for agent to create
    Default: MortgageAgent
  Q06pKBEmbedModel:
    Type: String
    Description: Select Embedding model
    Default: amazon.titan-embed-text-v1
  Q07pKBChunkingStrategy:
    Type: String
    Description: Select Chunking strategy
    AllowedValues:
      - Default chunking
      - Fixed-size chunking
      - No chunking
    Default: Default chunking
  Q08pKBMaxTokens:
    Type: Number
    Description: Maximum number of tokens in a chunk
    Default: 300
  Q09pKBOverlapPercentage:
    Type: Number
    Description: Percent overlap in each chunk
    Default: 20
  Q10pKBVectorStore:
    Type: String
    Description: Select vector store
    AllowedValues:
    - Open-Search-Serverless
    Default: Open-Search-Serverless
  Q11pOSSCollectionName:
    Type: String
    Description: Name of the Collection
    MinLength: 1
    MaxLength: 63
    Default: mortgage-kb-collection
    AllowedPattern: ^[a-z0-9](-*[a-z0-9])*
    ConstraintDescription: Must be lowercase or numbers with a length of 1-32 characters
  Q12pOSSIndexName:
    Type: String
    Description: Index name to be created in vector store
    MinLength: 1
    MaxLength: 63
    Default: mortgage-kb-index
    AllowedPattern: ^[a-z0-9](-*[a-z0-9])*
    ConstraintDescription: Must be lowercase or numbers with a length of 1-63 characters
  # Q13pVectorFieldName:
  #   Type: String
  #   Description: Vector field name
  #   Default: bedrock-knowledge-base-default-vector
  # Q14pMetaDataFieldName:
  #   Type: String
  #   Description: Metadata field name
  #   Default: AMAZON_BEDROCK_METADATA
  # Q15pTextFieldName:
  #   Type: String
  #   Description: Text field name
  #   Default: AMAZON_BEDROCK_TEXT_CHUNK
Resources:
  KBRoleStack:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: !Sub https://${Q01pS3BucketName}.s3.amazonaws.com/templates/yaml/kb-role-template.yaml
      TimeoutInMinutes: 15
      Parameters:
        Q01pS3BucketName:
          Ref: Q01pS3BucketName
  OSSStack:
    Type: AWS::CloudFormation::Stack
    DependsOn: KBRoleStack
    Properties:
      TemplateURL: !Sub https://${Q01pS3BucketName}.s3.amazonaws.com/templates/yaml/oss-infra-template.yaml
      TimeoutInMinutes: 15
      Parameters:
        Q01pS3BucketName:
          Ref: Q01pS3BucketName
        Q06pKBEmbedModel:
          Ref: Q06pKBEmbedModel
        Q11pOSSCollectionName:
          Ref: Q11pOSSCollectionName
        Q12pOSSIndexName:
          Ref: Q12pOSSIndexName
        pKBRole:
          Fn::GetAtt:
          - KBRoleStack
          - Outputs.KBRole
        pKBRoleArn:
          Fn::GetAtt:
          - KBRoleStack
          - Outputs.KBRoleArn
  KBStack:
    Type: AWS::CloudFormation::Stack
    DependsOn: OSSStack
    Properties:
      TemplateURL: !Sub https://${Q01pS3BucketName}.s3.amazonaws.com/templates/yaml/kb-infra-template.yaml
      TimeoutInMinutes: 15
      Parameters:
        KnowledgeBaseName:
          Ref: Q04pKnowledgeBaseName
        Q01pS3BucketName:
          Ref: Q01pS3BucketName
        Q06pKBEmbedModel:
          Ref: Q06pKBEmbedModel
        Q07pKBChunkingStrategy:
          Ref: Q07pKBChunkingStrategy
        Q08pKBMaxTokens:
          Ref: Q08pKBMaxTokens
        Q09pKBOverlapPercentage:
          Ref: Q09pKBOverlapPercentage
        Q11pOSSCollectionName:
          Ref: Q11pOSSCollectionName
        Q12pOSSIndexName:
          Ref: Q12pOSSIndexName
        # Q13pVectorFieldName:
        #   Ref: Q13pVectorFieldName
        # Q14pMetaDataFieldName:
        #   Ref: Q14pMetaDataFieldName
        # Q15pTextFieldName:
        #   Ref: Q15pTextFieldName
        pCollectionArn:
          Fn::GetAtt:
          - OSSStack
          - Outputs.CollectionArn
        pKBRoleArn:
          Fn::GetAtt:
          - KBRoleStack
          - Outputs.KBRoleArn
        pKBRole:
          Fn::GetAtt:
          - KBRoleStack
          - Outputs.KBRole
  GRStack:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: !Sub https://${Q01pS3BucketName}.s3.amazonaws.com/templates/yaml/guardrails-template.yaml
      TimeoutInMinutes: 15
      Parameters:
        GuardrailName:
          Ref: Q03pGuardrailName
  AgentStack:
    Type: AWS::CloudFormation::Stack
    DependsOn: 
      - KBStack
      - GRStack
    Properties:
      TemplateURL: !Sub https://${Q01pS3BucketName}.s3.amazonaws.com/templates/yaml/agent-template.yaml
      TimeoutInMinutes: 15
      Parameters:
        Q01pS3BucketName:
          Ref: Q01pS3BucketName
        KnowledgeBaseId:
          Fn::GetAtt:
          - KBStack
          - Outputs.KBId
        GuardrailArn:
          Fn::GetAtt:
          - GRStack
          - Outputs.GuardrailArn
        GuardrailVersion:
          Fn::GetAtt:
          - GRStack
          - Outputs.GuardrailVersion
  PromptsStack:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: !Sub https://${Q01pS3BucketName}.s3.amazonaws.com/templates/yaml/prompts-template.yaml
      TimeoutInMinutes: 15
  FlowStack:
    Type: AWS::CloudFormation::Stack
    DependsOn: 
      - AgentStack
      - PromptsStack
    Properties:
      TemplateURL: !Sub https://${Q01pS3BucketName}.s3.amazonaws.com/templates/yaml/mortgage-flow-template.yaml
      TimeoutInMinutes: 15
      Parameters:
        FlowName:
          Ref: Q02pFlowName
        Q01pS3BucketName:
          Ref: Q01pS3BucketName
        ProcessApplicationPromptArn:
          Fn::GetAtt:
          - PromptsStack
          - Outputs.ProcessApplicationPromptArn
        RejectionPromptArn:
          Fn::GetAtt:
          - PromptsStack
          - Outputs.RejectionPromptArn
        AgentId:
          Fn::GetAtt:
          - AgentStack
          - Outputs.AgentId
```

------
#### [ JSON ]

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "[AWSDocs] AmazonBedrockDocs: getting-started-mortgage-flow",
  "Parameters": {
    "Q01pS3BucketName": {
      "Type": "String",
      "Description": "Provide existing S3 bucket name where data is already stored",
      "Default": "MortgageFlowBucket"
    },
    "Q02pFlowName": {
      "Type": "String",
      "Description": "Name for the flow",
      "Default": "MortgageFlow"
    },
    "Q03pGuardrailName": {
      "Type": "String",
      "Description": "Name for guardrail to attach to agent",
      "Default": "MortgageGR"
    },
    "Q04pKnowledgeBaseName": {
      "Type": "String",
      "Description": "Name for knowledge base to associate with agent",
      "Default": "MortgageKB"
    },
    "Q05pAgentName": {
      "Type": "String",
      "Description": "Name for agent to create",
      "Default": "MortgageAgent"
    },
    "Q06pKBEmbedModel": {
      "Type": "String",
      "Description": "Select Embedding model",
      "Default": "amazon.titan-embed-text-v1"
    },
    "Q07pKBChunkingStrategy": {
      "Type": "String",
      "Description": "Select Chunking strategy",
      "AllowedValues": [
        "Default chunking",
        "Fixed-size chunking",
        "No chunking"
      ],
      "Default": "Default chunking"
    },
    "Q08pKBMaxTokens": {
      "Type": "Number",
      "Description": "Maximum number of tokens in a chunk",
      "Default": 300
    },
    "Q09pKBOverlapPercentage": {
      "Type": "Number",
      "Description": "Percent overlap in each chunk",
      "Default": 20
    },
    "Q10pKBVectorStore": {
      "Type": "String",
      "Description": "Select vector store",
      "AllowedValues": [
        "Open-Search-Serverless"
      ],
      "Default": "Open-Search-Serverless"
    },
    "Q11pOSSCollectionName": {
      "Type": "String",
      "Description": "Name of the Collection",
      "MinLength": 1,
      "MaxLength": 63,
      "Default": "mortgage-kb-collection",
      "AllowedPattern": "^[a-z0-9](-*[a-z0-9])*",
      "ConstraintDescription": "Must be lowercase or numbers with a length of 1-32 characters"
    },
    "Q12pOSSIndexName": {
      "Type": "String",
      "Description": "Index name to be created in vector store",
      "MinLength": 1,
      "MaxLength": 63,
      "Default": "mortgage-kb-index",
      "AllowedPattern": "^[a-z0-9](-*[a-z0-9])*",
      "ConstraintDescription": "Must be lowercase or numbers with a length of 1-63 characters"
    }
  },
  "Resources": {
    "KBRoleStack": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "TemplateURL": {
          "Fn::Sub": "https://${Q01pS3BucketName}.s3.amazonaws.com/templates/json/kb-role-template.json"
        },
        "TimeoutInMinutes": 15,
        "Parameters": {
          "Q01pS3BucketName": {
            "Ref": "Q01pS3BucketName"
          }
        }
      }
    },
    "OSSStack": {
      "Type": "AWS::CloudFormation::Stack",
      "DependsOn": "KBRoleStack",
      "Properties": {
        "TemplateURL": {
          "Fn::Sub": "https://${Q01pS3BucketName}.s3.amazonaws.com/templates/json/oss-infra-template.json"
        },
        "TimeoutInMinutes": 15,
        "Parameters": {
          "Q01pS3BucketName": {
            "Ref": "Q01pS3BucketName"
          },
          "Q06pKBEmbedModel": {
            "Ref": "Q06pKBEmbedModel"
          },
          "Q11pOSSCollectionName": {
            "Ref": "Q11pOSSCollectionName"
          },
          "Q12pOSSIndexName": {
            "Ref": "Q12pOSSIndexName"
          },
          "pKBRole": {
            "Fn::GetAtt": [
              "KBRoleStack",
              "Outputs.KBRole"
            ]
          },
          "pKBRoleArn": {
            "Fn::GetAtt": [
              "KBRoleStack",
              "Outputs.KBRoleArn"
            ]
          }
        }
      }
    },
    "KBStack": {
      "Type": "AWS::CloudFormation::Stack",
      "DependsOn": "OSSStack",
      "Properties": {
        "TemplateURL": {
          "Fn::Sub": "https://${Q01pS3BucketName}.s3.amazonaws.com/templates/json/kb-infra-template.json"
        },
        "TimeoutInMinutes": 15,
        "Parameters": {
          "KnowledgeBaseName": {
            "Ref": "Q04pKnowledgeBaseName"
          },
          "Q01pS3BucketName": {
            "Ref": "Q01pS3BucketName"
          },
          "Q06pKBEmbedModel": {
            "Ref": "Q06pKBEmbedModel"
          },
          "Q07pKBChunkingStrategy": {
            "Ref": "Q07pKBChunkingStrategy"
          },
          "Q08pKBMaxTokens": {
            "Ref": "Q08pKBMaxTokens"
          },
          "Q09pKBOverlapPercentage": {
            "Ref": "Q09pKBOverlapPercentage"
          },
          "Q11pOSSCollectionName": {
            "Ref": "Q11pOSSCollectionName"
          },
          "Q12pOSSIndexName": {
            "Ref": "Q12pOSSIndexName"
          },
          "pCollectionArn": {
            "Fn::GetAtt": [
              "OSSStack",
              "Outputs.CollectionArn"
            ]
          },
          "pKBRoleArn": {
            "Fn::GetAtt": [
              "KBRoleStack",
              "Outputs.KBRoleArn"
            ]
          },
          "pKBRole": {
            "Fn::GetAtt": [
              "KBRoleStack",
              "Outputs.KBRole"
            ]
          }
        }
      }
    },
    "GRStack": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "TemplateURL": {
          "Fn::Sub": "https://${Q01pS3BucketName}.s3.amazonaws.com/templates/json/guardrails-template.json"
        },
        "TimeoutInMinutes": 15,
        "Parameters": {
          "GuardrailName": {
            "Ref": "Q03pGuardrailName"
          }
        }
      }
    },
    "AgentStack": {
      "Type": "AWS::CloudFormation::Stack",
      "DependsOn": [
        "KBStack",
        "GRStack"
      ],
      "Properties": {
        "TemplateURL": {
          "Fn::Sub": "https://${Q01pS3BucketName}.s3.amazonaws.com/templates/json/agent-template.json"
        },
        "TimeoutInMinutes": 15,
        "Parameters": {
          "Q01pS3BucketName": {
            "Ref": "Q01pS3BucketName"
          },
          "KnowledgeBaseId": {
            "Fn::GetAtt": [
              "KBStack",
              "Outputs.KBId"
            ]
          },
          "GuardrailArn": {
            "Fn::GetAtt": [
              "GRStack",
              "Outputs.GuardrailArn"
            ]
          },
          "GuardrailVersion": {
            "Fn::GetAtt": [
              "GRStack",
              "Outputs.GuardrailVersion"
            ]
          }
        }
      }
    },
    "PromptsStack": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "TemplateURL": {
          "Fn::Sub": "https://${Q01pS3BucketName}.s3.amazonaws.com/templates/json/prompts-template.json"
        },
        "TimeoutInMinutes": 15
      }
    },
    "FlowStack": {
      "Type": "AWS::CloudFormation::Stack",
      "DependsOn": [
        "AgentStack",
        "PromptsStack"
      ],
      "Properties": {
        "TemplateURL": {
          "Fn::Sub": "https://${Q01pS3BucketName}.s3.amazonaws.com/templates/json/mortgage-flow-template.json"
        },
        "TimeoutInMinutes": 15,
        "Parameters": {
          "FlowName": {
            "Ref": "Q02pFlowName"
          },
          "Q01pS3BucketName": {
            "Ref": "Q01pS3BucketName"
          },
          "ProcessApplicationPromptArn": {
            "Fn::GetAtt": [
              "PromptsStack",
              "Outputs.ProcessApplicationPromptArn"
            ]
          },
          "RejectionPromptArn": {
            "Fn::GetAtt": [
              "PromptsStack",
              "Outputs.RejectionPromptArn"
            ]
          },
          "AgentId": {
            "Fn::GetAtt": [
              "AgentStack",
              "Outputs.AgentId"
            ]
          }
        }
      }
    }
  }
}
```

------

## Pilha de Barreiras de proteção do Amazon Bedrock
<a name="getting-started-mortgage-guardrail-templates"></a>

Essa pilha cria os seguintes recursos relacionados às [barreiras de proteção](guardrails.md):
+ AgentGuardrail ([AWS::Bedrock::Guardrail](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide                         /aws-resource-bedrock-guardrail.html)) — Uma grade de proteção que fornece filtragem de conteúdo, política de tópicos e proteção de PII. Essa barreira de proteção será conectada ao agente na pilha de agentes.
+ AgentGuardrailVersion ([AWS::Bedrock::GuardrailVersion](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide                         /aws-resource-bedrock-guardrailversion.html)) — A versão do `AgentGuardrail` recurso aplicada ao agente.

------
#### [ YAML ]

```
AWSTemplateFormatVersion: "2010-09-09"
Description: "[AWSDocs] AmazonBedrockDocs: getting-started-mortgage-flow"

Parameters:
  GuardrailName:
    Type: String
    Description: Name for guardrail
    Default: MortgageGuardrail

Resources:
  AgentGuardrail:
    Type: AWS::Bedrock::Guardrail
    Properties:
      Name: !Sub AWSDocsTutorial-${GuardrailName}
      Description: Guardrail for mortgage processing with investment advice blocking, content filtering, and PII protection
      BlockedInputMessaging: "Sorry, the model cannot answer this question."
      BlockedOutputsMessaging: "Sorry, the model cannot answer this question."
      TopicPolicyConfig:
        TopicsConfig:
          - Name: InvestmentAdvice
            Definition: "Investment advice refers to inquires, guidance or recommendations regarding the management or allocation of fund or asset with the goal of generating returns or achieving specific financial objectives"
            Examples:
              - "Is investing in the stocks better than bonds?"
              - "Should I invest in gold?"
            Type: DENY
      ContentPolicyConfig:
        FiltersConfig:
          - Type: VIOLENCE
            InputStrength: HIGH
            OutputStrength: HIGH
          - Type: PROMPT_ATTACK
            InputStrength: HIGH
            OutputStrength: NONE
          - Type: MISCONDUCT
            InputStrength: HIGH
            OutputStrength: HIGH
          - Type: HATE
            InputStrength: HIGH
            OutputStrength: HIGH
          - Type: SEXUAL
            InputStrength: HIGH
            OutputStrength: HIGH
          - Type: INSULTS
            InputStrength: HIGH
            OutputStrength: HIGH
      WordPolicyConfig:
        WordsConfig:
          - Text: "crypto currency"
          - Text: "bitcoin"
        ManagedWordListsConfig:
          - Type: PROFANITY
      SensitiveInformationPolicyConfig:
        PiiEntitiesConfig:
          - Type: EMAIL
            Action: ANONYMIZE
          - Type: CREDIT_DEBIT_CARD_NUMBER
            Action: BLOCK
      ContextualGroundingPolicyConfig:
        FiltersConfig:
          - Type: GROUNDING
            Threshold: 0.85
          - Type: RELEVANCE
            Threshold: 0.5
            
  AgentGuardrailVersion:
    Type: AWS::Bedrock::GuardrailVersion
    Properties:
      GuardrailIdentifier: !Ref AgentGuardrail
      Description: Version 1 of the mortgage agent guardrail

Outputs:
  GuardrailArn:
    Value:
      Ref: AgentGuardrail
    Description: ARN of guardrail to associate with agent
  GuardrailVersion:
    Value:
      Fn::GetAtt:
      - AgentGuardrailVersion
      - Version
    Description: Version of guardrail to associate with agent
```

------
#### [ JSON ]

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "[AWSDocs] AmazonBedrockDocs: getting-started-mortgage-flow",
  "Parameters": {
    "GuardrailName": {
      "Type": "String",
      "Description": "Name for guardrail",
      "Default": "MortgageGuardrail"
    }
  },
  "Resources": {
    "AgentGuardrail": {
      "Type": "AWS::Bedrock::Guardrail",
      "Properties": {
        "Name": {
          "Fn::Sub": "AWSDocsTutorial-${GuardrailName}"
        },
        "Description": "Guardrail for mortgage processing with investment advice blocking, content filtering, and PII protection",
        "BlockedInputMessaging": "Sorry, the model cannot answer this question.",
        "BlockedOutputsMessaging": "Sorry, the model cannot answer this question.",
        "TopicPolicyConfig": {
          "TopicsConfig": [
            {
              "Name": "InvestmentAdvice",
              "Definition": "Investment advice refers to inquires, guidance or recommendations regarding the management or allocation of fund or asset with the goal of generating returns or achieving specific financial objectives",
              "Examples": [
                "Is investing in the stocks better than bonds?",
                "Should I invest in gold?"
              ],
              "Type": "DENY"
            }
          ]
        },
        "ContentPolicyConfig": {
          "FiltersConfig": [
            {
              "Type": "VIOLENCE",
              "InputStrength": "HIGH",
              "OutputStrength": "HIGH"
            },
            {
              "Type": "PROMPT_ATTACK",
              "InputStrength": "HIGH",
              "OutputStrength": "NONE"
            },
            {
              "Type": "MISCONDUCT",
              "InputStrength": "HIGH",
              "OutputStrength": "HIGH"
            },
            {
              "Type": "HATE",
              "InputStrength": "HIGH",
              "OutputStrength": "HIGH"
            },
            {
              "Type": "SEXUAL",
              "InputStrength": "HIGH",
              "OutputStrength": "HIGH"
            },
            {
              "Type": "INSULTS",
              "InputStrength": "HIGH",
              "OutputStrength": "HIGH"
            }
          ]
        },
        "WordPolicyConfig": {
          "WordsConfig": [
            {
              "Text": "crypto currency"
            },
            {
              "Text": "bitcoin"
            }
          ],
          "ManagedWordListsConfig": [
            {
              "Type": "PROFANITY"
            }
          ]
        },
        "SensitiveInformationPolicyConfig": {
          "PiiEntitiesConfig": [
            {
              "Type": "EMAIL",
              "Action": "ANONYMIZE"
            },
            {
              "Type": "CREDIT_DEBIT_CARD_NUMBER",
              "Action": "BLOCK"
            }
          ]
        },
        "ContextualGroundingPolicyConfig": {
          "FiltersConfig": [
            {
              "Type": "GROUNDING",
              "Threshold": 0.85
            },
            {
              "Type": "RELEVANCE",
              "Threshold": 0.5
            }
          ]
        }
      }
    },
    "AgentGuardrailVersion": {
      "Type": "AWS::Bedrock::GuardrailVersion",
      "Properties": {
        "GuardrailIdentifier": {
          "Ref": "AgentGuardrail"
        },
        "Description": "Version 1 of the mortgage agent guardrail"
      }
    }
  },
  "Outputs": {
    "GuardrailArn": {
      "Value": {
        "Ref": "AgentGuardrail"
      },
      "Description": "ARN of guardrail to associate with agent"
    },
    "GuardrailVersion": {
      "Value": {
        "Fn::GetAtt": [
          "AgentGuardrailVersion",
          "Version"
        ]
      },
      "Description": "Version of guardrail to associate with agent"
    }
  }
}
```

------

## Pilha de Gerenciamento de Prompts do Amazon Bedrock
<a name="getting-started-mortgage-prompts-templates"></a>

Essa pilha cria os seguintes recursos [prompt](prompt-management.md) ([AWS::IAM::Prompt](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide                     /aws-resource-bedrock-prompt.html)), que são adicionados ao fluxo:
+ RejectionPrompt — Uma solicitação que retorna uma carta de rejeição gerada com base em informações financeiras.
+ ProcessApplicationPrompt — Uma solicitação que envia as informações financeiras do cliente a um agente e solicita que o agente avalie se o cliente se qualifica para um empréstimo.

------
#### [ YAML ]

```
AWSTemplateFormatVersion: "2010-09-09"
Description: "[AWSDocs] AmazonBedrockDocs: getting-started-mortgage-flow"

Resources:
  RejectionPrompt:
    Type: AWS::Bedrock::Prompt
    Properties:
      Name: !Sub AWSDocsTutorial-RejectionPrompt
      Description: "Use this prompt to generate a rejection letter triggered by an unsatisfactory income to debt ratio"
      DefaultVariant: variantOne
      Variants:
        - Name: variantOne
          TemplateType: TEXT
          ModelId: anthropic.claude-3-haiku-20240307-v1:0
          TemplateConfiguration:
            Text:
              Text: |
                Write a mortgage loan rejection letter for a candiate with income {{income}}, totalDebt {{totalDebt}}, loanAmount {{loanAmount}}. 
                The reason for rejection is their income to debt ratio. 
                Do not mention any other reason. 
                Make the letter as concise as possible. 
                Treat all numeric inputs as whole numbers.
                Let the general structure be like the below:

                Dear [Applicant's Name],
                We appreciate your interest in obtaining a mortgage loan with our institution...
                The primary reason for this decision is that ...
                While we understand that this news may be disappointing, ...
                Thank you again for your interest, and we wish you the best in your future endeavors...

                Sincerely,
                [Your Institution's Name]
              InputVariables:
                - Name: income
                - Name: totalDebt
                - Name: loanAmount
          InferenceConfiguration:
            Text:
              MaxTokens: 2000
              Temperature: 0.0
              TopP: 0.999
              StopSequences:
                - "\n\nHuman:"
          AdditionalModelRequestFields:
            top_k: 250

  ProcessApplicationPrompt:
    Type: AWS::Bedrock::Prompt
    Properties:
      Name: !Sub AWSDocsTutorial-ProcessApplicationPrompt
      Description: "Use this prompt to generate a question for an agent to process the mortgage application"
      DefaultVariant: variantOne
      Variants:
        - Name: variantOne
          TemplateType: TEXT
          ModelId: anthropic.claude-3-haiku-20240307-v1:0
          TemplateConfiguration:
            Text:
              Text: |
                Generate a question asking if the user will qualify for a loan for the specified criteria. 

                Include instruction to base the answer on key features of the property retrieved from MLS listing. 

                Start with "will an applicant...".

                { "income": {{income}}, "creditScore": {{creditScore}}, "totalDebt": {{totalDebt}}, "loanAmount": {{loanAmount}}, "mlsId": {{mlsId}} }

                Include a second question on loan requirements an applicant with the below attributes should consider for a Fannie Mae backed loan (other than debt to income).
              InputVariables:
                - Name: income
                - Name: creditScore
                - Name: totalDebt
                - Name: loanAmount
                - Name: mlsId
          InferenceConfiguration:
            Text:
              MaxTokens: 2000
              Temperature: 0.0
              TopP: 0.999
              StopSequences:
                - "\n\nHuman:"
          AdditionalModelRequestFields:
            top_k: 250

Outputs:
  ProcessApplicationPromptArn:
    Value:
      Ref: ProcessApplicationPrompt
    Description: ARN of the prompt to process a mortgage application
  RejectionPromptArn:
    Value:
      Ref: RejectionPrompt
    Description: ARN of the prompt to reject a mortgage application
```

------
#### [ JSON ]

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "[AWSDocs] AmazonBedrockDocs: getting-started-mortgage-flow",
  "Resources": {
    "RejectionPrompt": {
      "Type": "AWS::Bedrock::Prompt",
      "Properties": {
        "Name": {
          "Fn::Sub": "AWSDocsTutorial-RejectionPrompt"
        },
        "Description": "Use this prompt to generate a rejection letter triggered by an unsatisfactory income to debt ratio",
        "DefaultVariant": "variantOne",
        "Variants": [
          {
            "Name": "variantOne",
            "TemplateType": "TEXT",
            "ModelId": "anthropic.claude-3-haiku-20240307-v1:0",
            "TemplateConfiguration": {
              "Text": {
                "Text": "Write a mortgage loan rejection letter for a candiate with income {{income}}, totalDebt {{totalDebt}}, loanAmount {{loanAmount}}. \nThe reason for rejection is their income to debt ratio. \nDo not mention any other reason. \nMake the letter as concise as possible. \nTreat all numeric inputs as whole numbers.\nLet the general structure be like the below:\n\nDear [Applicant's Name],\nWe appreciate your interest in obtaining a mortgage loan with our institution...\nThe primary reason for this decision is that ...\nWhile we understand that this news may be disappointing, ...\nThank you again for your interest, and we wish you the best in your future endeavors...\n\nSincerely,\n[Your Institution's Name]\n",
                "InputVariables": [
                  {
                    "Name": "income"
                  },
                  {
                    "Name": "totalDebt"
                  },
                  {
                    "Name": "loanAmount"
                  }
                ]
              }
            },
            "InferenceConfiguration": {
              "Text": {
                "MaxTokens": 2000,
                "Temperature": 0.0,
                "TopP": 0.999,
                "StopSequences": [
                  "\n\nHuman:"
                ]
              }
            },
            "AdditionalModelRequestFields": {
              "top_k": 250
            }
          }
        ]
      }
    },
    "ProcessApplicationPrompt": {
      "Type": "AWS::Bedrock::Prompt",
      "Properties": {
        "Name": {
          "Fn::Sub": "AWSDocsTutorial-ProcessApplicationPrompt"
        },
        "Description": "Use this prompt to generate a question for an agent to process the mortgage application",
        "DefaultVariant": "variantOne",
        "Variants": [
          {
            "Name": "variantOne",
            "TemplateType": "TEXT",
            "ModelId": "anthropic.claude-3-haiku-20240307-v1:0",
            "TemplateConfiguration": {
              "Text": {
                "Text": "Generate a question asking if the user will qualify for a loan for the specified criteria. \n\nInclude instruction to base the answer on key features of the property retrieved from MLS listing. \n\nStart with \"will an applicant...\".\n\n{ \"income\": {{income}}, \"creditScore\": {{creditScore}}, \"totalDebt\": {{totalDebt}}, \"loanAmount\": {{loanAmount}}, \"mlsId\": {{mlsId}} }\n\nInclude a second question on loan requirements an applicant with the below attributes should consider for a Fannie Mae backed loan (other than debt to income).\n",
                "InputVariables": [
                  {
                    "Name": "income"
                  },
                  {
                    "Name": "creditScore"
                  },
                  {
                    "Name": "totalDebt"
                  },
                  {
                    "Name": "loanAmount"
                  },
                  {
                    "Name": "mlsId"
                  }
                ]
              }
            },
            "InferenceConfiguration": {
              "Text": {
                "MaxTokens": 2000,
                "Temperature": 0.0,
                "TopP": 0.999,
                "StopSequences": [
                  "\n\nHuman:"
                ]
              }
            },
            "AdditionalModelRequestFields": {
              "top_k": 250
            }
          }
        ]
      }
    }
  },
  "Outputs": {
    "ProcessApplicationPromptArn": {
      "Value": {
        "Ref": "ProcessApplicationPrompt"
      },
      "Description": "ARN of the prompt to process a mortgage application"
    },
    "RejectionPromptArn": {
      "Value": {
        "Ref": "RejectionPrompt"
      },
      "Description": "ARN of the prompt to reject a mortgage application"
    }
  }
}
```

------

## Pilha de Bases de Conhecimento do Amazon Bedrock
<a name="getting-started-mortgage-kb-templates"></a>

Esse modelo cria a [base de conhecimento](knowledge-base.md) e a respectiva fonte de dados contendo as diretrizes de empréstimo:
+ KnowledgeBase ([AWS::Bedrock::KnowledgeBase](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide                         /aws-resource-bedrock-knowledgebase.html))
+ KnowledgeBaseDataSource ([AWS::Bedrock::DataSource](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide                         /aws-resource-bedrock-datasource.html))

------
#### [ YAML ]

```
AWSTemplateFormatVersion: '2010-09-09'
Description: "[AWSDocs] AmazonBedrockDocs: getting-started-mortgage-flow"
Parameters:
  KnowledgeBaseName:
    Type: String
    Description: Name of knowledge base
    Default: MortgageKB
  Q01pS3BucketName:
    Type: String
    Description: Name of S3 bucket where knowledge base data is stored
  Q06pKBEmbedModel:
    Type: String
    Description: Selected Embedding model
  Q07pKBChunkingStrategy:
    Type: String
    Description: Selected Chunking strategy
  Q08pKBMaxTokens:
    Type: Number
    Description: Maximum number of tokens in a chunk
  Q09pKBOverlapPercentage:
    Type: Number
    Description: Percent overlap in each chunk
  Q11pOSSCollectionName:
    Type: String
    Description: Name of the Collection
  Q12pOSSIndexName:
    Type: String
    Description: Index name to be created in vector store
  Q13pVectorFieldName:
    Type: String
    Description: Vector field name
    Default: bedrock-knowledge-base-default-vector
  Q14pMetaDataFieldName:
    Type: String
    Description: Metadata field name
    Default: AMAZON_BEDROCK_METADATA
  Q15pTextFieldName:
    Type: String
    Description: Text field name
    Default: AMAZON_BEDROCK_TEXT_CHUNK
  pCollectionArn:
    Type: String
    Description: Name of the Collection Arn
  pKBRole:
    Type: String
    Description: KB role for e2e RAG
  pKBRoleArn:
    Type: String
    Description: KB role Arn for e2e RAG
Conditions:
  IsChunkingStrategyFixed:
    Fn::Equals:
      - Ref: Q07pKBChunkingStrategy
      - Fixed-size chunking
  IsChunkingStrategyDefault:
    Fn::Equals:
      - Ref: Q07pKBChunkingStrategy
      - Default chunking
  IsChunkingStrategyNoChunking:
    Fn::Equals:
      - Ref: Q07pKBChunkingStrategy
      - No chunking
  IsChunkingStrategyFixedOrDefault:
    Fn::Or:
      - Condition: IsChunkingStrategyFixed
      - Condition: IsChunkingStrategyDefault
Resources:
  KnowledgeBase:
    Type: AWS::Bedrock::KnowledgeBase
    Properties:
      Description: Test KB Deployment
      KnowledgeBaseConfiguration:
        Type: VECTOR
        VectorKnowledgeBaseConfiguration:
          EmbeddingModelArn:
            Fn::Sub: arn:aws:bedrock:${AWS::Region}::foundation-model/${Q06pKBEmbedModel}
      Name: !Sub AWSDocsTutorial-${KnowledgeBaseName}
      RoleArn:
        Ref: pKBRoleArn
      StorageConfiguration:
        OpensearchServerlessConfiguration:
          CollectionArn:
            Ref: pCollectionArn
          FieldMapping:
            MetadataField:
              Ref: Q14pMetaDataFieldName
            TextField:
              Ref: Q15pTextFieldName
            VectorField:
              Ref: Q13pVectorFieldName
          VectorIndexName:
            Ref: Q12pOSSIndexName
        Type: OPENSEARCH_SERVERLESS

  KnowledgeBaseDataSource:
    Type: AWS::Bedrock::DataSource
    DependsOn:
    - KnowledgeBase
    Properties:
      DataSourceConfiguration:
        Type: S3
        S3Configuration:
          BucketArn:
            Fn::Sub: arn:aws:s3:::${Q01pS3BucketName}
          InclusionPrefixes:
            - knowledge-base-data-source/
      Description: Knowledge base data source
      KnowledgeBaseId:
        Ref: KnowledgeBase
      Name: !Sub AWSDocsTutorial-${KnowledgeBaseName}-DS
      VectorIngestionConfiguration:
        ChunkingConfiguration:
          Fn::If:
            - IsChunkingStrategyFixed
            - ChunkingStrategy: FIXED_SIZE
              FixedSizeChunkingConfiguration:
                MaxTokens: !Ref Q08pKBMaxTokens
                OverlapPercentage: !Ref Q09pKBOverlapPercentage
            - Fn::If:
                - IsChunkingStrategyDefault
                - ChunkingStrategy: FIXED_SIZE
                  FixedSizeChunkingConfiguration:
                    MaxTokens: 300
                    OverlapPercentage: 20
                - Fn::If:
                    - IsChunkingStrategyNoChunking
                    - ChunkingStrategy: NONE
                    - !Ref AWS::NoValue
Outputs:
  KBId:
    Value:
      Ref: KnowledgeBase
    Description: KnowledgeBase ID
  DS:
    Value:
      Ref: KnowledgeBaseDataSource
    Description: KnowledgeBase Datasource
```

------
#### [ JSON ]

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "[AWSDocs] AmazonBedrockDocs: getting-started-mortgage-flow",
  "Parameters": {
    "KnowledgeBaseName": {
      "Type": "String",
      "Description": "Name of knowledge base",
      "Default": "MortgageKB"
    },
    "Q01pS3BucketName": {
      "Type": "String",
      "Description": "Name of S3 bucket where knowledge base data is stored"
    },
    "Q06pKBEmbedModel": {
      "Type": "String",
      "Description": "Selected Embedding model"
    },
    "Q07pKBChunkingStrategy": {
      "Type": "String",
      "Description": "Selected Chunking strategy"
    },
    "Q08pKBMaxTokens": {
      "Type": "Number",
      "Description": "Maximum number of tokens in a chunk"
    },
    "Q09pKBOverlapPercentage": {
      "Type": "Number",
      "Description": "Percent overlap in each chunk"
    },
    "Q11pOSSCollectionName": {
      "Type": "String",
      "Description": "Name of the Collection"
    },
    "Q12pOSSIndexName": {
      "Type": "String",
      "Description": "Index name to be created in vector store"
    },
    "Q13pVectorFieldName": {
      "Type": "String",
      "Description": "Vector field name",
      "Default": "bedrock-knowledge-base-default-vector"
    },
    "Q14pMetaDataFieldName": {
      "Type": "String",
      "Description": "Metadata field name",
      "Default": "AMAZON_BEDROCK_METADATA"
    },
    "Q15pTextFieldName": {
      "Type": "String",
      "Description": "Text field name",
      "Default": "AMAZON_BEDROCK_TEXT_CHUNK"
    },
    "pCollectionArn": {
      "Type": "String",
      "Description": "Name of the Collection Arn"
    },
    "pKBRole": {
      "Type": "String",
      "Description": "KB role for e2e RAG"
    },
    "pKBRoleArn": {
      "Type": "String",
      "Description": "KB role Arn for e2e RAG"
    }
  },
  "Conditions": {
    "IsChunkingStrategyFixed": {
      "Fn::Equals": [
        {
          "Ref": "Q07pKBChunkingStrategy"
        },
        "Fixed-size chunking"
      ]
    },
    "IsChunkingStrategyDefault": {
      "Fn::Equals": [
        {
          "Ref": "Q07pKBChunkingStrategy"
        },
        "Default chunking"
      ]
    },
    "IsChunkingStrategyNoChunking": {
      "Fn::Equals": [
        {
          "Ref": "Q07pKBChunkingStrategy"
        },
        "No chunking"
      ]
    },
    "IsChunkingStrategyFixedOrDefault": {
      "Fn::Or": [
        {
          "Condition": "IsChunkingStrategyFixed"
        },
        {
          "Condition": "IsChunkingStrategyDefault"
        }
      ]
    }
  },
  "Resources": {
    "KnowledgeBase": {
      "Type": "AWS::Bedrock::KnowledgeBase",
      "Properties": {
        "Description": "Test KB Deployment",
        "KnowledgeBaseConfiguration": {
          "Type": "VECTOR",
          "VectorKnowledgeBaseConfiguration": {
            "EmbeddingModelArn": {
              "Fn::Sub": "arn:aws:bedrock:${AWS::Region}::foundation-model/${Q06pKBEmbedModel}"
            }
          }
        },
        "Name": {
          "Fn::Sub": "AWSDocsTutorial-${KnowledgeBaseName}"
        },
        "RoleArn": {
          "Ref": "pKBRoleArn"
        },
        "StorageConfiguration": {
          "OpensearchServerlessConfiguration": {
            "CollectionArn": {
              "Ref": "pCollectionArn"
            },
            "FieldMapping": {
              "MetadataField": {
                "Ref": "Q14pMetaDataFieldName"
              },
              "TextField": {
                "Ref": "Q15pTextFieldName"
              },
              "VectorField": {
                "Ref": "Q13pVectorFieldName"
              }
            },
            "VectorIndexName": {
              "Ref": "Q12pOSSIndexName"
            }
          },
          "Type": "OPENSEARCH_SERVERLESS"
        }
      }
    },
    "KnowledgeBaseDataSource": {
      "Type": "AWS::Bedrock::DataSource",
      "DependsOn": [
        "KnowledgeBase"
      ],
      "Properties": {
        "DataSourceConfiguration": {
          "Type": "S3",
          "S3Configuration": {
            "BucketArn": {
              "Fn::Sub": "arn:aws:s3:::${Q01pS3BucketName}"
            },
            "InclusionPrefixes": [
              "knowledge-base-data-source/"
            ]
          }
        },
        "Description": "Knowledge base data source",
        "KnowledgeBaseId": {
          "Ref": "KnowledgeBase"
        },
        "Name": {
          "Fn::Sub": "AWSDocsTutorial-${KnowledgeBaseName}-DS"
        },
        "VectorIngestionConfiguration": {
          "ChunkingConfiguration": {
            "Fn::If": [
              "IsChunkingStrategyFixed",
              {
                "ChunkingStrategy": "FIXED_SIZE",
                "FixedSizeChunkingConfiguration": {
                  "MaxTokens": {
                    "Ref": "Q08pKBMaxTokens"
                  },
                  "OverlapPercentage": {
                    "Ref": "Q09pKBOverlapPercentage"
                  }
                }
              },
              {
                "Fn::If": [
                  "IsChunkingStrategyDefault",
                  {
                    "ChunkingStrategy": "FIXED_SIZE",
                    "FixedSizeChunkingConfiguration": {
                      "MaxTokens": 300,
                      "OverlapPercentage": 20
                    }
                  },
                  {
                    "Fn::If": [
                      "IsChunkingStrategyNoChunking",
                      {
                        "ChunkingStrategy": "NONE"
                      },
                      {
                        "Ref": "AWS::NoValue"
                      }
                    ]
                  }
                ]
              }
            ]
          }
        }
      }
    }
  },
  "Outputs": {
    "KBId": {
      "Value": {
        "Ref": "KnowledgeBase"
      },
      "Description": "KnowledgeBase ID"
    },
    "DS": {
      "Value": {
        "Ref": "KnowledgeBaseDataSource"
      },
      "Description": "KnowledgeBase Datasource"
    }
  }
}
```

------

# Detalhes sobre o fluxo de processamento de hipotecas
<a name="getting-started-mortgage-flow-details"></a>

A representação visual do fluxo de processamento de hipotecas no Console de gerenciamento da AWS é a seguinte:

![\[Fluxo de processamento de hipotecas\]](http://docs.aws.amazon.com/pt_br/bedrock/latest/userguide/images/cloudformation/mortgage-processing-flow.png)


## Etapas no fluxo
<a name="getting-started-mortgage-flow-steps"></a>

As seguintes etapas ocorrem no fluxo:

1. As informações financeiras do cliente a partir da entrada são enviadas para a função do Lambda `loanCalculator`, que calcula o empréstimo máximo viável para o cliente.

1. A saída da função `loanCalculator` (`maximumAffordableLoan`) e o valor `loanAmount` da entrada são enviados ao nó de condição, que é então avaliado da seguinte forma:
   + Se `loanAmount` for maior que `maximumAffordableLoan`, o prompt `incomeDebt` será acionado e uma carta de rejeição de empréstimo será gerada.
   + Do contrário, as informações financeiras do cliente serão enviadas ao `mortgageProcessingAgent` pelo prompt `processApplication`. O agente aplica uma função de calculadora de empréstimos, bem como uma função de pesquisa do Multiple Listing Service (MLS) para pesquisar uma tabela do DynamoDB e avaliar as informações do cliente com relação à propriedade do MLS especificada na entrada. Além disso, o agente busca informações em uma base de conhecimento, que contém o “Guia de vendas da Fannie Mae”. O agente usa todas essas informações para gerar uma resposta analisando a elegibilidade do cliente para o valor do empréstimo solicitado.