32 lines
1.2 KiB
Python
32 lines
1.2 KiB
Python
"""Lab 2 - Cari di indeks.
|
|
|
|
Pakai:
|
|
python cari.py # mode interaktif, koleksi pedoman_800
|
|
python cari.py 1000 # pakai koleksi pedoman_1000
|
|
python cari.py 800 "Apa syarat cuti akademik?" # satu pertanyaan
|
|
Catatan: jarak lebih kecil = lebih mirip.
|
|
"""
|
|
import sys
|
|
from umum import ambil_embedding, buka_klien, ambil_koleksi, nama_koleksi
|
|
|
|
ukuran = int(sys.argv[1]) if len(sys.argv) > 1 else 800
|
|
emb = ambil_embedding()
|
|
koleksi = ambil_koleksi(buka_klien(), nama_koleksi(ukuran), emb)
|
|
|
|
def tampilkan(pertanyaan, k=3):
|
|
hasil = koleksi.query(query_texts=[pertanyaan], n_results=k)
|
|
print(f"\nPertanyaan: {pertanyaan}")
|
|
for doc, meta, jarak in zip(hasil["documents"][0], hasil["metadatas"][0], hasil["distances"][0]):
|
|
print(f"[{meta['sumber']} - hal {meta.get('halaman', '?')} - chunk {meta['chunk']}] jarak={jarak:.3f}")
|
|
print(" ", doc[:200].replace("\n", " "), "...\n")
|
|
|
|
if len(sys.argv) > 2:
|
|
tampilkan(" ".join(sys.argv[2:]))
|
|
else:
|
|
print(f"Koleksi {koleksi.name} ({koleksi.count()} chunk). Ketik 'keluar' untuk berhenti.")
|
|
while True:
|
|
q = input("\nTanya: ").strip()
|
|
if q.lower() in {"keluar", "exit", ""}:
|
|
break
|
|
tampilkan(q)
|