

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Tutorial: Buat aliran yang memproses aplikasi hipotek
<a name="getting-started-mortgage-flow"></a>

Untuk membiasakan diri dengan sumber daya Amazon Bedrock dan kemampuannya, kami akan menggunakan CloudFormation template untuk menyiapkan [alur](flows.md) yang mengotomatiskan proses aplikasi hipotek dengan menggabungkan berbagai Amazon Bedrock dan sumber daya lainnya. AWS 

**catatan**  
Untuk tutorial ini, kita akan menggunakan *us-east-1* Region. Anda dapat menggunakan Wilayah apa pun yang mendukung Agen, Arus, Pagar Pembatas, basis Pengetahuan, dan manajemen Prompt. Untuk tabel dukungan fitur menurut Wilayah, lihat[Dukungan fitur oleh Wilayah AWS di Amazon Bedrock](features-regions.md). Pastikan Anda memiliki izin untuk membuat sumber daya Amazon S3, Amazon Bedrock, Lambda, dan DynamoDB di Wilayah yang Anda gunakan.

Alur ini tidak dimaksudkan untuk tujuan penerapan, melainkan untuk digunakan sebagai tutorial untuk memahami sumber daya Amazon Bedrock. Gambar berikut adalah representasi visual dari aliran dalam Konsol Manajemen AWS:

