← Semua pembelajaran / AWS untuk AI Engineer
Fase 4 · RAG & Knowledge Bases

Menyetel retrieval

Retrieval bawaan sudah jalan, tapi jarang optimal. Halaman ini merangkum setelan yang benar-benar mengubah kualitas jawaban.

Intisari

  • Default mengembalikan hingga lima potongan; numberOfResults adalah batas atas, bukan jaminan.
  • Filter metadata adalah cara termurah menaikkan presisi — dan cara menerapkan isolasi antar tenant.
  • Hybrid search menggabungkan pencarian semantik dan kata kunci; menolong untuk istilah teknis dan kode produk.
  • Prompt generasi bisa diganti — di situlah kamu memaksa model menjawab hanya dari konteks.
  • Reranker bisa dipasang di jalur Retrieve maupun RetrieveAndGenerate.

Jumlah potongan

retrievalConfiguration={"vectorSearchConfiguration": {"numberOfResults": 10}}
NilaiEfeknya
Terlalu sedikit (1–3)Jawaban benar sering tidak ikut terambil
Sedang (5–10)Titik awal yang sehat
Terlalu banyak (20+)Konteks penuh derau, biaya token naik, model justru bingung

Ingat dua hal: nilai ini adalah maksimum, dan pada chunking hierarkis ia mengacu ke potongan anak — yang lalu digabung jadi induk, sehingga hasil akhirnya bisa lebih sedikit.

Filter metadata

"filter": {
    "andAll": [
        {"equals": {"key": "tenant", "value": tenant_pengguna}},
        {"in":     {"key": "bahasa", "value": ["id", "en"]}},
        {"greaterThanOrEquals": {"key": "tahun", "value": 2024}},
    ]
}
OperatorContoh pemakaian
equals, notEqualsDepartemen, tenant, tingkat kerahasiaan
in, notInDaftar bahasa atau kategori
greaterThan, lessThanTanggal, versi dokumen
startsWithAwalan path di S3
andAll, orAllMenggabungkan beberapa syarat

Filter tenant harus datang dari identitas, bukan dari permintaan. Kalau nilai tenant diambil dari body permintaan, pengguna bisa mengubahnya dan membaca data tenant lain. Ambil dari klaim token yang sudah diverifikasi authorizer API Gateway. Ini bentuk konkret least privilege di lapisan data.

Hybrid search

"vectorSearchConfiguration": {
    "numberOfResults": 10,
    "overrideSearchType": "HYBRID",     # atau "SEMANTIC"
}
JenisUnggul saatLemah saat
SemanticPertanyaan berupa parafrase atau konsepKode produk, nomor pasal, singkatan
HybridCampuran keduanya — pilihan amanPerlu vector store yang mendukungnya

Contoh konkret: pertanyaan "berapa lama garansi SKU-4471?" gagal pada pencarian murni semantik karena "SKU-4471" tidak punya makna semantik. Hybrid menemukannya lewat pencocokan kata kunci.

Mengganti prompt generasi

"generationConfiguration": {
    "promptTemplate": {
        "textPromptTemplate": (
            "Kamu asisten internal. Jawab HANYA berdasarkan kutipan di bawah.\n"
            "Kalau jawabannya tidak ada di kutipan, katakan: "
            "\"Informasi itu tidak ada di dokumen yang saya punya.\"\n"
            "Jawab dalam bahasa Indonesia dan sebutkan sumbernya.\n\n"
            "$search_results$\n\nPertanyaan: $query$"
        )
    },
    "inferenceConfig": {"textInferenceConfig": {"temperature": 0.0, "maxTokens": 800}},
}

Placeholder $search_results$ dan $query$ diisi Bedrock. Instruksi "kalau tidak ada, katakan tidak ada" adalah penangkal halusinasi termurah yang kamu punya — dan ia masuk ke Domain 3 (hallucination reduction) di ujian.

Urutan menyetel

  1. Chunking — dampak terbesar, dan mengubahnya berarti ingest ulang.
  2. Filter metadata — murah, cepat, langsung terasa.
  3. Hybrid search — satu setelan, sering langsung menolong.
  4. Jumlah potongan — coba 5, 10, 20 dan ukur.
  5. Reranker — materi berikutnya.
  6. Prompt generasi — untuk nada dan pengendalian halusinasi.

Latihan: ambil satu pertanyaan yang jawabannya saat ini salah. Coba perbaiki dengan tiga langkah berurutan: naikkan numberOfResults, aktifkan hybrid search, lalu ganti prompt generasi. Catat mana yang benar-benar memperbaikinya — jawaban itu berbeda per korpus, dan hanya bisa didapat lewat pengukuran.

Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.