View a markdown version of this page

Membangun aplikasi RAG menggunakan Amazon Bedrock Knowledge Bases - fsX untuk ONTAP

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

Membangun aplikasi RAG menggunakan Amazon Bedrock Knowledge Bases

Banyak perusahaan mengumpulkan repositori besar dokumen pada berbagi file NFS dan SMB mereka - manual produk, dokumen kebijakan, kontrak, laporan penelitian, spesifikasi teknik, dan konten yang dibuat pengguna.

Dengan jalur akses Amazon S3 yang terpasang pada FSx untuk volume ONTAP, Pangkalan Pengetahuan Amazon Bedrock menyerap konten langsung dari volume. Foundation-model tanggapan didasarkan pada dokumen tempat tim Anda menyimpannya melalui NFS atau SMB. Konten yang diperbarui penulis pada bagian menjadi tersedia untuk basis pengetahuan pada sinkronisasi berikutnya.

Dalam tutorial ini, Anda mengunggah satu set kecil sampel PDF ke FSx Anda untuk volume ONTAP melalui jalur akses Amazon S3, membuat basis pengetahuan Amazon Bedrock yang mengarah ke titik akses, menelan dokumen, dan menjalankan pertanyaan melalui API. RetrieveAndGenerate

catatan

Tutorial ini membutuhkan waktu sekitar 35 hingga 45 menit untuk menyelesaikannya. Yang Layanan AWS digunakan dikenakan biaya untuk sumber daya yang Anda buat. Jika Anda menyelesaikan semua langkah, termasuk bagian Pembersihan segera, biaya yang diharapkan kurang dari $1 di AS Timur (Virginia Utara). Wilayah AWS Perkiraan ini tidak termasuk biaya yang sedang berlangsung untuk FSx untuk volume ONTAP itu sendiri.

Prasyarat

Sebelum Anda mulai, pastikan Anda memiliki yang berikut:

  • FSx untuk volume ONTAP dengan titik akses Amazon S3 terpasang. Jalur akses harus memiliki asal jaringan internet sehingga layanan Amazon Bedrock dapat mencapainya. Untuk petunjuk tentang cara membuat titik akses, lihatMembuat titik akses.

  • Akses model diaktifkan untuk model penyematan yang didukung oleh Pangkalan Pengetahuan Amazon Bedrock dan setidaknya satu model pembuatan teks (misalnya,amazon.nova-lite-v1:0) di Wilayah AWS tempat Anda akan membuat basis pengetahuan. Tutorial ini menggunakan amazon.titan-embed-text-v2:0 (1024 dimensi) sebagai model embedding; Cohere Embed model juga didukung. Jika Anda memilih model penyematan yang berbeda, sesuaikan dimensi indeks vektor di Langkah 2 agar sesuai dengan dimensi keluaran model. Akses model diaktifkan di konsol Amazon Bedrock di bawah akses Model. Untuk informasi selengkapnya, lihat Mengakses model foundation Amazon Bedrock di Panduan Pengguna Amazon Bedrock.

  • AWS CLI versi 2 diinstal dan dikonfigurasi dengan kredensil yang dapat membuat peran IAM, sumber daya Vektor Amazon S3, dan Pangkalan Pengetahuan Amazon Bedrock.

Langkah 1: Unggah dokumen sampel ke titik akses

Unduh beberapa PDF publik untuk digunakan sebagai korpus sampel, lalu unggah ke titik akses Anda menggunakan alias jalur akses Amazon S3.

  1. Buat direktori lokal dan unduh contoh PDF.

    $ mkdir -p ~/kb-pdfs && cd ~/kb-pdfs curl -sSL -o aws-overview.pdf https://d1.awsstatic.com/whitepapers/aws-overview.pdf curl -sSL -o wellarchitected-framework.pdf https://docs.aws.amazon.com/pdfs/wellarchitected/latest/framework/wellarchitected-framework.pdf curl -sSL -o s3-userguide.pdf https://docs.aws.amazon.com/pdfs/AmazonS3/latest/userguide/s3-userguide.pdf
  2. Unggah setiap file ke titik akses. Ganti access-point-alias dengan alias titik akses Anda (misalnya,my-kb-ap-a1b2c3d4e5f6g7h8i9j0kl1mnop2uuse1a-ext-s3alias). Anda dapat menemukan alias di konsol Amazon FSx di bawah titik akses Amazon S3 terlampir untuk volume Anda, atau dengan menjalankan. aws fsx describe-s3-access-point-attachments

    $ for f in *.pdf; do aws s3 cp "$f" "s3://access-point-alias/$f" done
  3. Verifikasi file yang mendarat di volume.

    $ aws s3 ls s3://access-point-alias/
