

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

# Terapkan kasus penggunaan RAG AWS dengan menggunakan Terraform dan Amazon Bedrock
<a name="deploy-rag-use-case-on-aws"></a>

*Martin Maritsch, Nicolas Jacob Baer, Olivier Brique, Julian Ferdinand Grueber, Alice Morano, dan Nicola D Orazio, Amazon Web Services*

## Ringkasan
<a name="deploy-rag-use-case-on-aws-summary"></a>

AWS menyediakan berbagai opsi untuk membangun kasus penggunaan AI generatif yang diaktifkan [Retrieval Augmented Generation (RAG)](https://aws.amazon.com/what-is/retrieval-augmented-generation/). Pola ini memberi Anda solusi untuk aplikasi berbasis RAG berdasarkan LangChain dan kompatibel dengan Amazon Aurora PostgreSQL sebagai penyimpanan vektor. Anda dapat langsung menerapkan solusi ini dengan Terraform ke dalam Akun AWS dan menerapkan kasus penggunaan RAG sederhana berikut:

1. Pengguna mengunggah file secara manual ke bucket Amazon Simple Storage Service (Amazon S3), seperti file Microsoft Excel atau dokumen PDF. (Untuk informasi selengkapnya tentang jenis file yang didukung, lihat Dokumentasi [tidak terstruktur](https://docs.unstructured.io/open-source/core-functionality/partitioning).)

1. Isi file diekstraksi dan disematkan ke dalam database pengetahuan yang didasarkan pada Aurora PostgreSQL kompatibel tanpa server, yang mendukung konsumsi dokumen secara real-time ke dalam penyimpanan vektor. Pendekatan ini memungkinkan model RAG untuk mengakses dan mengambil informasi yang relevan untuk kasus penggunaan di mana latensi rendah penting.

1. Ketika pengguna terlibat dengan model pembuatan teks, itu meningkatkan interaksi melalui augmentasi pengambilan konten yang relevan dari file yang diunggah sebelumnya.

Pola ini menggunakan [Amazon Titan Text Embeddings v2](https://docs.aws.amazon.com/bedrock/latest/userguide/titan-embedding-models.html) sebagai model embedding dan [Anthropic Claude 3 Soneta](https://aws.amazon.com/bedrock/claude/) sebagai model pembuatan teks, keduanya tersedia di Amazon Bedrock.

## Prasyarat dan batasan
<a name="deploy-rag-use-case-on-aws-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS.
+ AWS Command Line Interface (AWS CLI) diinstal dan dikonfigurasi dengan Anda Akun AWS. Untuk petunjuk [penginstalan, lihat Menginstal atau memperbarui ke versi terbaru](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) dari AWS CLI dokumentasi. AWS CLI Untuk meninjau AWS kredensi Anda dan akses Anda ke akun Anda, lihat [Pengaturan konfigurasi dan file kredensi dalam dokumentasi](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html). AWS CLI 
+ Akses model yang diaktifkan untuk model bahasa besar yang diperlukan (LLMs) di konsol Amazon Bedrock Anda Akun AWS. Pola ini membutuhkan yang berikut LLMs:
  + `amazon.titan-embed-text-v2:0`
  + `anthropic.claude-3-sonnet-20240229-v1:0`

**Batasan**
+ Contoh arsitektur ini tidak menyertakan antarmuka untuk menjawab pertanyaan terprogram dengan database vektor. Jika kasus penggunaan Anda memerlukan API, pertimbangkan untuk menambahkan [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide) dengan AWS Lambda fungsi yang menjalankan tugas pengambilan dan penjawab pertanyaan. 
+ Contoh arsitektur ini tidak menyertakan fitur pemantauan untuk infrastruktur yang digunakan. Jika kasus penggunaan Anda memerlukan pemantauan, pertimbangkan untuk menambahkan [layanan AWS pemantauan](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/welcome.html).
+ Jika Anda mengunggah banyak dokumen dalam jangka waktu singkat ke bucket Amazon S3, fungsi Lambda mungkin mengalami batas tarif. Sebagai solusinya, Anda dapat memisahkan fungsi Lambda dengan antrian Amazon Simple Queue Service (Amazon SQS) di mana Anda dapat mengontrol laju pemanggilan Lambda.
+ Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat [Layanan AWS berdasarkan Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat [Titik akhir dan kuota layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

**Versi produk**
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) versi 2 atau yang lebih baru
+ [Docker](https://docs.docker.com/get-started/) versi 26.0.0 atau yang lebih baru
+ [Puisi](https://pypi.org/project/poetry/) versi 1.7.1 atau yang lebih baru
+ [Python](https://www.python.org/downloads/) versi 3.10 atau yang lebih baru
+ [Terraform](https://developer.hashicorp.com/terraform/install) versi 1.8.4 atau yang lebih baru

## Arsitektur
<a name="deploy-rag-use-case-on-aws-architecture"></a>

Diagram berikut menunjukkan alur kerja dan komponen arsitektur untuk pola ini.

![Alur kerja untuk membuat aplikasi berbasis RAG menggunakan Aurora PostgreSQL dan di Amazon Bedrock. LLMs](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/8f184945-7f17-4760-8806-6d0eaeef372a/images/3771b7a0-05bd-4eb3-ad5b-199e22f86184.png)


Diagram ini menggambarkan hal berikut:

1. Saat objek dibuat di bucket Amazon S3`bedrock-rag-template-<account_id>`, notifikasi Amazon [S3 akan memanggil fungsi Lambda](https://docs.aws.amazon.com/AmazonS3/latest/userguide/EventNotifications.html). `data-ingestion-processor`

1. Fungsi Lambda `data-ingestion-processor` didasarkan pada image Docker yang disimpan di repositori Amazon Elastic Container Registry (Amazon ECR) Registry ECR). `bedrock-rag-template`

   Fungsi ini menggunakan [LangChain S3 FileLoader](https://python.langchain.com/v0.1/docs/integrations/document_loaders/aws_s3_file/) untuk membaca file sebagai [LangChain Dokumen](https://api.python.langchain.com/en/v0.0.339/schema/langchain.schema.document.Document.html). Kemudian, [LangChain RecursiveCharacterTextSplitter](https://python.langchain.com/v0.1/docs/modules/data_connection/document_transformers/recursive_text_splitter/)potongan setiap dokumen, diberi a `CHUNK_SIZE` dan a `CHUNK_OVERLAP` yang bergantung pada ukuran token maksimum model penyematan Amazon Titan Text Embedding V2. Selanjutnya, fungsi Lambda memanggil model embedding di Amazon Bedrock untuk menyematkan potongan ke dalam representasi vektor numerik. Terakhir, vektor-vektor ini disimpan dalam database Aurora PostgreSQL. Untuk mengakses database, fungsi Lambda pertama-tama mengambil nama pengguna dan kata sandi dari. AWS Secrets Manager

1. Pada [instance notebook](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi.html) Amazon SageMaker AI`aws-sample-bedrock-rag-template`, pengguna dapat menulis prompt pertanyaan. Kode memanggil Claude 3 di Amazon Bedrock dan menambahkan informasi basis pengetahuan ke konteks prompt. Akibatnya, Claude 3 memberikan tanggapan menggunakan informasi dalam dokumen.

Pendekatan pola ini terhadap jaringan dan keamanan adalah sebagai berikut:
+ Fungsi Lambda `data-ingestion-processor` ada di subnet pribadi dalam virtual private cloud (VPC). Fungsi Lambda tidak diizinkan untuk mengirim lalu lintas ke internet publik karena grup keamanannya. Akibatnya, lalu lintas ke Amazon S3 dan Amazon Bedrock dirutekan melalui titik akhir VPC saja. Akibatnya, lalu lintas tidak melintasi internet publik, yang mengurangi latensi dan menambahkan lapisan keamanan tambahan di tingkat jaringan.
+ Semua sumber daya dan data dienkripsi kapan pun berlaku dengan menggunakan kunci AWS Key Management Service (AWS KMS) dengan alias. `aws-sample/bedrock-rag-template`

**Otomatisasi dan skala**

Pola ini menggunakan Terraform untuk menyebarkan infrastruktur dari repositori kode ke file. Akun AWS

## Alat
<a name="deploy-rag-use-case-on-aws-tools"></a>

**Layanan AWS**
+ [Amazon Aurora PostgreSQL Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) adalah mesin database relasional yang dikelola sepenuhnya dan sesuai dengan ACID yang membantu Anda mengatur, mengoperasikan, dan menskalakan penerapan PostgreSQL. Dalam pola ini, Aurora PostgreSQL kompatibel menggunakan plugin pgvector sebagai database vektor.
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) adalah layanan yang dikelola sepenuhnya yang membuat model foundation berkinerja tinggi (FMs) dari startup AI terkemuka dan Amazon tersedia untuk Anda gunakan melalui API terpadu.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) adalah alat open source yang membantu Anda berinteraksi Layanan AWS melalui perintah di shell baris perintah Anda.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal. Dalam pola ini, Amazon ECR meng-host image Docker untuk fungsi Lambda`data-ingestion-processor`.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) membantu Anda membuat dan mengontrol kunci kriptografi untuk membantu melindungi data Anda.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan. Dalam pola ini, Lambda menyerap data ke dalam penyimpanan vektor.
+ [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/?id=docs_gateway) adalah layanan pembelajaran mesin terkelola (ML) yang membantu Anda membuat dan melatih model ML, lalu menerapkannya ke lingkungan host yang siap produksi.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)membantu Anda mengganti kredensi hardcode dalam kode Anda, termasuk kata sandi, dengan panggilan API ke Secrets Manager untuk mengambil rahasia secara terprogram.
+ [Amazon Simple Storage Service (Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) membantu Anda meluncurkan AWS sumber daya ke jaringan virtual yang telah Anda tentukan. Jaringan virtual ini menyerupai jaringan tradisional yang akan Anda operasikan di pusat data Anda sendiri, dengan manfaat menggunakan infrastruktur yang dapat diskalakan. AWS VPC mencakup subnet dan tabel routing untuk mengontrol arus lalu lintas.

**Alat-alat lainnya**
+ [Docker](https://docs.docker.com/manuals/) adalah seperangkat produk platform as a service (PaaS) yang menggunakan virtualisasi pada tingkat sistem operasi untuk mengirimkan perangkat lunak dalam wadah.
+ [HashiCorp Terraform](https://www.terraform.io/docs) adalah alat infrastruktur sebagai kode (IAc) yang membantu Anda menggunakan kode untuk menyediakan dan mengelola infrastruktur dan sumber daya cloud.
+ [Puisi](https://pypi.org/project/poetry/) adalah alat untuk manajemen ketergantungan dan pengemasan dengan Python.
+ [Python adalah bahasa](https://www.python.org/) pemrograman komputer tujuan umum.

**Repositori kode**

Kode untuk pola ini tersedia di repositori GitHub [terraform-rag-template-using-amazon-bedrock](https://github.com/aws-samples/terraform-rag-template-using-amazon-bedrock).

## Praktik terbaik
<a name="deploy-rag-use-case-on-aws-best-practices"></a>
+ Meskipun contoh kode ini dapat digunakan di mana pun Wilayah AWS, kami menyarankan Anda menggunakan US East (Virginia N.) — `us-east-1` atau US West (California N.) —. `us-west-1` Rekomendasi ini didasarkan pada ketersediaan fondasi dan model penyematan di Amazon Bedrock pada saat publikasi pola ini. Untuk up-to-date daftar dukungan model fondasi Amazon Bedrock di Wilayah AWS, lihat [Dukungan model oleh Wilayah AWS](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html) dalam dokumentasi Amazon Bedrock. Untuk informasi tentang menerapkan contoh kode ini ke Wilayah lain, lihat [Informasi tambahan](#deploy-rag-use-case-on-aws-additional).
+ Pola ini hanya menyediakan proof-of-concept (PoC) atau demo percontohan. Jika Anda ingin membawa kode ke produksi, pastikan untuk menggunakan praktik terbaik berikut:
  + Aktifkan pencatatan akses server untuk Amazon S3.
  + Siapkan [pemantauan dan peringatan untuk fungsi](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html) Lambda.
  + Jika kasus penggunaan Anda memerlukan API, pertimbangkan untuk menambahkan Amazon API Gateway dengan fungsi Lambda yang menjalankan tugas pengambilan dan penjawab pertanyaan.
+ Ikuti prinsip hak istimewa terkecil dan berikan izin minimum yang diperlukan untuk melakukan tugas. Untuk informasi selengkapnya, lihat [Berikan hak istimewa terkecil](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) dan [praktik terbaik Keamanan](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html) dalam dokumentasi IAM.

## Epik
<a name="deploy-rag-use-case-on-aws-epics"></a>

### Terapkan solusi dalam Akun AWS
<a name="deploy-the-solution-in-an-aws-account"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | Untuk mengkloning GitHub repositori yang disediakan dengan pola ini, gunakan perintah berikut:<pre>git clone https://github.com/aws-samples/terraform-rag-template-using-amazon-bedrock</pre> | AWS DevOps | 
| Konfigurasikan variabel. | Untuk mengkonfigurasi parameter untuk pola ini, lakukan hal berikut:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html) | AWS DevOps | 
| Menyebarkan solusinya. | Untuk menerapkan solusi, lakukan hal berikut:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html)Penyebaran infrastruktur menyediakan instance SageMaker AI di dalam VPC dan dengan izin untuk mengakses database Aurora PostgreSQL. | AWS DevOps | 

### Pengujian solusi
<a name="test-the-solution"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jalankan demo. | Setelah penerapan infrastruktur sebelumnya berhasil, gunakan langkah-langkah berikut untuk menjalankan demo di notebook Jupyter:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html)Notebook Jupyter memandu Anda melalui proses berikut:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html) | AWS Umum | 

### Bersihkan infrastur
<a name="clean-up-infrastucture"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Bersihkan infrastruktur. | Untuk menghapus semua sumber daya yang Anda buat saat tidak lagi diperlukan, gunakan perintah berikut:<pre>terraform destroy -var-file=commons.tfvars</pre> | AWS DevOps | 

## Sumber daya terkait
<a name="deploy-rag-use-case-on-aws-resources"></a>

**AWS sumber daya**
+ [Membangun fungsi Lambda dengan Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ [Parameter inferensi untuk model pondasi](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html)
+ [Akses ke model fondasi Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
+ [Peran database vektor dalam aplikasi AI generatif](https://aws.amazon.com/blogs/database/the-role-of-vector-datastores-in-generative-ai-applications/) (Blog AWS Database)
+ [Bekerja dengan Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)

**Sumber daya lainnya**
+ [dokumentasi pgvector](https://github.com/pgvector/pgvector)

## Informasi tambahan
<a name="deploy-rag-use-case-on-aws-additional"></a>

**Menerapkan database vektor**

Pola ini menggunakan Aurora PostgreSQL kompatibel untuk mengimplementasikan database vektor untuk RAG. Sebagai alternatif untuk Aurora PostgreSQL, AWS menyediakan kemampuan dan layanan lain untuk RAG, seperti Amazon Bedrock Knowledge Bases dan Amazon Service. OpenSearch Anda dapat memilih solusi yang paling sesuai dengan kebutuhan spesifik Anda:
+ [Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html) menyediakan mesin pencari dan analitik terdistribusi yang dapat Anda gunakan untuk menyimpan dan menanyakan data dalam jumlah besar.
+ [Amazon Bedrock Knowledge Bases](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html) dirancang untuk membangun dan menyebarkan basis pengetahuan sebagai abstraksi tambahan untuk menyederhanakan proses konsumsi dan pengambilan RAG. Pangkalan Pengetahuan Amazon Bedrock dapat bekerja dengan Aurora PostgreSQL dan Amazon Service. OpenSearch 

**Menyebarkan ke yang lain Wilayah AWS**

Seperti yang dijelaskan dalam [Arsitektur](#deploy-rag-use-case-on-aws-architecture), kami menyarankan Anda menggunakan Region US East (Virginia N.) — `us-east-1` atau US West (California N.) — `us-west-1` untuk menyebarkan contoh kode ini. Namun, ada dua cara yang mungkin untuk menyebarkan contoh kode ini ke Wilayah selain `us-east-1` dan`us-west-1`. Anda dapat mengonfigurasi Wilayah penyebaran dalam `commons.tfvars` file. Untuk akses model pondasi lintas wilayah, pertimbangkan opsi berikut:
+ **Melintasi internet publik** — Jika lalu lintas dapat melintasi internet publik, tambahkan gateway internet ke VPC. Kemudian, sesuaikan grup keamanan yang ditetapkan ke fungsi Lambda `data-ingestion-processor` dan instance notebook SageMaker AI untuk memungkinkan lalu lintas keluar ke internet publik.
+ **Tidak melintasi internet publik** — Untuk menyebarkan sampel ini ke Wilayah mana pun selain `us-east-1` atau`us-west-1`, lakukan hal berikut:

1. Di `us-west-1` Wilayah `us-east-1` atau, buat VPC tambahan termasuk titik akhir VPC untuk. `bedrock-runtime` 

1. Buat koneksi peering dengan menggunakan [VPC](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html) peering atau gateway [transit ke aplikasi](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-peering.html) VPC.

1. Saat mengonfigurasi klien `bedrock-runtime` boto3 dalam fungsi Lambda apa pun di luar `us-east-1` atau`us-west-1`, teruskan nama DNS pribadi dari titik akhir VPC untuk `bedrock-runtime` in `us-east-1` atau us-west-1 sebagai ke klien boto3. `endpoint_url`