Model bahasa besar (LLM) dan varian yang disempurnakan, model bahasa tambahan (ALM), telah menjadi tulang punggung sistem AI modern. Dengan menggabungkan generasi bahasa yang kuat dengan teknik pengambilan pengetahuan eksternal seperti generasi dengan dukungan pengambilan data (RAG), mereka memungkinkan penalaran lanjutan, penjawab pertanyaan, dan otomatisasi tugas di berbagai domain. Namun, terlepas dari kemampuan yang luar biasa, model ini sering menghadapi tantangan seperti ketahanan yang tidak konsisten di seluruh sistem, penggunaan token yang tinggi, waktu tanggapan yang lambat, dan inefisiensi yang disebabkan oleh dorongan berulang dan konteks yang berlebihan, ketika menangani tugas-tugas yang kompleks. Keterbatasan tersebut meningkatkan biaya operasional dan menghambat skalabilitas dan kinerja real-time.
Untuk mengatasi masalah ini, kerangka kerja ReWOO (penalaran tanpa pengamatan) menawarkan pendekatan baru yang berfokus pada pemisahan penalaran dari pengambilan pengetahuan eksternal. Alih-alih menggunakan satu LLM untuk mencoba menalar, bertindak, dan mengamati secara bergantian, ReWOO memisahkan fungsi-fungsi ini ke dalam modul-modul terpisah, masing-masing berpotensi didukung oleh LLM, tetapi dengan peran yang spesifik. Dengan memodularisasi proses menjadi tahap-tahap perencanaan, pengumpulan bukti, dan sintesis yang terpisah, ReWOO meningkatkan efisiensi dan akurasi token. Ini juga membuat sistem lebih mudah untuk di-debug dan memungkinkan alur kerja AI yang lebih efisien dan efektif.
Alur kerja ReWoo berkisar pada tiga komponen utama: penalaran bertahap, pemanggilan alat, dan peringkasan. Komponen-komponen ini diimplementasikan dalam struktur modular yang terdiri dari tiga bagian: perencana, pekerja, dan pemecah masalah.
Perencana memecah tugas utama menjadi urutan subpertanyaan yang terfokus, menciptakan cetak biru yang jelas. Alih-alih meminta LLM untuk menjawab pertanyaan kompleks sekaligus yang dapat menyebabkan penggunaan token yang berlebihan dan tanggapan yang kacau, perencana membuat cetak biru atau peta jalan. Perincian bertahap ini memandu alur kerja dan menjaga proses penalaran tetap terstruktur.
Pekerja menggunakan alat eksternal seperti mesin pencari atau database untuk mengambil informasi dan bukti yang relevan yang diperlukan untuk menjawab subpertanyaan. Ini menggunakan LLM untuk merumuskan jawaban yang jelas dan ringkas hanya berdasarkan informasi yang diambil ini. Fase pengamatan eksternal ini dipisahkan dari proses penalaran untuk menghindari pengulangan prompt yang tidak perlu dan untuk mengurangi konsumsi token.
Pemecah masalah mensintesis semua insight yang dikumpulkan untuk menghasilkan respons akhir baru yang terstruktur dengan baik. Pemisahan modular ini membantu memastikan penalaran yang efisien, akurat, dan dapat diskalakan dengan model bahasa yang besar.
Kerangka kerja seperti LangChain dan LangGraph menyediakan alat yang tangguh untuk mengimplementasikan arsitektur ReWOO menggunakan model dari OpenAI, IBM Granite, atau alat khusus seperti Serper dan Tavily untuk pencarian.
Dalam tutorial ini, Anda akan menjelajahi cara membangun agen ReWOO yang melakukan tugas ringkasan konten. Agen ini dapat:
Arsitektur ini berguna untuk:
Tutorial langkah demi langkah ini memanfaatkan teknologi AI mutakhir, termasuk:
Tutorial ini memandu Anda melalui pengaturan lingkungan pengembangan lokal Anda untuk menjalankan pipeline penalaran gaya Rewoo dengan menggunakan Jupyter Notebook. Anda akan menggunakan model bahasa IBM Granite dan Serper.dev untuk pengambilan penelusuran web langsung.
Catatan: Tidak diperlukan GPU, tetapi eksekusi dapat lebih lambat pada sistem berbasis CPU. Langkah ini akan membuka lingkungan notebook tempat Anda dapat menyalin kode dari tutorial ini. Tutorial ini juga tersedia di GitHub.
Pustaka ini diperlukan untuk menjalankan pipeline reWOO dan berinteraksi dengan alat eksternal:
transformer: Memuat dan menjalankan model bahasa besar IBM Granite.
torch: kerangka kerja pembelajaran mendalam yang diperlukan untuk menjalankan model dengan efisien.
accelerate: Mengoptimalkan kinerja model di seluruh perangkat keras (opsional).
Permintaan: Mengirim permintaan HTTP POST ke API eksternal (seperti Serper).
Pada langkah ini, impor pustaka Python yang diperlukan untuk membangun komponen inti dari pipeline ReWooo.
transformers.AutoTokenizer: Memuat tokenizer yang mengubah teks menjadi token yang kompatibel dengan model bahasa.
transformers.AutoModelForCausalLM: Memuat model bahasa IBM Granite yang telah dilatih sebelumnya untuk menghasilkan respons.
transformers.pipeline: Menyediakan antarmuka tingkat tinggi untuk membuat pipeline pembuatan teks dengan cepat menggunakan tokenizer dan model.
Pada langkah ini, kita memuat model bahasa IBM Granite dan menginisialisasi pipeline pembuatan teks dengan menggunakan pustaka transformer Hugging Face. Jelajahi model Granite 3.2 2B Instruct di Hugging Face di sini.
model_id = "ibm-granite/granite-3.2-2b-instruct": Menentukan nama pos pemeriksaan model Granite IBM yang dihosting di Hugging Face. Model ini dioptimalkan untuk tugas-tugas mengikuti instruksi.
AutoTokenizer.from_pretrained(model_id): Memuat tokenizer yang terkait dengan model yang ditentukan. Ini bertanggung jawab untuk mengubah teks input menjadi token dan mendekode output token kembali menjadi teks.
AutoModelForCausAllm.from_pretrained (model_id): Memuat model bahasa (instruksi Granite 3.2 2B) untuk tugas pembuatan teks seperti menjawab pertanyaan atau ringkasan.
pipeline("text-generation", model=model, tokenizer=tokenizer): Membuat pipeline generasi teks tingkat tinggi yang menggabungkan model dan tokenizer, sehingga memudahkan untuk menghasilkan respons dari prompt.
Pada langkah ini, kita mendefinisikan fungsi yang bertindak sebagai Pekerja dalam arsitektur reWOO. Pekerja ini menggunakan alat pencarian web, Serper.dev, untuk mengambil informasi yang relevan dan terkini dari internet untuk mendukung penalaran dan pembuatan jawaban. Serper.dev adalah API cepat dan ringan yang menyediakan hasil Google Penelusuran dalam format terstruktur, sehingga ideal untuk pengambilan informasi real-time dalam alur kerja AI.
Penyiapan ini memungkinkan sistem ReWOO untuk "mengamati" dunia nyata dengan menanyakan sumber pengetahuan eksternal sebelum LLM mengambil keputusan akhir.
Untuk menggunakan Serper di saluran ReWooo:
SERPER_API_KEY = "<YOUR_API_KEY>" # Ganti ini dengan kunci API Anda yang sebenarnya
Catatan: Jangan pernah mengunggah kunci API Anda ke repositori publik. Untuk pengaturan produksi atau tim, gunakan.env file atau variabel lingkungan untuk menjaganya tetap aman.
def query_serper(pertanyaan, jumlah_hasil=3): Menentukan fungsi yang menerima pertanyaan pencarian dan mengembalikan cuplikan relevan dari hasil pencarian teratas.
payload = {"q": question, "num": num_results}: Memper siapkan payload kueri dengan istilah pencarian dan jumlah hasil yang akan dikembalikan.
response = requests.post(...): Mengirimkan permintaan POST ke API Serper dengan kueri dan header Anda.
response.raise_for_status(): Memunculkan kesalahan jika respons API tidak valid atau gagal.
snippets = [...]: Mengekstrak teks cuplikan dari hasil pencarian organik.
mengembalikan "\n".join(cuplikan): Menggabungkan dan mengembalikan cuplikan sebagai string tunggal, berfungsi sebagai konteks untuk model bahasa.
Catatan: Fungsi ini merupakan inti dari langkah "pengamatan" ReWOO, di mana bukti eksternal dikumpulkan untuk proses penalaran lebih lanjut. Pastikan kunci API Anda valid dan tidak terbatas pada tingkat saat pengujian.
Pada langkah ini, kami mendefinisikan fungsi pakar(), yang berfungsi sebagai pemecah dalam arsitektur ReWOO. Pemecah mensintesis bukti eksternal yang diambil dan menghasilkan respons akhir dengan menggunakan model bahasa.
def pakar(pertanyaan: str) -> str: Fungsi pakar() mengambil pertanyaan (string) dan mengembalikan jawaban (string) yang dihasilkan oleh model Granite. Ia bekerja dengan mencari web dengan Serper.dev, mengumpulkan informasi yang relevan dan dengan menggunakannya untuk menghasilkan respons yang jelas dan lengkap.
context = query_serper(pertanyaan): Menggunakan alat pencarian web Serper untuk mengambil informasi yang relevan (pekerja).
prompt = f"""...""": Membangun prompt yang menginstruksikan model untuk menjawab hanya menggunakan konteks yang telah diambil.
generator(...): Memanggil model Granite untuk menghasilkan jawaban berdasarkan prompt input.
for _ in range(5): Pengulangan ini memungkinkan model menghasilkan jawaban secara bertahap, hingga 5 kali. Ini membantu jika jawabannya panjang dan tidak dapat diselesaikan sekaligus.
generated_text += new_text: Menambahkan setiap potongan teks baru ke dalam teks jawaban lengkap.
Jika new_text.endswith(...): Jika jawaban tampak lengkap (berakhir dengan titik, tanda tanya, atau tanda seru), dan memiliki cukup kata (lebih dari 50), maka pengulangan dihentikan.
tampilkan generated_text.strip(): Menampilkan jawaban akhir yang sudah dibersihkan.
Catatan: Format prompt sangat penting, karena memastikan model tidak "berhalusinasi" atau keluar dari topik. Ini harus berfokus pada apa yang ada dalam konteks. Kami membatasi setiap potongan generasi hingga 120 token untuk mengontrol panjang output dan mengelola penggunaan sumber daya secara efisien sambil mencegah penggunaan token yang berlebihan.
def planner(task: str): Ini mendefinisikan fungsi bernama perencana yang menerima satu argumen tugas string yang menggambarkan tugas yang akan dilakukan).
topic = task.replace("Summarize", "").replace("the novella", "").strip(): Ekstrak subjek utama (misalnya, judul atau tema) dari tugas. Ini membersihkan input dengan menghapus frasa prompt umum seperti "Summarize" dan "the novella", lalu memangkas spasi putih di depan dan di belakang untuk mengisolasi topik inti.
return [ ... ]: Menampilkan daftar pertanyaan spesifik yang memandu modul Pekerja.
Catatan: Anda dapat memperluas daftar ini dengan subpertanyaan yang lebih spesifik tergantung kedalaman dan sifat input.
Pada langkah ini, kita mendefinisikan fungsi final_summarizer, yang bertindak sebagai pemecah masalah dalam pipeline reWOO. Fungsi ini mengambil subjawaban (bukti) yang disediakan oleh pekerja dan menghasilkan ringkasan baru yang koheren dengan menggunakan model bahasa.
def final_summarizer(task: str, sub_answers: dict) -> str: Menentukan fungsi yang menerima tugas asli dan subjawaban, dan mengembalikan ringkasan yang ringkas.
insight = "\n".join(sub_answers.values()): Menggabungkan semua jawaban menjadi satu string yang dipisahkan oleh baris baru untuk dimasukkan ke dalam prompt.
base_prompt = f"""...""": Membangun prompt yang menginstruksikan model untuk meringkas insight yang diberikan. Ini memandu model untuk menghasilkan ringkasan baru hanya berdasarkan subjawaban.
max_total_tokens = 400: Menetapkan batas atas untuk jumlah token yang dihasilkan guna menghindari output yang terlalu panjang.
max_loops = 5: Memungkinkan hingga 5 iterasi generasi untuk secara bertahap menyusun ringkasan.
for in range(maxloops): Iterasi untuk menghasilkan potongan teks menggunakan model bahasa.
response = generator(..., max_new_tokens=100, ...): Menggunakan generator (objek pipeline) untuk menghasilkan hingga 100 token baru dalam setiap pengulangan. Mode sampling (do_sample=true) memungkinkan variasi dan kreativitas dalam tanggapan.
if summary.endswith(...) or total_tokens_used >= max_total_tokens: Mengakhiri siklus jika ringkasan diakhiri dengan tanda baca yang benar atau mencapai batas token.
return summary.strip(): Menampilkan ringkasan akhir yang dipoles tanpa spasi di belakang.
Pada langkah ini, kita mendefinisikan fungsi pemecah masalah, yang mewakili tahap akhir dalam pipeline reWOO. Ini mengatur proses penuh dengan menggunakan perencana, memanggil pakar (pekerja) dan menghasilkan ringkasan dengan menggunakan final_summarizer (pemecah masalah). Arsitektur ReWOO memungkinkan penalaran multilangkah dengan memecah tugas utama menjadi subpertanyaan menggunakan sebuah perencana. Setiap subpertanyaan dijawab secara mandiri oleh modul pakar, dan peringkas akhir merangkum semua jawaban menjadi tanggapan yang koheren. Pendekatan modular ini memungkinkan sistem untuk menangani tugas-tugas kompleks dengan lebih efektif.
def solver(task: str): Menentukan fungsi pengendali utama untuk menjalankan seluruh alur kerja ReWOO.
subquestions = planner(task): Menggunakan perencana untuk memecah tugas input menjadi subpertanyaan terfokus.
ans = pakar(q): Untuk setiap subpertanyaan, memanggil fungsi pakar untuk mengambil bukti berbasis web dan menghasilkan jawaban yang relevan. Setiap subpertanyaan yang dihasilkan oleh perencana diteruskan ke pakar sebagai input alat. Modul pakar memproses input dengan menggunakan model bahasa. Ini dapat dilihat sebagai mengeksekusi alat untuk subtugas tertentu.
answers[q] = ans: Menyimpan setiap jawaban yang diindeks berdasarkan pertanyaan yang sesuai untuk disimpulkan nanti.
final_summary = final_summarizer(task, answers): Memasukkan semua jawaban yang telah dikumpulkan ke dalam final_summarizer untuk menghasilkan ringkasan yang bersih dan koheren.
print(final_summary) dan return final_summary: Menampilkan dan mengembalikan ringkasan lengkap untuk tugas asli.
Catatan: Waktu total yang dibutuhkan oleh fungsi solver() dapat bervariasi antar sistem karena perbedaan kecepatan CPU, jumlah RAM yang tersedia, dan seberapa efisien model berjalan pada konfigurasi perangkat keras yang berbeda. Karena kode menggunakan strategi pembuatan berulang dengan model bahasa, sistem dengan kekuatan pemrosesan atau memori yang lebih rendah dapat memakan waktu yang jauh lebih lama. Pengambilan berbasis jaringan dan ukuran prompt yang besar juga dapat berkontribusi pada lamanya durasi. Untuk meningkatkan kinerja, pertimbangkan untuk mengurangi max_loops dengan menggunakan model yang lebih kecil atau terkuantisasi, mengoptimalkan pipeline tokenizer dan generator, atau menjalankan kode dalam lingkungan yang mendukung GPU seperti Google Colab atau Kaggle Notebooks.
Pada langkah terakhir ini, kita menjalankan pipeline reWOO penuh dengan memanggil fungsi pemecah masalah dengan tugas tertentu.
solver("Summarize the novella The Metamorphosis"): Memicu seluruh proses ReWOO; perencanaan, pengambilan bukti, dan pembuatan ringkasan untuk tugas input: meringkas kumpulan data The Metamorphosis.
Langkah ini menghasilkan ringkasan akhir dan menunjukkan bagaimana komponen ReWOO bekerja sama secara end-to-end untuk contoh penggunaan nyata.
Catatan: Untuk meningkatkan kinerja dan keandalan saluran reWOO, penting untuk meningkatkan metrik evaluasi seperti kualitas ringkasan, koherensi, dan latensi pembuatan respons. Metrik ini membantu menilai seberapa baik kinerja sistem di berbagai tugas dan penyiapan perangkat keras. Arsitektur dapat diperluas dengan mengintegrasikan algoritma cerdas untuk memecah pertanyaan besar menjadi pertanyaan lebih kecil dan mengurutkan jawaban yang paling berguna. Peningkatan ini akan memungkinkan penalaran yang lebih akurat dan efisien, mengurangi waktu pembuatan respons, dan meningkatkan kualitas keseluruhan output akhir.
Bangun, terapkan, dan kelola asisten dan agen AI yang kuat yang mengotomatiskan alur kerja dan proses dengan AI generatif.
Bangun masa depan bisnis Anda dengan solusi AI yang dapat Anda percaya.
Layanan IBM Consulting AI membantu merancang ulang cara kerja bisnis dengan AI untuk transformasi.