catatan

Amazon Bedrock Knowledge Bases memberlakukan ukuran file maksimum 50 MB per dokumen. File yang lebih besar dari 50 MB dilewati selama konsumsi.

Langkah 2: Buat toko vektor

Basis pengetahuan menyimpan penyematan dokumen di toko vektor. Pangkalan Pengetahuan Amazon Bedrock mendukung beberapa penyimpanan vektor; tutorial ini menggunakan Vektor Amazon S3 sebagai default karena dioptimalkan biaya untuk beban kerja RAG dan memerlukan penyiapan minimal. Amazon OpenSearch Serverless juga didukung; lihat bagian yang dapat dilipat di akhir langkah ini untuk petunjuk tersebut.

Untuk membuat penyimpanan vektor menggunakan konsol

Jika Anda menggunakan konsol untuk membuat basis pengetahuanLangkah 4: Buat basis pengetahuan dan sumber data, pilih Cepat buat penyimpanan vektor baru di langkah database Vektor, dan pilih Vektor Amazon S3 (disarankan) atau Amazon Tanpa Server. OpenSearch Amazon Bedrock membuat penyimpanan vektor dan semua konfigurasi yang diperlukan secara otomatis. Lewati ke Langkah 3: Buat peran IAM untuk basis pengetahuan.

Untuk membuat penyimpanan vektor Amazon S3 Vectors menggunakan AWS CLI

  1. Buat bucket vektor Amazon S3. Nama bucket vektor mengikuti aturan keunikan global yang sama dengan bucket Amazon S3 standar. Tutorial ini menggunakanfsxn-kb-vectors; ganti dengan nama yang unik.

    $ aws s3vectors create-vector-bucket --vector-bucket-name fsxn-kb-vectors
  2. Buat indeks vektor di ember. Dimensi indeks harus sesuai dengan dimensi output dari model embedding; Titan Text Embeddings v2 menghasilkan 1024 dimensi. nonFilterableMetadataKeysPengaturan menandai bidang metadata Bedrock sebagai tidak dapat difilter, yang menjauhkannya dari batas metadata yang dapat difilter per vektor 2 KB.

    $ aws s3vectors create-index --vector-bucket-name fsxn-kb-vectors \ --index-name bedrock-kb-index \ --dimension 1024 --distance-metric cosine --data-type float32 \ --metadata-configuration '{"nonFilterableMetadataKeys":["AMAZON_BEDROCK_METADATA","AMAZON_BEDROCK_TEXT"]}'

    Perhatikan indexArn dalam respon; Anda menggunakannya diLangkah 4: Buat basis pengetahuan dan sumber data.

Jika Anda lebih suka OpenSearch Service Serverless (untuk kueri yang lebih tinggi per detik, fitur penelusuran lanjutan, atau keakraban operasional yang ada), gunakan langkah-langkah berikut alih-alih prosedur Vektor Amazon S3 di atas.

  1. Buat enkripsi dan kebijakan keamanan jaringan untuk koleksi.

    $ aws opensearchserverless create-security-policy --name kb-enc --type encryption \ --policy '{"Rules":[{"ResourceType":"collection","Resource":["collection/fsxn-kb"]}],"AWSOwnedKey":true}' aws opensearchserverless create-security-policy --name kb-net --type network \ --policy '[{"Rules":[{"ResourceType":"collection","Resource":["collection/fsxn-kb"]},{"ResourceType":"dashboard","Resource":["collection/fsxn-kb"]}],"AllowFromPublic":true}]'
  2. Buat kebijakan akses data yang memberikan peran basis pengetahuan dan izin pengguna Anda saat ini untuk membaca dan menulis koleksi. Ganti account-id dan current-user dengan nilai-nilai Anda.

    $ aws opensearchserverless create-access-policy --name kb-data --type data --policy '[{ "Rules":[ {"ResourceType":"index","Resource":["index/fsxn-kb/*"],"Permission":["aoss:*"]}, {"ResourceType":"collection","Resource":["collection/fsxn-kb"],"Permission":["aoss:*"]} ], "Principal":[ "arn:aws:iam::account-id:role/fsxn-kb-role", "arn:aws:iam::account-id:user/current-user" ] }]'
  3. Buat koleksi dan tunggu sampai menjadiACTIVE.

    $ aws opensearchserverless create-collection --name fsxn-kb --type VECTORSEARCH aws opensearchserverless batch-get-collection --names fsxn-kb \ --query 'collectionDetails[0].{status:status,endpoint:collectionEndpoint}'
  4. Buat indeks vektor pada koleksi menggunakan skrip Python dengan permintaan yang ditandatangani. Indeks harus menggunakan dimensi 1024 (untuk Titan Text Embeddings v2) dan nama bidang yang diharapkan oleh Amazon Bedrock Knowledge Bases. Untuk skrip lengkap dan langkah konfigurasi berikutnya, lihat Prasyarat untuk menggunakan OpenSearch Layanan Tanpa Server di Panduan Pengguna Amazon Bedrock. Gunakan ARN koleksi yang dihasilkan dan nama indeks di Langkah 4 dengan storage-configuration tipe. OPENSEARCH_SERVERLESS

