Reranker
Reranker menilai relevansi tiap potongan terhadap pertanyaan dan mengurutkannya ulang. Hasilnya: potongan lebih sedikit tapi lebih tepat, sehingga jawaban membaik dan biaya turun.
Intisari
- Reranker menghitung skor relevansi potongan terhadap query, lalu mengurutkan ulang.
- Hasil rerank menimpa urutan bawaan Knowledge Bases.
- Dua cara pakai: operasi
Reranklangsung, atau disisipkan diRetrieve/RetrieveAndGenerate. - Karena potongan yang dikirim jadi lebih sedikit, biaya dan latensi generasi turun.
- Hanya untuk data teks.
Masalah yang diperbaiki
Pencarian vektor cepat tapi kasar: ia membandingkan satu vektor pertanyaan dengan satu vektor potongan. Reranker membaca pasangan pertanyaan dan potongan bersamaan, sehingga bisa menilai relevansi jauh lebih akurat — dengan biaya komputasi yang lebih besar.
Karena itu polanya dua tahap:
Pencarian vektor ──▶ 25 kandidat (cepat, kasar)
Reranker ──▶ 5 terbaik (lambat, akurat)
Model generasi ──▶ jawaban (hanya 5 potongan → murah)
Disisipkan ke Knowledge Bases
hasil = agen.retrieve(
knowledgeBaseId=KB_ID,
retrievalQuery={"text": pertanyaan},
retrievalConfiguration={"vectorSearchConfiguration": {
"numberOfResults": 25, # ambil banyak
"rerankingConfiguration": {
"type": "BEDROCK_RERANKING_MODEL",
"bedrockRerankingConfiguration": {
"modelConfiguration": {"modelArn": RERANK_MODEL_ARN},
"numberOfRerankedResults": 5, # kirim sedikit
},
},
}},
)
Dipakai langsung
Operasi Rerank berdiri sendiri, jadi kamu bisa mengurutkan ulang dokumen dari sumber mana pun —
tidak harus dari knowledge base:
agen = boto3.client("bedrock-agent-runtime")
resp = agen.rerank(
queries=[{"type": "TEXT", "textQuery": {"text": pertanyaan}}],
sources=[
{"type": "INLINE",
"inlineDocumentSource": {"type": "TEXT", "textDocument": {"text": d}}}
for d in dokumen
],
rerankingConfiguration={
"type": "BEDROCK_RERANKING_MODEL",
"bedrockRerankingConfiguration": {
"modelConfiguration": {"modelArn": RERANK_MODEL_ARN},
"numberOfResults": 5,
},
},
)
for r in resp["results"]:
print(f"{r['relevanceScore']:.3f} {dokumen[r['index']][:70]}")
Ini berguna untuk menggabungkan beberapa sumber: hasil knowledge base, hasil pencarian internal, dan hasil API pihak ketiga bisa diurutkan bersama dalam satu skala relevansi.
Reranker menambah biaya dan latensi per permintaan, tapi sering menurunkan total biaya. Mengambil 25 lalu mengirim 5 potongan ke model biasanya lebih murah daripada mengirim 20 potongan mentah — karena token generasi jauh lebih mahal daripada satu panggilan rerank. Ukur keduanya sebelum memutuskan.
Kapan dipakai dan kapan tidak
| Situasi | Reranker menolong? |
|---|---|
| Korpus besar dengan banyak dokumen mirip | Sangat |
| Pertanyaan panjang dan bernuansa | Sangat |
| Jawaban benar sering di peringkat 6–15 | Ya — ini gejala klasiknya |
| Korpus kecil, potongan sudah jelas berbeda | Kurang berarti |
| Masalahnya potongan yang benar tidak ikut terambil | Tidak — perbaiki chunking dan filter dulu |
| Data non-teks | Tidak didukung |
Baris kelima itu penting sebagai alat diagnosis. Reranker hanya bisa mengurutkan ulang apa yang sudah terambil. Kalau potongan yang benar tidak pernah masuk ke 25 kandidat, akar masalahnya di chunking, embedding, atau filter — dan reranker tidak akan menolong sama sekali.
Latihan: ambil sepuluh pertanyaan uji dari latihan chunking. Jalankan dengan
numberOfResults=5 tanpa reranker, lalu dengan 25 kandidat + rerank ke 5. Bandingkan berapa kali
potongan yang benar ada di posisi teratas, dan hitung selisih total token yang dikirim ke model generasi.
Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.