Memakai helper kecil#
Helper kecil di zul.utilities yang tidak punya panduan sendiri: embedding palsu untuk test, logger, pengukur waktu, pembaca PDF, penyimpan hasil eksperimen, dan pengubah Document menjadi JSON. Setiap bagian berdiri sendiri.
Sebelum mulai: kamu butuh Zul yang sudah ter-install (Instalasi Zul). Tiga tugas membutuhkan extra: membaca PDF memakai extra pdf, menyimpan latency ke CSV memakai extra analysis, dan menjalankan graph LangGraph memakai extra llm. Perintah instalasinya ada di bagian masing-masing.
Membuat embedding palsu untuk test#
FakeEmbeddingModel menghasilkan vektor acak dengan dimensi yang kamu tentukan, sehingga alur insert dan search di vector database bisa diuji tanpa model embedding, GPU, atau API key.
-
Buat model dengan dimensi yang sama dengan field vektor di database-mu:
-
Ubah satu teks atau daftar teks menjadi vektor dengan
encode:Hasilnya selalu berbentuk dua dimensi, satu baris per teks:
-
Untuk mendapat satu vektor datar, panggil
flatten()pada hasilnya:Teks yang sama selalu menghasilkan vektor yang sama untuk
seedyang sama, termasuk di proses Python yang berbeda. Data yang kamu simpan hari ini bisa dicari lagi besok dengan query yang sama.
Note
Vektornya acak, jadi kemiripan antar teks tidak punya arti. FakeEmbeddingModel menguji bahwa pipeline berjalan, bukan bahwa hasil pencarian relevan.
Menulis log ke console dan file#
-
Ambil logger dengan
get_logger, lalu pakai seperti logger Python biasa:from zul.utilities.logger import get_logger logger = get_logger() logger.info("mulai memproses %d dokumen", 120)Tanpa argumen, logger bernama
my_servicedan menulis ke console serta kelogs/app.log. Folder file log dibuat jika belum ada. Setiap baris log berbentuk seperti ini: -
Untuk nama, level, dan file lain, kirim ketiganya sebagai argumen:
Memanggil
get_loggerlagi dengan nama yang sama mengembalikan logger yang sama dan tidak menggandakan keluarannya.leveldanlog_filehanya dipakai pada pemanggilan pertama untuk nama itu.
Mengukur waktu eksekusi#
-
Untuk mencetak durasi setiap pemanggilan sebuah fungsi, pasang decorator
timer_func: -
Untuk menyimpan setiap durasi, pasang
TimerDecorator:Kedua decorator mencetak satu baris per pemanggilan, misalnya
Function 'search' executed in 0.0000s. -
Baca durasi yang terkumpul dari fungsi yang sudah diberi
TimerDecorator: -
Untuk membandingkan dua implementasi, berikan durasinya ke
ChartGenerator. Contoh berikut mengandaikan dua fungsi yang sudah diberiTimerDecorator, yaitusearch_milvusdansearch_redis:from zul.utilities.analysis import ChartGenerator chart = ChartGenerator() chart.create_comparison_chart({ "chart_type": "box", "data": { "Milvus": search_milvus.get_all_times(), "Redis": search_redis.get_all_times(), }, "ylabel": "Detik", }) chart.save("latency.png")Langkah lengkapnya ada di Membuat grafik perbandingan.
Membaca dan memotong PDF#
PDFProcessor membaca teks yang tertanam di PDF dan memotongnya menjadi chunk, sebagai langkah awal pipeline RAG. Untuk PDF hasil scan, pakai OCR di Mengubah dokumen menjadi teks.
-
Install Zul dengan extra
pdf: -
Baca teks per halaman atau sebagai satu string:
-
Potong menjadi chunk. Hasilnya adalah daftar
DocumentLangChain: -
Periksa kegagalan. Method
PDFProcessortidak melempar exception saat PDF gagal dibaca. Mereka mengembalikanNoneatau daftar kosong, dan pesan kesalahannya tersimpan dipdf.last_error: -
Untuk meringkas satu folder berisi PDF, termasuk subfoldernya, panggil
process_folder:
Menyimpan hasil eksperimen#
Dua fungsi menyimpan hasil ke folder data/ di direktori kerja saat ini. Folder itu dibuat jika belum ada. Modul ini mengimpor pandas, jadi install extra analysis lebih dulu.
-
Install Zul dengan extra
analysis: -
Simpan teks, misalnya hasil OCR, ke file Markdown. Nama file ditulis tanpa ekstensi:
from zul.utilities.script_helper.save_file import save_latency_to_csv, save_text_to_md save_text_to_md("# Hasil OCR\n\nIsi dokumen.", "hasil_ocr")Kode itu menulis
data/hasil_ocr.md. -
Simpan daftar latency ke CSV. Setiap kunci dict menjadi satu kolom, jadi semua daftar harus sama panjang:
Kode itu menulis
data/latency_milvus.csvdengan isi berikut:
Mengubah Document menjadi JSON#
-
Berikan daftar
DocumentLangChain, misalnyachunksdariPDFProcessor, kedocuments_to_custom_json:from langchain_core.documents import Document from zul.utilities.script_helper.json_helper import documents_to_custom_json documents = [ Document(page_content="isi satu", metadata={"source": "a.pdf", "page": 1}), Document(page_content="isi dua"), ] json_text = documents_to_custom_json(documents)json_textadalah string JSON.page_contentdan setiap kuncimetadatamenjadi kunci di tingkat atas. -
Untuk mengganti nama kunci agar cocok dengan skema tujuan, berikan
key_mapping. Untuk mendapat objek Python, bukan string, setreturn_dict=True:rows = documents_to_custom_json( documents, key_mapping={"page_content": "text", "source": "url"}, return_dict=True, ) print(rows)Kode itu mencetak:
Menjalankan graph LangGraph terkecil#
Modul react_graph berisi graph satu node sebagai titik awal memahami StateGraph, sebelum membaca agent yang lebih lengkap di proyek hasil zul build hexa.
-
Install Zul dengan extra
llm: -
Impor graph yang sudah ter-compile, lalu panggil dengan state awal:
Node di graph itu mengganti nilai
a, jadi kode itu mencetak:
Cara kerja graph agent yang sebenarnya ada di Cara kerja agent ReAct.
Memeriksa hasilnya#
Untuk memastikan helper bisa diimpor dari environment-mu, jalankan:
python -c "from zul.utilities.fake_embedding import FakeEmbeddingModel; print(FakeEmbeddingModel(dimension=4).encode('halo').shape)"
Perintah itu mencetak bentuk vektornya:
Halaman terkait#
- Referensi helper kecil untuk semua parameter, nilai kembalian, dan path impor lama.
- Menyimpan dan mencari vektor di Milvus dan Menyimpan dan mencari vektor di Redis untuk memakai
FakeEmbeddingModeldan pengukur waktu. - Membuat grafik perbandingan untuk menggambar durasi yang terkumpul.
- Mengubah dokumen menjadi teks untuk PDF hasil scan.