"""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)