

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Didacticiel : création d’un flux qui traite les applications de prêts hypothécaires
<a name="getting-started-mortgage-flow"></a>

Pour nous familiariser avec les ressources Amazon Bedrock et leurs fonctionnalités, nous allons utiliser un CloudFormation modèle pour configurer un [flux](flows.md) qui automatise les processus de demande de prêt hypothécaire en combinant différentes ressources Amazon Bedrock et d'autres ressources. AWS 

**Note**  
Pour ce didacticiel, nous utiliserons la *us-east-1* région. Vous pouvez utiliser n’importe quelle région prenant en charge les agents, les flux, les barrières de protection, les bases de connaissances et la gestion des invites. Pour un tableau des fonctionnalités prises en charge par région, consultez [Fonctionnalités prises Région AWS en charge par Amazon Bedrock](features-regions.md). Assurez-vous que vous êtes autorisé à créer des ressources Amazon S3, Amazon Bedrock, Lambda et DynamoDB dans la région que vous utilisez.

Ce flux n’est pas destiné à des fins de déploiement, mais plutôt à être utilisé comme didacticiel pour comprendre les ressources Amazon Bedrock. L’image suivante est la représentation visuelle du flux dans AWS Management Console :

![\[Flux de traitement des prêts hypothécaires\]](http://docs.aws.amazon.com/fr_fr/bedrock/latest/userguide/images/cloudformation/mortgage-processing-flow.png)


Le flux combine un [agent](agents.md) Amazon Bedrock, des [invites](prompt-management.md) et une [fonction Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) pour créer un flux de traitement des prêts hypothécaires qui prend en compte les informations financières du client et détermine si le client est éligible à un prêt. Une [base de connaissances](knowledge-base.md) Amazon Bedrock et une [barrière de protection](guardrails.md) sont également attachés à l’agent du flux afin d’augmenter les réponses et de fournir des garanties. Pour plus d’informations sur les composants du tableau de bord récapitulatif, consultez [Détails sur le flux de traitement des prêts hypothécaires](getting-started-mortgage-flow-details.md).

**Topics**
+ [Conditions préalables](#getting-started-mortgage-flow-prereqs)
+ [Créez le flux de traitement des prêts hypothécaires à l'aide de CloudFormation](#getting-started-mortgage-flow-create)
+ [Testez le flux de traitement des prêts hypothécaires](#getting-started-mortgage-flow-test)
+ [Nettoyage : suppression de ressources](#getting-started-mortgage-flow-delete)
+ [CloudFormation modèles](getting-started-mortgage-flow-template.md)
+ [Détails sur le flux de traitement des prêts hypothécaires](getting-started-mortgage-flow-details.md)

## Conditions préalables
<a name="getting-started-mortgage-flow-prereqs"></a>

Pour créer ce flux, vous allez télécharger un fichier .zip et suivre les instructions pour exécuter un script qui configurera vos ressources et votre modèle pour vous.

**Important**  
Les ressources Amazon que vous créez vous seront facturées jusqu’à ce que vous les supprimiez.

Ensuite, remplissez les conditions préalables suivantes :

1. Téléchargez le fichier [cloudformation-mortgage-flow-setup.zip.](samples/cloudformation-mortgage-flow-setup.zip)

1. Décompressez le fichier. Vous pouvez en savoir plus sur le contenu dans [CloudFormation modèles](getting-started-mortgage-flow-template.md).

1. Demandez l’accès aux modèles de fondation Amazon Bedrock en procédant comme suit :

   1. Connectez-vous au AWS Management Console avec une identité IAM autorisée à utiliser la console Amazon Bedrock. Ouvrez ensuite la console Amazon Bedrock à l'adresse [https://console.aws.amazon.com/bedrock.](https://console.aws.amazon.com/bedrock)

   1. Assurez-vous que vous vous trouvez dans la région **USA Est (Virginie du Nord)** en cochant votre région dans le coin supérieur droit. Si ce n’est pas le cas, changez de région.

   1. Sélectionnez **Accès au modèle** en bas du volet de navigation de gauche.

   1. Choisissez **Modifier l’accès au modèle**.

   1. Effectuez l’une des actions suivantes :
      + Pour demander l’accès à tous les modèles, choisissez **Activer tous les modèles**. Sur la page vers laquelle vous êtes redirigé, les cases à cocher situées en regard de tous les modèles seront remplies.
      + Pour demander l’accès à des modèles spécifiques, choisissez **Activer des modèles spécifiques**. Sur la page vers laquelle vous êtes redirigé, vous disposez des options suivantes :
        + Pour demander à un fournisseur d’accéder à tous les modèles, cochez la case située en regard du nom du fournisseur.
        + Pour demander l’accès à un modèle, cochez la case située en regard du nom du modèle.

   1. Dans le cadre du didacticiel suivant, vous devez au minimum demander l’accès aux modèles **Titan Embeddings G1 - Text** et **Claude 3 Haiku**. Ensuite, sélectionnez **Suivant**.

   1. Passez en revue les modèles auxquels vous demandez l’accès et les **conditions**. Lorsque vous êtes prêt, choisissez **Soumettre** pour demander l’accès.

## Créez le flux de traitement des prêts hypothécaires à l'aide de CloudFormation
<a name="getting-started-mortgage-flow-create"></a>

Pour créer le flux de traitement des prêts hypothécaires et les ressources associées, nous allons créer un CloudFormation modèle et l'utiliser pour créer une pile contenant les ressources Amazon Bedrock.

**Important**  
Les ressources Amazon que vous créez vous seront facturées jusqu’à ce que vous les supprimiez.

### Création des ressources et du fichier CloudFormation modèle
<a name="getting-started-mortgage-flow-file"></a>

Tout d'abord, utilisez le script du fichier .zip pour télécharger les ressources dans un compartiment S3 et créer les CloudFormation modèles.

1. Dans un terminal, exécutez la commande suivante pour copier les ressources dans un compartiment Amazon S3 et remplir les fichiers `main-stack.yaml` et `main-stack.json` avec le nom du compartiment S3 comme valeur par défaut pour le paramètre du nom du compartiment.

   ```
   bash deploy.sh
   ```
**Note**  
L'utilisation du script est`bash deploy.sh <region> <bucket-name>`, where *<region>* et *<bucket-name>* sont des arguments facultatifs. Si vous ne les fournissez pas, les valeurs par défaut suivantes seront utilisées :  
*<region>*— La AWS région par défaut spécifiée dans la configuration de vos AWS informations d'identification.
*<bucket-name>*— Le bucket sera nommé*mortgage-flow-deployment-<AccountId>-<Region>*, où se *<AccountId>* trouve votre identifiant de AWS compte et *<Region>* correspond à la valeur que vous avez fournie ou à la AWS région par défaut spécifiée dans la configuration de vos AWS informations d'identification.

1. Confirmez les invites. Une fois le déploiement terminé, vous devriez disposer d’un modèle `main-stack.yaml` et `main-stack.json` complet pour l’étape suivante.

**Note**  
Si le script échoue, vous pouvez préparer les ressources manuellement en procédant comme suit :  
Téléchargez le *contenu* (n'incluez pas le dossier lui-même) du `cloudformation-mortgage-flow-setup` dossier décompressé dans un compartiment S3 situé dans l'est des États-Unis (Virginie du Nord) sur la console Amazon S3 à l'adresse. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)
Recherchez le fichier `templates/json/main-stack-tmp.yaml` ou `templates/json/main-stack-tmp.json` et procédez comme suit :  
Remplacez la `Default` valeur du `Q01pS3BucketName` paramètre par le nom *MortgageFlowBucket* de votre compartiment S3.
Supprimez `-tmp` du nom du fichier, de telle sorte qu’il devienne `templates/json/main-stack.yaml` ou `templates/json/main-stack.json`.

### Créez la pile à l'aide de la CloudFormation console
<a name="getting-started-mortgage-flow-stack"></a>

Ensuite, utilisez le modèle que vous avez enregistré pour approvisionner une CloudFormation pile.

1. Ouvrez la CloudFormation console à l'adresse [https://console.aws.amazon.com/cloudformation.](https://console.aws.amazon.com/cloudformation/) Assurez-vous que vous vous trouvez dans la région **USA Est (Virginie du Nord)** en cochant votre région dans le coin supérieur droit. Si ce n’est pas le cas, changez de région.

1. Sur la page **Piles**, dans le menu **Créer une pile**, choisissez **Avec de nouvelles ressources (standard)**.

1. Spécifiez un modèle :

   1. Sous **Prérequis**, choisissez **Choisir un modèle existant**.

   1. Sous **Spécifier le modèle**, sélectionnez **Charger un modèle de fichier**.

   1. Choisissez **Choisir un fichier**, accédez au modèle `main-stack.yaml` ou `main-stack.json`, puis sélectionnez-le.

   1. Choisissez **Suivant**.

1. Spécifiez les détails de pile :

   1. Dans **Nom de la pile**, entrez un nom pour la pile.

   1. Dans le champ **Paramètres**, laissez les valeurs par défaut.
**Note**  
La valeur `Q01pS3BucketName` doit correspondre au nom du compartiment S3 dans lequel vous avez chargé les ressources de ce modèle. Les autres arguments concernent les configurations de la base de connaissances. Si vous modifiez l’un d’entre eux, assurez-vous que les configurations sont compatibles entre elles. Pour de plus amples informations, veuillez consulter [Conditions préalables à l’utilisation d’un magasin de vecteurs que vous avez créé pour une base de connaissances](knowledge-base-setup.md).

   1. Choisissez **Suivant**.

1. Configurez les options de pile :

   1. Sous **Options d’échec de pile**, choisissez **Supprimer toutes les ressources nouvellement créées**.
**Note**  
Le choix de cette option vous évite d’être facturé pour des ressources dont la stratégie de suppression indique qu’elles doivent être conservées même en cas d’échec de la création de la pile. Pour plus d’informations, consultez [Attribut `DeletionPolicy`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html) dans le *Guide de l’utilisateur CloudFormation *.

   1. Sous **Fonctionnalités**, cochez la case pour confirmer que des ressources IAM CloudFormation peuvent être créées dans votre compte.

   1. Choisissez **Suivant**.

1. Vérifiez les détails de la pile et choisissez **Soumettre**. CloudFormation crée la pile. La création dure plusieurs minutes. Une fois la création de la pile terminée, vous pouvez utiliser l’onglet **Ressources** de la page détaillée de la pile pour afficher les ressources provisionnées dans votre compte.

1. Une fois la création de la pile terminée, procédez comme suit pour synchroniser la source de données de la base de connaissances afin que celle-ci puisse être interrogée :

   1. Connectez-vous au AWS Management Console avec une identité IAM autorisée à utiliser la console Amazon Bedrock. Ouvrez ensuite la console Amazon Bedrock à l'adresse [https://console.aws.amazon.com/bedrock.](https://console.aws.amazon.com/bedrock)

   1. Dans le volet de navigation de gauche, sélectionnez **Bases de connaissances** et choisissez la base de connaissances créée, `AWSDocsTutorial-MortgageKB`.

   1. Dans la section **Source de données**, cochez la case en regard de la source de données créée, nommée `AWSDocsTutorial-MortgageKB-DS`.

   1. Choisissez **Synchronisation**. Une fois la synchronisation terminée, vous pouvez tester le flux.

## Testez le flux de traitement des prêts hypothécaires
<a name="getting-started-mortgage-flow-test"></a>

Une fois le flux de traitement des prêts hypothécaires créé, vous pouvez utiliser la console Amazon Bedrock pour examiner, tester et modifier le flux. Vous pouvez également examiner, tester et modifier les ressources individuelles du flux.

**Pour tester le flux**

1. Connectez-vous au AWS Management Console avec une identité IAM autorisée à utiliser la console Amazon Bedrock. Ouvrez ensuite la console Amazon Bedrock à l'adresse [https://console.aws.amazon.com/bedrock.](https://console.aws.amazon.com/bedrock)

1. Dans le volet de navigation de gauche, choisissez **Flux**. Assurez-vous que vous vous trouvez dans la région **USA Est (Virginie du Nord)** en cochant votre région dans le coin supérieur droit. Si ce n’est pas le cas, changez de région.

1. Dans la section **Flux**, sélectionnez le flux créé à partir du CloudFormation modèle. Ce devrait être `AWSDocsTutorial-MortgageFlow`.

1. Choisissez **Modifier dans le créateur de flux**. Vous pouvez faire glisser des nœuds individuels dans le flux pour modifier la représentation visuelle du flux.

1. Dans le volet **Flux de test**, entrez ce qui suit dans le champ de texte, puis sélectionnez **Exécuter**.

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

   Le montant du prêt étant supérieur au prêt abordable maximal calculé, l’invite **incomeDebt** est déclenchée et le flux génère une lettre de rejet. Vous pouvez choisir **Afficher la trace** pour voir les nœuds exécutés dans le flux.

1. Encore une fois, dans le volet **Flux de test**, entrez ce qui suit dans le champ de texte, puis sélectionnez **Exécuter**.

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

   Le montant du prêt étant inférieur au montant maximal du prêt abordable calculé, l'invite **ProcessApplication** est déclenchée et envoyée au **mortgageProcessingAgent**, qui consulte la base de connaissances jointe et génère une réponse évaluant, sur la base des valeurs saisies, si le client est éligible à un prêt.

1. (Facultatif) Essayez d’exécuter le flux en utilisant différentes valeurs pour les champs de l’objet JSON. Les valeurs `mlsId` correspondent aux propriétés répertoriées sur le Multiple Listing Service. Vous pouvez trouver les valeurs `mlsId` valides en procédant comme suit :

   1. Connectez-vous à la console DynamoDB AWS Management Console et ouvrez-la à l'adresse. [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)

   1. Dans le panneau de navigation de gauche, sélectionnez **Tables**.

   1. Sélectionnez le tableau qui indique **AWSDocsTutorial-PropertyListing**.

   1. Sélectionnez **Explorer les éléments de table**.

   1. Vous pouvez utiliser n’importe laquelle des valeurs de la colonne **mls\$1id** dans l’entrée du flux.

Vous pouvez également accéder aux pages de **gestion **Agents**, **Bases de connaissances**, **Guardrails** et Prompt** du AWS Management Console pour examiner chaque ressource Amazon Bedrock utilisée dans le flux, indépendamment. Pour en savoir plus sur le flux et comprendre les composants de manière plus détaillée, consultez [Détails sur le flux de traitement des prêts hypothécaires](getting-started-mortgage-flow-details.md).

## Nettoyage : suppression de ressources
<a name="getting-started-mortgage-flow-delete"></a>

Une fois que vous aurez exploré les ressources et que vous aurez mieux compris les fonctionnalités des différentes ressources Amazon Bedrock, nous supprimerons la pile et les ressources qu’elle contient.

**Important**  
Les ressources Amazon que vous créez vous seront facturées jusqu’à ce que vous les supprimiez.

1. Ouvrez le fichier [https://console.aws.amazon.com/cloudformation.](https://console.aws.amazon.com/cloudformation/)

1. Dans le volet de navigation de gauche, choisissez **Piles**.

1. Choisissez la pile que vous avez créée à partir du modèle. Ensuite, choisissez **Supprimer**, puis confirmez en sélectionnant **Supprimer**.

   CloudFormation initie la suppression de la pile principale, de toutes ses piles imbriquées et de toutes les ressources incluses dans les piles.

# CloudFormation modèles
<a name="getting-started-mortgage-flow-template"></a>

Le fichier `cloudformation-mortgage-flow-setup.zip` télécharge contient les fichiers suivants :
+ `deploy.sh`— Un script shell qui déploie vos ressources et prépare le CloudFormation modèle principal que vous allez utiliser.
+ `artifacts` : un dossier contenant des fichiers .zip comportant des fonctions pour l’agent et des modèles de base de connaissances :
  + Fonctions Lambda pour les groupes d’actions de l’agent
    + `agent_loan_calculator.zip`
    + `mls_lookup.zip`
    + `loader_deployment_package.zip`
  + Fonctions de configuration de la base de connaissances
    + `custom-resource-lambda.zip`
    + `opensearchpy-layer.zip`
    + `provider-event-handler.zip`
+ `api-schema` : dossier contenant les schémas d’API pour les groupes d’actions.
+ `knowledge-base-data-source` : dossier contenant le PDF du [guide de vente de Fannie Mae](https://selling-guide.fanniemae.com/).
+ `templates` : dossier contenant les modèles pour les ressources de ce flux, au format JSON et YAML :
  + `main-stack-tmp` : modèle principal qui déploie les modèles restants sous forme de piles imbriquées. Ce fichier est transformé en `main-stack` après l’exécution du script de déploiement.
  + `guardrails-template` : modèle pour la barrière de protection à associer à l’agent.
  + `prompts-template` : modèle pour les invites à utiliser dans le flux.
  + `kb-role-template`— Le modèle pour le rôle de base de connaissances, à utiliser à la fois par le OpenSearch modèle et par le modèle de base de connaissances.
  + `oss-infra-template`— Le modèle de la boutique vectorielle Amazon OpenSearch Serverless à utiliser pour la base de connaissances.
  + `kb-infra-template` : modèle de base de connaissances sur les prêts hypothécaires à associer à l’agent.
  + `agent-template` : modèle d’agent de traitement des prêts hypothécaires à utiliser dans le flux.
  + `mortgage-flow-template` : modèle pour le flux de traitement des prêts hypothécaires qui combine toutes les ressources.
+ `README.md` : fichier README qui décrit les étapes d’utilisation du modèle.

Les rubriques suivantes présentent les CloudFormation modèles utilisés pour chaque pile. La pile principale déploie les piles restantes sous forme de [piles imbriquées](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html).

**Topics**
+ [Pile principale](#getting-started-mortgage-templates-main)
+ [Pile de barrières de protection Amazon Bedrock](#getting-started-mortgage-guardrail-templates)
+ [Pile Amazon Bedrock Prompt Management](#getting-started-mortgage-prompts-templates)
+ [Pile Amazon Bedrock Knowledge Bases](#getting-started-mortgage-kb-templates)

## Pile principale
<a name="getting-started-mortgage-templates-main"></a>

La pile principale définit les paramètres que vous pouvez définir lorsque vous téléchargez le modèle. Ces valeurs sont transmises à chacune des piles imbriquées restantes. Le script de déploiement *MortgageFlowBucket* remplace la valeur par défaut du `Q01pS3BucketName` paramètre par votre compartiment S3 réel qui contient les ressources déployées par le 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"
            ]
          }
        }
      }
    }
  }
}
```

------

## Pile de barrières de protection Amazon Bedrock
<a name="getting-started-mortgage-guardrail-templates"></a>

Cette pile crée les ressources suivantes liées aux [barrières de protection](guardrails.md) suivantes :
+ AgentGuardrail ([AWS::Bedrock::Guardrail](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide                         /aws-resource-bedrock-guardrail.html)) — Un garde-corps qui assure le filtrage du contenu, la politique thématique et la protection des informations personnelles. Cette barrière de protection sera associée à l’agent dans la pile d’agents.
+ AgentGuardrailVersion ([AWS::Bedrock::GuardrailVersion](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide                         /aws-resource-bedrock-guardrailversion.html)) — Version de la `AgentGuardrail` ressource appliquée à l'agent.

------
#### [ 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"
    }
  }
}
```

------

## Pile Amazon Bedrock Prompt Management
<a name="getting-started-mortgage-prompts-templates"></a>

Cette pile crée les ressources [prompt](prompt-management.md) ([AWS::IAM::Prompt](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide                     /aws-resource-bedrock-prompt.html)) suivantes, qui sont ajoutées au flux :
+ RejectionPrompt — Une invite qui renvoie une lettre de rejet générée sur la base d'informations financières.
+ ProcessApplicationPrompt — Une invite qui envoie les informations financières d'un client à un agent et invite celui-ci à évaluer si le client est éligible à un prêt.

------
#### [ 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"
    }
  }
}
```

------

## Pile Amazon Bedrock Knowledge Bases
<a name="getting-started-mortgage-kb-templates"></a>

Ce modèle crée la [base de connaissances](knowledge-base.md) et sa source de données contenant les directives relatives aux prêts :
+ 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"
    }
  }
}
```

------

# Détails sur le flux de traitement des prêts hypothécaires
<a name="getting-started-mortgage-flow-details"></a>

La représentation visuelle du flux de traitement des prêts hypothécaires dans le AWS Management Console est la suivante :

![\[Flux de traitement des prêts hypothécaires\]](http://docs.aws.amazon.com/fr_fr/bedrock/latest/userguide/images/cloudformation/mortgage-processing-flow.png)


## Étapes du flux
<a name="getting-started-mortgage-flow-steps"></a>

Les étapes suivantes se produisent dans le flux :

1. Les informations financières du client issues de l’entrée sont envoyées à la fonction Lambda `loanCalculator`, qui calcule le prêt abordable maximum du client.

1. La sortie de la fonction `loanCalculator` (`maximumAffordableLoan`) et la valeur `loanAmount` de l’entrée sont envoyées au nœud de condition, qui est ensuite évalué comme suit :
   + Si le montant `loanAmount` est supérieur à `maximumAffordableLoan`, l’invite `incomeDebt` est déclenché et une lettre de rejet du prêt est générée.
   + Dans le cas contraire, les informations financières du client sont envoyées à `mortgageProcessingAgent` par l’invite `processApplication`. L’agent applique une fonction de calcul de prêt, ainsi qu’une fonction de recherche du Multiple Listing Service (MLS) pour consulter une table DynamoDB et évaluer les informations du client par rapport à la propriété MLS spécifiée dans l’entrée. En outre, l’agent recherche des informations dans une base de connaissances contenant le guide de vente de Fannie Mae. L’agent utilise toutes ces informations pour générer une réponse analysant l’éligibilité du client au montant du prêt demandé.