Langkah 3: Buat peran IAM untuk basis pengetahuan

Basis pengetahuan memerlukan peran IAM yang dapat diasumsikan untuk memanggil model penyematan, membaca objek melalui jalur akses Amazon S3, dan mengakses penyimpanan vektor. Kebijakan yang ditunjukkan di bawah ini memberikan akses ke penyimpanan vektor Vektor Amazon S3. Jika Anda menggunakan OpenSearch Service Serverless sebagai gantinya, ganti S3Vectors pernyataan dengan pernyataan yang memberikan aoss:APIAccessAll pada koleksi ARN.

Untuk membuat peran menggunakan konsol

Saat Anda membuat basis pengetahuan menggunakan konsol Amazon Bedrock diLangkah 4: Buat basis pengetahuan dan sumber data, pilih Buat dan gunakan peran layanan baru. Amazon Bedrock menciptakan peran dengan kepercayaan dan izin yang diperlukan, yang mencakup basis pengetahuan Anda, model penyematan, penyimpanan vektor, dan sumber data. Lewati ke Langkah 4: Buat basis pengetahuan dan sumber data.

  1. Simpan kebijakan kepercayaan berikut sebagaikb-trust-policy.json. Hal ini memungkinkan Amazon Bedrock untuk mengambil peran. Ganti account-id dengan Akun AWS ID Anda.

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Service": "bedrock.amazonaws.com"}, "Action": "sts:AssumeRole", "Condition": {"StringEquals": {"aws:SourceAccount": "account-id"}} }] }
  2. Simpan kebijakan izin berikut sebagaikb-permissions.json. Ini memberikan akses ke model embedding, jalur akses Amazon S3, dan penyimpanan vektor. Ganti placeholder dengan nilai Anda.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "FoundationModel", "Effect": "Allow", "Action": ["bedrock:InvokeModel"], "Resource": ["arn:aws:bedrock:region::foundation-model/amazon.titan-embed-text-v2:0"] }, { "Sid": "S3AccessPoint", "Effect": "Allow", "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": [ "arn:aws:s3:region:account-id:accesspoint/access-point-name", "arn:aws:s3:region:account-id:accesspoint/access-point-name/object/*" ] }, { "Sid": "S3Vectors", "Effect": "Allow", "Action": [ "s3vectors:GetIndex", "s3vectors:PutVectors", "s3vectors:GetVectors", "s3vectors:ListVectors", "s3vectors:DeleteVectors", "s3vectors:QueryVectors" ], "Resource": [ "arn:aws:s3vectors:region:account-id:bucket/fsxn-kb-vectors", "arn:aws:s3vectors:region:account-id:bucket/fsxn-kb-vectors/index/*" ] } ] }
  3. Buat peran dan lampirkan kebijakan izin.

    $ aws iam create-role --role-name fsxn-kb-role \ --assume-role-policy-document file://kb-trust-policy.json aws iam put-role-policy --role-name fsxn-kb-role --policy-name kb-access \ --policy-document file://kb-permissions.json

Langkah 4: Buat basis pengetahuan dan sumber data

Sumber data menunjuk pada alias jalur akses Amazon S3 Anda. Amazon Bedrock Knowledge Bases menerima alias access point sebagai pengganti nama bucket.

