Model bahasa besar (LLM), alur kerja agen, dan penyimpanan vektor semakin tangguh dan kerangka kerja untuk merampingkan pengembangan aplikasi AI semakin populer. DSPy adalah toolkit yang menyediakan modul tujuan umum yang menggantikan rekayasa prompt dan input langsung bahasa alami dengan konfigurasi menggunakan kode Python.
Pada umumnya, bekerja dengan LLM atau model dasar memerlukan rekayasa prompt yang cermat, di mana pengguna menyesuaikan prompt teks untuk mendapatkan output yang tepat. Meskipun pendekatan ini bisa efektif, namun pendekatan ini memakan waktu dan rentan terhadap kesalahan, serta menciptakan rantai alat yang rapuh dan perlu diperbarui ketika versi baru dari suatu model dirilis. Kerangka kerja populer seperti model bahasa rantai LangChain untuk membangun aplikasi dan LlamaIndex berfokus pada peningkatan kemampuan pencarian di dalam teks. Dengan kerangka kerja ini pengembang masih membutuhkan keahlian dalam menyempurnakan prompt dan waktu untuk menguji setiap prompt untuk mendapatkan output yang diinginkan. DSPy menyederhanakan proses penyetelan prompt ini dengan pendekatan terprogram untuk memandu dan membatasi perilaku model bahasa.
DSPy berfokus pada mengotomatiskan optimalisasi konstruksi prompt. Untuk menggantikan peretasan prompt dan pembuat data sintetis sekali pakai, DSPy menyediakan pengoptimal umum, algoritme yang memperbarui parameter dalam program Anda. Setiap kali Anda memodifikasi kode, data, pernyataan, atau metrik, Anda dapat menyusun program Anda lagi dan DSPy akan melakukan pengoptimalan prompt untuk membuat prompt baru yang efektif dan sesuai dengan perubahan Anda.
Kadang-kadang orang membayangkan bahwa pengoptimalan prompt otomatis berarti menciptakan sistem di mana LLM mengevaluasi dan meningkatkan prompt yang dibuat oleh pengguna. Ini bukan cara paling efektif untuk menggunakan LLM. DSPy memanfaatkan kekuatan pembuatan ide LLM untuk menghasilkan prompt mereka sendiri. Kemudian, toolkit ini menguji variasi tersebut menggunakan metrik evaluasi yang ditetapkan untuk melihat apakah mereka memecahkan masalah dengan lebih baik. Jika mereka tidak berkinerja lebih baik secara numerik pada metrik yang ditetapkan pengguna, prompt baru akan dibuang. Ini mirip dengan algoritma evolusi di mana kekuatan prompt dievaluasi dan ditingkatkan secara berulang.
DSPy dapat membantu dalam beberapa jenis alur kerja dan skenario yang berbeda. Beberapa yang paling umum digunakan adalah pembuatan dengan pengambilan data yang ditingkatkan, penjawaban pertanyaan multihop, dan perangkuman dokumen.
Prompting rantai pemikiran (CoT) menyimulasikan proses penalaran seperti manusia dengan meminta model untuk menguraikan tugas-tugas kompleks menjadi urutan langkah logis menuju resolusi akhir. Langkah-langkah penalaran ini dimasukkan ke dalam jendela konteks model yang memberikannya lebih banyak landasan dalam tugas yang dihadapi dan sering kali menghasilkan respons yang lebih baik bahkan dalam skenario yang kompleks. DSPy membantu dengan membuat model bahasa menghasilkan prompt dan strategi rantai pemikiran serta mengujinya dengan model bahasa untuk menghasilkan prompt CoT yang paling efektif untuk model yang diberikan.
Pembuatan dengan pengambilan data yang ditingkatkan
Pembuatan dengan pengambilan data yang ditingkatkan (RAG) adalah pendekatan yang memungkinkan LLM memanfaatkan kumpulan besar pengetahuan dari sumber dan menanyakan penyimpanan pengetahuannya untuk menemukan potongan teks atau konten yang relevan dan menghasilkan respons yang disempurnakan dengan baik. RAG memastikan LLM dapat secara dinamis menggunakan pengetahuan real-time meskipun pada awalnya tidak dilatih dalam bidang tersebut dan memberikan jawaban yang benar. Kekuatan tambahan ini menyebabkan kompleksitas yang lebih besar saat menyiapkan saluran RAG. DSPy menawarkan pendekatan tanpa hambatan untuk menyiapkan saluran prompting dan menghasilkan prompt yang efektif (penyetelan prompt), atau dalam kasus model yang lebih kecil, menyempurnakan sendiri bobot model.
Saluran RAG dapat dioptimalkan dengan DSPy dalam dua cara: menggunakan contoh berlabel atau melakukan bootstrap pada contoh. Contoh berlabel adalah contoh yang diberi label secara manual dan telah ada sebelumnya, yang digunakan untuk melatih model pelatihan secara langsung. Bootstrap dalam konteks DSPy berarti menggunakan mode bahasa dalam paradigma pelatih dan model yang dilatih. Pelatih menghasilkan contoh pelatihan baru berdasarkan prompt yang diberikan oleh beberapa pengguna. Contoh yang menerima teknik bootstrap ini kemudian digunakan sebagai tambahan atau pengganti contoh yang diberi label secara manual untuk melatih model yang dilatih sampai memberikan jawaban yang benar. Prompt yang menghasilkan respons benar kemudian diperbarui secara berulang di seluruh saluran DSPy.
Sering kali, satu permintaan pencarian tidak cukup untuk tugas menjawab pertanyaan yang kompleks. Kumpulan data HotPot Question Answering yang populer terdiri dari berbagai pertanyaan yang membutuhkan penguraian dan pengambilan beberapa pertanyaan sebelum dapat dijawab. Misalnya: “Bill Nelson terbang sebagai Spesialis Payload di pesawat ulang-alik yang diluncurkan untuk pertama kalinya pada tahun berapa?” Jawaban ini membutuhkan pengetahuan bahwa Bill Nelson pernah terbang dengan Pesawat Ulang-Alik Columbia dan kemudian dapat menentukan bahwa Columbia pertama kali terbang pada tahun 1981.
Pendekatan standar pada tantangan ini dalam literatur pengambilan data yang ditingkatkan adalah membangun sistem pencarian multihop. Sistem ini membaca hasil yang diambil dan kemudian menghasilkan kueri tambahan untuk mengumpulkan informasi tambahan bila diperlukan sebelum mendapatkan jawaban akhir. Dengan menggunakan DSPy, Anda dapat membuat sistem yang sama dalam beberapa baris kode dengan cara yang tangguh, di mana Anda dapat memperbarui model dan cukup menjalankan kembali saluran Anda.
Perangkuman memadatkan potongan teks yang lebih panjang menjadi versi yang lebih pendek namun tetap mempertahankan informasi penting dan gagasan utama. Ini adalah keterampilan LLM yang penting untuk berfungsi baik, penerapannya beragam mulai dari membuat abstrak artikel hingga membuat laporan ringkas dari dokumen yang panjang.
Mengevaluasi kualitas ringkasan yang dihasilkan oleh model bahasa menghadirkan tantangan yang signifikan. Tidak seperti tugas dengan jawaban benar atau salah yang jelas, kualitas perangkuman sering kali bersifat subjektif dan bergantung pada konteks. Model ini perlu menyeimbangkan retensi dengan kepadatan informasi sambil mempertahankan intonasi dan maksud teks asli, serta memastikan akurasi yang faktual tanpa menimbulkan kesalahan. Beradaptasi dengan berbagai jenis bahan sumber dan tujuan ringkasan menghadirkan tantangan lain. DSPy memungkinkan Anda menggunakan data berlabel untuk menyetel prompt perangkuman agar mendapatkan respons terbaik.
DSPy memiliki kosakata dan terminologinya sendiri. Mempelajari beberapa istilah kunci tersebut akan membantu menjelaskan arsitektur umum.
Menyusun: Ini adalah proses bagaimana DSPy menerjemahkan program berbasis Python ke dalam instruksi yang dapat dimengerti dan dieksekusi secara efisien oleh model bahasa.
Spesifikasi perilaku: Ini adalah kelas yang mendefinisikan tipe input dan output dari sebuah modul, memastikan kompatibilitas antara modul yang berbeda dalam program DSPy. Beberapa contoh spesifikasi perilaku adalah tugas seperti memasukkan pertanyaan dan menghasilkan penalaran dan jawaban, atau mengambil dokumen sebagai input dan menghasilkan ringkasan.
Pengoptimal: Komponen DSPy ini menyempurnakan program yang disusun untuk model bahasa tertentu yang Anda gunakan, misalnya GPT3.5-Turbo atau GPT-4.0 atau Llama 3.1. Pengoptimal memastikan bahwa Anda memaksimalkan kinerja dan akurasi program Anda. Dalam versi DSPy yang lebih lama, ini disebut teleprompter. Program DSPy terdiri dari beberapa panggilan ke model bahasa yang ditumpuk bersama sebagai modul DSPy. Setiap modul DSPy memiliki tiga jenis parameter internal: bobot LM, instruksi yang seharusnya diikuti, dan demonstrasi perilaku input/output yang disimpan.
Ketika diberikan metrik, DSPy membuat prompt yang dioptimalkan menggunakan semua bobot, instruksi, dan perilaku model dengan algoritma optimasi banyak tahapan. Hal ini dapat menggabungkan penurunan gradien (untuk bobot model bahasa) dan pengoptimalan berbasis model pada bahasa diskret, yaitu untuk membuat atau memperbarui instruksi dan untuk membuat atau memvalidasi demonstrasi. Demonstrasi DSPy mirip dengan prompting dengan beberapa contoh, tetapi jauh lebih tangguh. Mereka dapat dibuat dari awal, sesuai dengan program Anda dan pembuatan serta pemilihannya dapat dioptimalkan dengan berbagai cara yang efektif.
Dalam banyak kasus, kompilasi mengarah ke prompt yang lebih baik daripada tulisan manusia karena alat pengoptimal dapat mencoba lebih banyak hal dengan jauh lebih sistematis dan menyetel metrik secara langsung dibandingkan manusia.
Saluran: 'Saluran' adalah cara DSPy mengacu pada urutan modul terhubung yang bekerja bersama untuk mencapai tugas yang kompleks. Misalnya, saluran dapat meringkas sebuah artikel, menerjemahkannya dari bahasa sumber ke bahasa target, lalu membuat pertanyaan tentang artikel tersebut dalam bahasa target.
Metrik: DSPy menetapkan beberapa metrik berbeda untuk mengukur kinerja output. Sebagai contoh, Anda mungkin memerlukan output agar sesuai dengan label Anda. Dalam kasus lain, kecocokan parsial mungkin sesuai untuk kebutuhan Anda. Semantic F1 adalah metrik yang disediakan oleh DSPy dan umum digunakan. Metrik ini mengukur seberapa banyak informasi pada label yang terdapat dalam jawaban dan seberapa sedikit data asing yang tidak ada pada respons target berlabel yang terdapat dalam jawaban. Jika memerlukan cara lain untuk mengukur kinerja, Anda juga dapat memberikan metrik khusus Anda sendiri.
Memulai dengan DSPy semudah memanggil pip install dspy-ai. Tidak diperlukan perangkat keras khusus karena sebagian besar model dapat digunakan di cloud melalui API atau dijalankan secara setempat. Kerangka kerja ini dapat dijalankan secara setempat atau di lingkungan notebook yang dihosting seperti Google Colab atau Watson Studio.
Saluran umum DSPy untuk pembuatan dengan pengambilan data yang ditingkatkan terdiri dari model bahasa dan model pengambilan. Sebagai contoh, untuk bekerja dengan OpenAI GPT-3.5 Turbo sebagai model bahasa dan retriever ColBERTV2 sebagai model pengambilan, kita akan mengonfigurasi DSPy seperti ini:
Membangun spesifikasi perilaku
Spesifikasi perilaku adalah templat yang memungkinkan Anda mengonfigurasi bagaimana bidang input dan output untuk model bahasa dan model pengambilan dapat disusun. Sebagai contoh, cuplikan kode ini menunjukkan sintaks untuk memerintahkan model bahasa dengan konteks dan model pengambilan dengan struktur:
Kami menyertakan deskripsi kecil untuk konteks dan kolom jawaban untuk menentukan panduan yang lebih kuat tentang apa yang akan diterima dan harus dihasilkan oleh model.
Setelah menentukan spesifikasi perilaku, Anda dapat menjalankan program dan membuat prompt yang optimal untuk tugas Anda menggunakan pengoptimal yang sesuai untuk tugas Anda. Di DSPy. Proses ini disebut kompilasi. Menyusun program akan memperbarui parameter yang disimpan di setiap modul. Pada sebagian besar skenario, hal ini terutama dilakukan dalam bentuk mengumpulkan dan memilih demonstrasi yang baik untuk dimasukkan ke dalam prompt.
Kompilasi membutuhkan:
• Kumpulan pelatihan atau contoh yang mendapatkan bootstrapping.
• Metrik untuk validasi. Dalam skenario RAG, ini akan menjadi cara untuk mengukur seberapa akurat jawaban yang diprediksi dan bahwa konteks yang diambil berisi jawabannya.
• Pengoptimal khusus untuk menghasilkan prompt yang akan diuji. Misalnya, pengoptimal BootstrapFewShot dapat digunakan untuk menghasilkan prompt dan kemudian menguji prompt yang dihasilkan tersebut.
Untuk menyusun program DSPy, Anda mengonfigurasi model mana yang ingin Anda gunakan dan meneruskannya ke metode kompilasi pengoptimal yang Anda pilih. Misalnya, program untuk aplikasi RAG akan berisi model bahasa dan model pengambilan. Data tersebut kemudian akan diteruskan ke metode kompilasi dan pengoptimal akan menggunakan data yang diambil untuk mengatur konteks pembuatan bahasa.
Anda kemudian menentukan metrik untuk mengevaluasi model pengambilan dan bahasa. Definisi metrik itu kemudian akan diberikan kepada pengoptimal seperti pengoptimal BootStrapFewShot atau LabeledFewShot untuk digunakan saat mengevaluasi prompt yang dihasilkan oleh model bahasa. Terakhir, pengoptimal menyusun modul kustom yang berisi metode penerusan yang telah Anda tentukan bersama dengan kumpulan data pelatihan.
Memilih pengoptimal mana yang akan digunakan biasanya memerlukan eksperimen, tetapi tersedia pedoman:
• Jika Anda memiliki sangat sedikit contoh (sekitar 10), Anda mungkin bisa memulai dengan BootStrapfewShot untuk menghasilkan data pelatihan baru.
- Jika Anda memiliki lebih banyak data, misalnya 50 contoh atau lebih, cobalah BootstrapFewShotWithRandomSearch untuk menghasilkan data pelatihan baru pada sebarang bagian dari data pelatihan Anda.
• Jika membutuhkan program yang sangat efisien, Anda dapat melakukan penyempurnaan LLM berukuran kecil untuk tugas Anda dengan BootstrapfineTune.
Setelah menyusun program dan membandingkan metrik, Anda mungkin akan puas dengan hasilnya. Anda mungkin juga menemukan bahwa Anda tidak menyukai sesuatu tentang program akhir atau hasilnya sesuai dengan metrik yang Anda pilih. Pengembangan berulang adalah kuncinya. DSPy menyediakan alat untuk melakukannya secara bertahap dengan mengulangi data Anda, memperbarui struktur program, metrik yang Anda pilih, dan pengoptimal mana yang Anda pilih.
DSPy berasal dari sumber terbuka, sehingga Anda dapat memeriksa kode dan melihat kemajuan pengembangan. Dokumen di situs StanfordNLP pada Github berisi dokumentasi dan beberapa tutorial langkah demi langkah serta demo tentang cara memulai penggunaan DSPy.