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;
numberOfResultsadalah 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
RetrievemaupunRetrieveAndGenerate.
Jumlah potongan
retrievalConfiguration={"vectorSearchConfiguration": {"numberOfResults": 10}}
| Nilai | Efeknya |
|---|---|
| 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}},
]
}
| Operator | Contoh pemakaian |
|---|---|
equals, notEquals | Departemen, tenant, tingkat kerahasiaan |
in, notIn | Daftar bahasa atau kategori |
greaterThan, lessThan | Tanggal, versi dokumen |
startsWith | Awalan path di S3 |
andAll, orAll | Menggabungkan 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"
}
| Jenis | Unggul saat | Lemah saat |
|---|---|---|
| Semantic | Pertanyaan berupa parafrase atau konsep | Kode produk, nomor pasal, singkatan |
| Hybrid | Campuran keduanya — pilihan aman | Perlu 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
- Chunking — dampak terbesar, dan mengubahnya berarti ingest ulang.
- Filter metadata — murah, cepat, langsung terasa.
- Hybrid search — satu setelan, sering langsung menolong.
- Jumlah potongan — coba 5, 10, 20 dan ukur.
- Reranker — materi berikutnya.
- 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.