Untuk membuat basis pengetahuan menggunakan konsol

  1. Buka konsol Amazon Bedrock di https://console.aws.amazon.com/bedrock/.

  2. Di panel navigasi kiri, pilih Basis pengetahuan, lalu pilih Buat basis pengetahuan.

  3. Di bawah Detail dasar Pengetahuan, masukkan nama (misalnya,fsxn-kb) dan deskripsi.

  4. Di bawah izin IAM, pilih Buat dan gunakan peran layanan baru.

  5. Untuk Sumber data, pilih Amazon S3, lalu pilih Berikutnya.

  6. Masukkan nama sumber data (misalnya,fsxn-s3ap-source).

  7. Untuk URI S3, masukkan s3:// diikuti dengan alias titik akses Anda, misalnya. s3://my-kb-ap-a1b2c3d4e5f6g7h8i9j0kl1mnop2uuse1a-ext-s3alias Konsol tidak membedakan antara nama bucket dan alias access point di bidang ini; alias access point diterima apa adanya.

  8. Pilih Berikutnya.

  9. Di bawah model Embeddings, pilih Titan Text Embeddings v2.

  10. Di bawah Database vektor, pilih Cepat buat penyimpanan vektor baru dan pilih Vektor Amazon S3. Pilih Berikutnya.

  11. Tinjau konfigurasi dan pilih Buat basis pengetahuan. Basis pengetahuan dapat memakan waktu beberapa menit untuk dibuat.

Untuk membuat basis pengetahuan menggunakan AWS CLI

  1. Buat basis pengetahuan. Ganti placeholder dengan nilai Anda. indexArnIni adalah ARN dari indeks vektor Amazon S3 yang Anda buat di Langkah 2.

    $ aws bedrock-agent create-knowledge-base --name fsxn-kb \ --role-arn arn:aws:iam::account-id:role/fsxn-kb-role \ --knowledge-base-configuration '{ "type":"VECTOR", "vectorKnowledgeBaseConfiguration":{ "embeddingModelArn":"arn:aws:bedrock:region::foundation-model/amazon.titan-embed-text-v2:0" } }' \ --storage-configuration '{ "type":"S3_VECTORS", "s3VectorsConfiguration":{ "indexArn":"index-arn" } }'

    Catat knowledgeBaseId dalam respons.

  2. Buat sumber data. Lewati alias jalur akses Amazon S3 sebagai nama bucket di bucketArn bidang, menggunakan formulir. arn:aws:s3:::access-point-alias

    $ aws bedrock-agent create-data-source \ --knowledge-base-id knowledge-base-id \ --name fsxn-s3ap-source \ --data-source-configuration '{ "type":"S3", "s3Configuration":{"bucketArn":"arn:aws:s3:::access-point-alias"} }'

    Catat dataSourceId dalam respons.

Langkah 5: Menelan dokumen

Jalankan tugas konsumsi untuk merayapi dokumen melalui titik akses, menghasilkan penyematan, dan mengindeksnya di penyimpanan vektor.

Untuk menjalankan konsumsi menggunakan konsol

  1. Di konsol Amazon Bedrock, buka basis pengetahuan Anda.

  2. Di bagian Sumber data, pilih sumber data Anda, lalu pilih Sinkronkan.

  3. Tunggu status Sinkronisasi ditampilkan Siap.

Untuk menjalankan konsumsi menggunakan AWS CLI

  1. Mulai pekerjaan menelan.

    $ aws bedrock-agent start-ingestion-job \ --knowledge-base-id knowledge-base-id \ --data-source-id data-source-id

    Catat ingestionJobId dalam respons.

  2. Polling pekerjaan sampai selesai.

    $ aws bedrock-agent get-ingestion-job \ --knowledge-base-id knowledge-base-id \ --data-source-id data-source-id \ --ingestion-job-id ingestion-job-id

    Transisi status lapangan dari IN_PROGRESS keCOMPLETE. statisticsBidang menunjukkan berapa banyak dokumen yang dipindai dan diindeks.

Langkah 6: Kueri basis pengetahuan

Ajukan basis pengetahuan pertanyaan yang didasarkan pada dokumen yang dicerna. Tanggapan tersebut mencakup kutipan yang mereferensikan dokumen sumber melalui alias jalur akses Amazon S3.

Untuk kueri menggunakan konsol

  1. Di konsol Amazon Bedrock, buka basis pengetahuan Anda.

  2. Pilih Basis pengetahuan Uji.

  3. Di bawah Menghasilkan tanggapan, pilih model pembuatan teks (misalnya, Nova Lite).

  4. Masukkan pertanyaan seperti What are the pillars of the AWS Well-Architected Framework? dan pilih Jalankan. Jawabannya ditampilkan dengan referensi kutipan yang menautkan ke dokumen sumber di jalur akses Amazon S3.