![\[Aliran pemrosesan hipotek\]](http://docs.aws.amazon.com/id_id/bedrock/latest/userguide/images/cloudformation/mortgage-processing-flow.png)


Aliran ini menggabungkan [agen](agents.md) Amazon Bedrock, [prompt](prompt-management.md), dan [fungsi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) untuk menciptakan aliran pemrosesan hipotek yang mengambil informasi keuangan pelanggan dan memproses apakah pelanggan memenuhi syarat untuk pinjaman. [Basis pengetahuan](knowledge-base.md) dan [pagar pembatas](guardrails.md) Amazon Bedrock juga melekat pada agen aliran untuk meningkatkan respons dan untuk memberikan perlindungan. Untuk informasi lebih rinci tentang komponen aliran, lihat[Rincian tentang aliran pemrosesan hipotek](getting-started-mortgage-flow-details.md).

**Topics**
+ [Prasyarat](#getting-started-mortgage-flow-prereqs)
+ [Buat aliran pemrosesan hipotek menggunakan CloudFormation](#getting-started-mortgage-flow-create)
+ [Uji aliran pemrosesan hipotek](#getting-started-mortgage-flow-test)
+ [Bersihkan: menghapus sumber daya](#getting-started-mortgage-flow-delete)
+ [CloudFormation template](getting-started-mortgage-flow-template.md)
+ [Rincian tentang aliran pemrosesan hipotek](getting-started-mortgage-flow-details.md)

## Prasyarat
<a name="getting-started-mortgage-flow-prereqs"></a>

Untuk membuat alur ini, Anda akan mengunduh file.zip dan mengikuti instruksi untuk menjalankan skrip yang akan menyiapkan sumber daya dan templat untuk Anda.

**penting**  
Anda akan ditagih untuk sumber daya Amazon yang Anda buat hingga Anda menghapusnya.

Kemudian, lengkapi prasyarat berikut:

1. Unduh [cloudformation-mortgage-flow-setupfile.zip](samples/cloudformation-mortgage-flow-setup.zip).

1. Buka filenya. Anda dapat mempelajari lebih lanjut tentang konten di[CloudFormation template](getting-started-mortgage-flow-template.md).

1. Minta akses ke model foundation Amazon Bedrock dengan melakukan hal berikut:

   1. Masuk ke Konsol Manajemen AWS dengan identitas IAM yang memiliki izin untuk menggunakan konsol Amazon Bedrock. Kemudian, buka konsol Amazon Bedrock di [https://console.aws.amazon.com/bedrock](https://console.aws.amazon.com/bedrock).

   1. Pastikan Anda berada di Wilayah **AS Timur (Virginia N.)** dengan memeriksa Wilayah Anda di sudut kanan atas. Jika tidak, alihkan Wilayah.

   1. Pilih **Akses model** di bagian bawah panel navigasi kiri.

   1. Pilih **Ubah akses model**.

   1. Lakukan salah satu tindakan berikut:
      + Untuk meminta akses ke semua model, pilih **Aktifkan semua model**. Pada halaman yang Anda bawa, kotak centang di sebelah semua model akan diisi.
      + Untuk meminta akses ke model tertentu, pilih **Aktifkan model tertentu**. Pada halaman yang Anda kunjungi, Anda memiliki opsi berikut:
        + Untuk meminta akses ke semua model oleh penyedia, pilih kotak centang di sebelah nama penyedia.
        + Untuk meminta akses ke satu model, pilih kotak centang di sebelah nama model.

   1. Untuk keperluan tutorial berikut, Anda minimal harus meminta akses ke **Titan Embeddings G1 - Text**dan **Claude 3 Haiku**model. Lalu pilih **Selanjutnya**.

   1. Tinjau model yang Anda minta akses dan **Ketentuan**. Saat Anda siap, pilih **Kirim** untuk meminta akses.

## Buat aliran pemrosesan hipotek menggunakan CloudFormation
<a name="getting-started-mortgage-flow-create"></a>

Untuk membuat alur pemrosesan hipotek dan sumber daya terkait, kami akan membuat CloudFormation template dan menggunakannya untuk membuat tumpukan yang berisi sumber daya Amazon Bedrock.

**penting**  
Anda akan ditagih untuk sumber daya Amazon yang Anda buat hingga Anda menghapusnya.

### Buat sumber daya dan file CloudFormation template
<a name="getting-started-mortgage-flow-file"></a>

Pertama, gunakan skrip dari file.zip untuk mengunggah sumber daya ke bucket S3 dan untuk membuat templat. CloudFormation 

1. Di terminal, jalankan perintah berikut untuk menyalin sumber daya ke bucket Amazon S3 dan mengisi `main-stack.json` file `main-stack.yaml` dan file dengan nama bucket S3 sebagai nilai default untuk parameter nama bucket.

   ```
   bash deploy.sh
   ```
**catatan**  
Penggunaan skrip adalah`bash deploy.sh <region> <bucket-name>`, di mana *<region>* dan *<bucket-name>* merupakan argumen opsional. Jika Anda tidak memberikannya, nilai default berikut akan digunakan:  
*<region>*— AWS Wilayah default yang ditentukan dalam pengaturan AWS kredensyal Anda.
*<bucket-name>*— Bucket akan diberi nama*mortgage-flow-deployment-<AccountId>-<Region>*, di mana *<AccountId>* ID AWS akun Anda dan *<Region>* cocok dengan nilai yang Anda berikan atau AWS Wilayah default yang ditentukan dalam pengaturan AWS kredensyal Anda.

1. Konfirmasikan petunjuknya. Setelah penerapan selesai, Anda harus memiliki `main-stack.json` template lengkap `main-stack.yaml` untuk langkah selanjutnya.

**catatan**  
Jika skrip gagal, Anda dapat menyiapkan sumber daya secara manual dengan melakukan hal berikut:  
Unggah *konten* (jangan sertakan folder itu sendiri) dari `cloudformation-mortgage-flow-setup` folder yang tidak di-zip ke bucket S3 di US East (Virginia N.) di konsol Amazon S3 di. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)
Temukan `templates/json/main-stack-tmp.json` file `templates/json/main-stack-tmp.yaml` atau dan lakukan hal berikut:  
Ubah `Default` nilai `Q01pS3BucketName` parameter dari *MortgageFlowBucket* nama bucket S3 Anda.
Hapus `-tmp` dari nama file, sehingga menjadi `templates/json/main-stack.yaml` atau`templates/json/main-stack.json`.

### Buat tumpukan dengan menggunakan CloudFormation konsol
<a name="getting-started-mortgage-flow-stack"></a>

Selanjutnya, gunakan template yang telah Anda simpan untuk menyediakan CloudFormation tumpukan.

1. Buka CloudFormation konsol di [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/). Pastikan Anda berada di Wilayah **AS Timur (Virginia N.)** dengan memeriksa Wilayah Anda di sudut kanan atas. Jika tidak, alihkan Wilayah.

1. Pada halaman **Stacks**, dari menu **Buat tumpukan**, pilih **Dengan sumber daya baru (standar)**.

1. Tentukan template:

   1. Di bawah **Prasyarat**, pilih **Pilih templat yang ada**.

   1. Di bawah **Tentukan templat**, pilih **Unggah file templat**.

   1. Pilih **Pilih file**, navigasikan ke `main-stack.yaml` atau `main-stack.json` templat, dan pilih.

   1. Pilih **Berikutnya**.

1. Tentukan detail tumpukan:

   1. Di bidang **nama Stack**, masukkan nama untuk tumpukan.

   1. Di bidang **Parameter**, tinggalkan nilai default.
**catatan**  
`Q01pS3BucketName`Nilai harus sesuai dengan nama bucket S3 tempat Anda mengunggah sumber daya untuk template ini. Argumen yang tersisa terkait dengan konfigurasi basis pengetahuan - jika Anda memodifikasi salah satu dari mereka, pastikan bahwa konfigurasi kompatibel satu sama lain. Untuk informasi selengkapnya, lihat [Prasyarat untuk menggunakan penyimpanan vektor yang Anda buat untuk basis pengetahuan](knowledge-base-setup.md).

   1. Pilih **Berikutnya**.

1. Konfigurasikan opsi tumpukan:

   1. Di bawah **Opsi kegagalan tumpukan**, pilih **Hapus semua sumber daya yang baru dibuat**.
**catatan**  
Memilih opsi ini mencegah Anda dari kemungkinan ditagih untuk sumber daya yang kebijakan penghapusan menentukan mereka dipertahankan bahkan jika pembuatan tumpukan gagal. Untuk informasi selengkapnya, lihat [`DeletionPolicy`atribut](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html) di *Panduan CloudFormation Pengguna*.

   1. Di bawah **Kemampuan**, centang kotak untuk mengetahui bahwa CloudFormation mungkin membuat sumber daya IAM di akun Anda.

   1. Pilih **Berikutnya**.

1. Tinjau detail tumpukan dan pilih **Kirim**. CloudFormation menciptakan tumpukan. Penciptaan akan memakan waktu beberapa menit. Setelah pembuatan tumpukan selesai, Anda dapat menggunakan tab **Sumber Daya** pada halaman detail tumpukan untuk melihat sumber daya yang disediakan di akun Anda.

1. Setelah pembuatan tumpukan selesai, lakukan hal berikut untuk menyinkronkan sumber data untuk basis pengetahuan sehingga basis pengetahuan dapat ditanyakan:

   1. Masuk ke Konsol Manajemen AWS dengan identitas IAM yang memiliki izin untuk menggunakan konsol Amazon Bedrock. Kemudian, buka konsol Amazon Bedrock di [https://console.aws.amazon.com/bedrock](https://console.aws.amazon.com/bedrock).

   1. Dari panel navigasi kiri, pilih **Pangkalan Pengetahuan** dan kemudian pilih basis pengetahuan yang dibuat, bernama`AWSDocsTutorial-MortgageKB`.

   1. Di bagian **Sumber data**, pilih kotak centang di sebelah sumber data yang dibuat, bernama`AWSDocsTutorial-MortgageKB-DS`.

   1. Pilih **Sinkronisasi**. Setelah sinkronisasi selesai, Anda dapat menguji alur.

## Uji aliran pemrosesan hipotek
<a name="getting-started-mortgage-flow-test"></a>

Setelah alur pemrosesan hipotek dibuat, Anda dapat menggunakan konsol Amazon Bedrock untuk memeriksa, menguji, dan memodifikasi alur. Anda juga dapat memeriksa, menguji, dan memodifikasi sumber daya individu dalam aliran.

**Untuk menguji aliran**

1. Masuk ke Konsol Manajemen AWS dengan identitas IAM yang memiliki izin untuk menggunakan konsol Amazon Bedrock. Kemudian, buka konsol Amazon Bedrock di [https://console.aws.amazon.com/bedrock](https://console.aws.amazon.com/bedrock).

1. Dari panel navigasi kiri, pilih **Flows**. Pastikan Anda berada di Wilayah **AS Timur (Virginia N.)** dengan memeriksa Wilayah Anda di sudut kanan atas. Jika tidak, alihkan Wilayah.

1. Di bagian **Flows**, pilih flow yang dibuat dari CloudFormation template. Seharusnya begitu`AWSDocsTutorial-MortgageFlow`.

1. Pilih **Edit di pembuat aliran**. Anda dapat menyeret node individual dalam aliran untuk memodifikasi representasi visual dari aliran.

1. Di panel **Alur uji**, masukkan yang berikut ini di bidang teks lalu pilih **Jalankan**.

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

   Karena jumlah pinjaman lebih besar dari pinjaman terjangkau maksimum yang dihitung, prompt **IncomeDebt** dipicu dan arus menghasilkan surat penolakan. Anda dapat memilih **Tampilkan jejak** untuk melihat node yang dijalankan dalam aliran.

1. Sekali lagi, di panel **aliran Uji**, masukkan yang berikut ini di bidang teks dan kemudian pilih **Jalankan**.

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

   Karena jumlah pinjaman kurang dari pinjaman terjangkau maksimum yang dihitung, **ProcessApplication** prompt dipicu dan dikirim ke **mortgageProcessingAgent**, yang mencari basis pengetahuan terlampir dan menghasilkan respons yang menilai, berdasarkan nilai input, apakah pelanggan memenuhi syarat untuk pinjaman.

1. (Opsional) Coba jalankan alur dengan menggunakan nilai yang berbeda untuk bidang di objek JSON. `mlsId`Nilai sesuai dengan properti yang tercantum di Layanan Daftar Ganda. Anda dapat menemukan `mlsId` nilai yang valid dengan melakukan hal berikut:

   1. Masuk ke Konsol Manajemen AWS dan buka konsol DynamoDB di. [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)

   1. Di panel navigasi kiri, pilih **Tabel**.

   1. Pilih tabel yang bertuliskan **AWSDocsTutorial-PropertyListing**.

   1. Pilih **Jelajahi item tabel**.

   1. Anda dapat menggunakan salah satu nilai di kolom **mls\$1id** di input aliran.

Anda juga dapat menavigasi ke halaman **Agen**, **Pangkalan Pengetahuan**, **Pagar Pembatas,** dan **manajemen Prompt** di halaman Konsol Manajemen AWS untuk memeriksa setiap sumber daya Amazon Bedrock yang digunakan dalam alur, secara independen. Untuk mempelajari lebih lanjut tentang aliran dan memahami komponen secara lebih rinci, lihat[Rincian tentang aliran pemrosesan hipotek](getting-started-mortgage-flow-details.md).

## Bersihkan: menghapus sumber daya
<a name="getting-started-mortgage-flow-delete"></a>

Setelah Anda menjelajahi sumber daya dan memiliki pemahaman yang lebih baik tentang kemampuan berbagai sumber daya Amazon Bedrock, kami akan menghapus tumpukan dan sumber daya yang dikandungnya.

**penting**  
Anda akan ditagih untuk sumber daya Amazon yang Anda buat hingga Anda menghapusnya.

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

1. Dari nyeri navigasi kiri, pilih **Stacks**.

1. Pilih tumpukan yang Anda buat dari template. Kemudian pilih **Hapus**, lalu konfirmasikan **Hapus**.

   CloudFormation memulai penghapusan tumpukan utama, semua tumpukan bersarangnya, dan semua sumber daya yang termasuk dalam tumpukan.

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

`cloudformation-mortgage-flow-setup.zip`File yang Anda download berisi file-file berikut:
+ `deploy.sh`— Skrip shell yang menyebarkan sumber daya Anda dan menyiapkan CloudFormation template utama yang akan Anda gunakan.
+ `artifacts`— Folder yang berisi file.zip dengan fungsi untuk agen dan template basis pengetahuan:
  + Lambda berfungsi untuk kelompok aksi agen
    + `agent_loan_calculator.zip`
    + `mls_lookup.zip`
    + `loader_deployment_package.zip`
  + Fungsi untuk menyiapkan basis pengetahuan
    + `custom-resource-lambda.zip`
    + `opensearchpy-layer.zip`
    + `provider-event-handler.zip`
+ `api-schema`— Folder yang berisi skema API untuk grup tindakan.
+ `knowledge-base-data-source`— Folder yang berisi PDF untuk Panduan [Penjualan Fannie Mae.](https://selling-guide.fanniemae.com/)
+ `templates`— Folder yang berisi template untuk sumber daya dalam alur ini, baik dalam format JSON dan YAMAL:
  + `main-stack-tmp`— Template utama yang menyebarkan template yang tersisa sebagai tumpukan bersarang. File ini diubah menjadi `main-stack` setelah skrip penyebaran dijalankan.
  + `guardrails-template`— Template untuk pagar pembatas yang akan dikaitkan dengan agen.
  + `prompts-template`— Template untuk petunjuk yang akan digunakan dalam aliran.
  + `kb-role-template`— Template untuk peran basis pengetahuan, yang akan digunakan baik oleh OpenSearch template maupun oleh template basis pengetahuan.
  + `oss-infra-template`— Template untuk penyimpanan vektor Amazon OpenSearch Tanpa Server yang akan digunakan untuk basis pengetahuan.
  + `kb-infra-template`— Template untuk basis pengetahuan pinjaman hipotek untuk dikaitkan dengan agen.
  + `agent-template`— Template untuk agen pemrosesan hipotek yang akan digunakan dalam aliran.
  + `mortgage-flow-template`— Template untuk aliran pemrosesan hipotek yang menggabungkan semua sumber daya.
+ `README.md`— File README yang menjelaskan langkah-langkah untuk menggunakan template.

Topik berikut menunjukkan CloudFormation template yang digunakan untuk setiap tumpukan. Tumpukan utama menyebarkan tumpukan yang tersisa sebagai tumpukan [bersarang](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html).

**Topics**
+ [Tumpukan utama](#getting-started-mortgage-templates-main)
+ [Tumpukan Pagar Batuan Dasar Amazon](#getting-started-mortgage-guardrail-templates)
+ [Tumpukan manajemen Amazon Bedrock Prompt](#getting-started-mortgage-prompts-templates)
+ [Tumpukan Basis Pengetahuan Amazon Bedrock](#getting-started-mortgage-kb-templates)

## Tumpukan utama
<a name="getting-started-mortgage-templates-main"></a>

Tumpukan utama mendefinisikan parameter yang dapat Anda tentukan saat Anda mengunggah template. Nilai-nilai ini diteruskan ke masing-masing tumpukan bersarang yang tersisa. Skrip penerapan menggantikan *MortgageFlowBucket* nilai default `Q01pS3BucketName` parameter dengan bucket S3 Anda yang sebenarnya yang berisi sumber daya yang digunakan oleh skrip.

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

------

## Tumpukan Pagar Batuan Dasar Amazon
<a name="getting-started-mortgage-guardrail-templates"></a>

Tumpukan ini membuat sumber daya terkait [pagar pembatas](guardrails.md) berikut:
+ AgentGuardrail ([AWS::Bedrock::Guardrail](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide                         /aws-resource-bedrock-guardrail.html)) - Pagar pembatas yang menyediakan penyaringan konten, kebijakan topik, dan perlindungan PII. Pagar pembatas ini akan dilampirkan ke agen di tumpukan Agen.
+ AgentGuardrailVersion ([AWS::Bedrock::GuardrailVersion](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide                         /aws-resource-bedrock-guardrailversion.html)) — Versi `AgentGuardrail` sumber daya yang diterapkan pada agen.

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

------

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

Tumpukan ini membuat sumber daya [prompt](prompt-management.md) ([AWS::IAM::Prompt](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide                     /aws-resource-bedrock-prompt.html)) berikut, yang ditambahkan ke alur:
+ RejectionPrompt — Prompt yang mengembalikan surat penolakan yang dihasilkan berdasarkan informasi keuangan.
+ ProcessApplicationPrompt — Prompt yang mengirimkan informasi keuangan pelanggan ke agen dan meminta agen untuk menilai apakah pelanggan memenuhi syarat untuk pinjaman.

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

------

## Tumpukan Basis Pengetahuan Amazon Bedrock
<a name="getting-started-mortgage-kb-templates"></a>

Template ini menciptakan [basis pengetahuan](knowledge-base.md) dan sumber datanya yang berisi pedoman pinjaman:
+ 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"
    }
  }
}
```

------

# Rincian tentang aliran pemrosesan hipotek
<a name="getting-started-mortgage-flow-details"></a>

Representasi visual dari aliran pemrosesan hipotek di Konsol Manajemen AWS adalah sebagai berikut:

![\[Aliran pemrosesan hipotek\]](http://docs.aws.amazon.com/id_id/bedrock/latest/userguide/images/cloudformation/mortgage-processing-flow.png)


## Langkah-langkah dalam aliran
<a name="getting-started-mortgage-flow-steps"></a>

Langkah-langkah berikut terjadi dalam aliran:

1. Informasi keuangan pelanggan dari input dikirim ke fungsi `loanCalculator` Lambda, yang menghitung pinjaman maksimum yang terjangkau pelanggan.

1. Output dari `loanCalculator` fungsi (`maximumAffordableLoan`) dan `loanAmount` nilai dari input dikirim ke node kondisi, yang kemudian dievaluasi sebagai berikut:
   + Jika `loanAmount` lebih besar dari`maximumAffordableLoan`, `incomeDebt` prompt dipicu dan surat penolakan untuk pinjaman dihasilkan.
   + Jika tidak, informasi keuangan pelanggan dikirim `mortgageProcessingAgent` oleh `processApplication` prompt. Agen menerapkan fungsi kalkulator pinjaman, serta fungsi pencarian Multiple Listing Service (MLS) untuk mencari tabel DynamoDB dan menilai informasi pelanggan sehubungan dengan properti MLS yang ditentukan dalam input. Selanjutnya, agen mencari informasi dari basis pengetahuan, yang berisi Panduan Penjualan Fannie Mae. Agen menggunakan semua informasi ini untuk menghasilkan respons yang menganalisis kelayakan pelanggan untuk jumlah pinjaman yang diminta.