Untuk kueri menggunakan AWS CLI

Gunakan perintah retrieve-and-generate. Ganti placeholder dengan nilai Anda. modelArnHarus merujuk ke profil inferensi untuk model pembuatan teks yang dapat Anda akses.

$ aws bedrock-agent-runtime retrieve-and-generate \ --input '{"text":"What are the pillars of the AWS Well-Architected Framework?"}' \ --retrieve-and-generate-configuration '{ "type":"KNOWLEDGE_BASE", "knowledgeBaseConfiguration":{ "knowledgeBaseId":"knowledge-base-id", "modelArn":"arn:aws:bedrock:region:account-id:inference-profile/us.amazon.nova-lite-v1:0" } }'

Respons berisi jawaban yang dihasilkan output.text dan daftar kutipan dalam citations array. Setiap kutipan mencakup s3Location.uri bidang yang menunjuk ke dokumen sumber melalui alias titik akses, dalam formulir. s3://access-point-alias/file.pdf

Pemecahan masalah

File laporan pekerjaan menelan diabaikan

Amazon Bedrock Knowledge Bases memberlakukan ukuran file maksimum 50 MB per dokumen. File yang lebih besar dari 50 MB terdaftar failureReasons dan dilewati. Pisahkan atau kompres dokumen besar sebelum mengunggah.

ValidationException: model ditandai sebagai Legacy

Model pembuatan teks yang Anda tentukan tidak digunakan lagi untuk akun Anda. Pilih profil inferensi aktif, seperti us.amazon.nova-lite-v1:0 atau model lain yang saat ini didukung. Jalankan aws bedrock list-inference-profiles ke daftar profil yang tersedia.

AccessDeniedExceptionselama konsumsi

Verifikasi bahwa peran IAM basis pengetahuan memiliki s3:GetObject dan s3:ListBucket pada titik akses ARN (bukan pada volume yang mendasarinya) dan bahwa titik akses memiliki asal jaringan internet sehingga layanan Amazon Bedrock dapat mencapainya. Jika Anda memilih alternatif OpenSearch Service Serverless di Langkah 2, pastikan juga bahwa kebijakan akses data mencantumkan peran sebagai prinsipal.

Pekerjaan penyerapan berhasil tetapi kueri tidak mengembalikan bagian yang relevan

Konfirmasikan bahwa indeks vektor dibuat dengan dimension: 1024 (untuk Titan Text Embeddings v2) dan bahwa nama bidang dalam pemetaan indeks cocok dengan nama bidang yang dikonfigurasi pada basis pengetahuan.

Bersihkan

Untuk menghindari tagihan yang sedang berlangsung, hapus sumber daya yang Anda buat:

  • Basis pengetahuan Amazon Bedrock dan sumber data

  • Indeks vektor Amazon S3 dan bucket vektor (atau koleksi OpenSearch Service Serverless, jika Anda menggunakan alternatif di Langkah 2)

  • Peran IAM dan kebijakan inline

  • Objek yang diunggah ke titik akses (jika tidak diperlukan lagi)

$ aws bedrock-agent delete-data-source --knowledge-base-id knowledge-base-id --data-source-id data-source-id aws bedrock-agent delete-knowledge-base --knowledge-base-id knowledge-base-id aws s3vectors delete-index --vector-bucket-name fsxn-kb-vectors --index-name bedrock-kb-index aws s3vectors delete-vector-bucket --vector-bucket-name fsxn-kb-vectors aws iam delete-role-policy --role-name fsxn-kb-role --policy-name kb-access aws iam delete-role --role-name fsxn-kb-role

Jika Anda memilih alternatif OpenSearch Service Serverless di Langkah 2, ganti s3vectors perintah di atas dengan yang berikut ini. Idle OpenSearch Service Serverless koleksi dikenakan OCU-hour biaya, jadi hapus segera setelah Anda selesai dengan tutorial.

$ # Get the collection ID (required by delete-collection; the name is not accepted) COLLECTION_ID=$(aws opensearchserverless batch-get-collection --names fsxn-kb \ --query 'collectionDetails[0].id' --output text) # Delete the collection, then the policies aws opensearchserverless delete-collection --id "$COLLECTION_ID" aws opensearchserverless delete-access-policy --name kb-data --type data aws opensearchserverless delete-security-policy --name kb-net --type network aws opensearchserverless delete-security-policy --name kb-enc --type encryption