Prompt chaining adalah konsep dasar dalam membangun alur kerja lanjutan menggunakan model bahasa besar (large language model, LLM). Hal ini memerlukan penautan beberapa prompt dalam urutan logis, dengan output dari satu prompt berfungsi sebagai input untuk prompt berikutnya. Pendekatan modular ini sesuai untuk menyelesaikan tugas-tugas yang kompleks seperti pemrosesan teks multilangkah, meringkas, menjawab pertanyaan, dan banyak lagi.
LangChain adalah kerangka kerja serbaguna yang dirancang untuk menyederhanakan pembuatan alur kerja tersebut. Solusi ini menyediakan alat untuk mengelola LLM, seperti model IBM Granite atau model GPT (generative pre-trained transformer) OpenAI, menentukan prompt khusus, dan menghubungkannya ke rantai yang dapat digunakan kembali. Dengan menyederhanakan pengelolaan prompt, LangChain membantu pengembang untuk fokus pada pemecahan masalah alih-alih melakukan orkestrasi interaksi dengan LLM.
Dalam tutorial ini, kita akan:
LangChain menyediakan kerangka kerja tangguh untuk membangun alur kerja modular dalam aplikasi chatbot. Dengan memadukan prompt terstruktur, dynamic chaining, dan integrasi LLM lanjutan, solusi ini memungkinkan pengembang membuat pipeline adaptif skalabel yang memanfaatkan teknik RAG dan memberikan output terstruktur seperti JSON. Berikut adalah cara LangChain menangani prompt chaining secara efektif:
Abstraksi prompt: LangChain memanfaatkan from_template untuk merancang alur kerja input/output terstruktur untuk setiap langkah, sehingga memudahkan penanganan operasi chatbot yang kompleks.
Integrasi LLM: Kerangka kerja ini terintegrasi mulus dengan berbagai LLM, seperti IBM Granite, OpenAI, dan Hugging Face, sehingga memungkinkan penyempurnaan untuk tugas-tugas khusus.
Manajemen rantai: SequentialChain dan SimpleSequentialChain dari LangChain memungkinkan alur kerja modular untuk saluran chatbot, sementara stroutputparser memastikan output terstruktur seperti JSON.
Alur kerja dinamis: Dengan menggunakan alat seperti ConditionalChain dan templat systemmessage, LangChain mendukung alur kerja adaptif, yang selaras dengan prinsip RAG (retrieval-augmented generation) untuk pembuatan konten dinamis.
Pada akhir tutorial ini, Anda akan memiliki pemahaman yang kuat tentang cara menggunakan LangChain untuk membangun alur kerja modular dan dapat diperluas untuk berbagai aplikasi.
Dengan prompt chaining, Anda dapat merancang alur kerja yang memungkinkan output dari satu langkah diteruskan ke langkah berikutnya. Berbagai jenis chaining mendukung alur kerja yang beragam, mulai dari tugas berurutan yang sederhana hingga proses yang lebih kompleks dan dinamis. Berikut adalah gambaran sekilas tentang jenis-jenis prompt chaining:
Sequential chaining: Jenis chaining yang paling mudah, dengan output dari satu prompt akan langsung diteruskan sebagai input ke prompt berikutnya. Opsi ini ideal untuk tugas dengan progresi linear.[1]
Branching chaining: Dalam branching chaining, satu output dibagi menjadi beberapa alur kerja paralel. Setiap cabang (branch) memproses output secara independen. [2]
Iterative chaining: Pada iterative chaining, prompt atau rantai (chain) dijalankan secara berulang hingga kondisi tertentu terpenuhi. Opsi ini berguna untuk menyempurnakan output.[3]
Hierarchical chaining: Jenis chaining ini membagi satu tugas besar menjadi beberapa subtugas yang lebih kecil, yang dijalankan secara hierarkis. Output tingkat rendah memberi input untuk tugas dengan tingkat yang lebih tinggi. [4]
Rantai bersyarat: Rantai bersyarat memilih langkah selanjutnya secara dinamis berdasarkan output dari prompt sebelumnya. Hal ini memungkinkan pengambilan keputusan dalam alur kerja.
Multimodal chaining: Multimodal chaining mengintegrasikan prompt yang menangani berbagai jenis data (misalnya, teks, gambar, atau audio). Jenis chaining ini sangat cocok untuk aplikasi yang menggabungkan beberapa modalitas. [2]
Dynamic chaining: Dynamic chaining menyesuaikan alur kerja berdasarkan output real-time atau perubahan kondisi. Jenis chaining ini meningkatkan fleksibilitas prompt chaining. [5]
Recursive chaining: Dalam recursive chaining, input yang besar dibagi menjadi potongan-potongan yang lebih kecil untuk diproses secara terpisah, dan hasilnya kemudian akan digabungkan. Jenis chaining ini berguna untuk menangani dokumen atau kumpulan data yang panjang. [6]
Reverse chaining: Reverse chaining dimulai dengan output yang diharapkan dan bekerja mundur untuk menentukan input atau langkah yang diperlukan untuk mencapainya. Jenis chaining ini sesuai untuk pemecahan masalah dan debugging. [5]
Setiap jenis chaining melayani contoh penggunaan yang unik, sehingga sangat penting untuk memilih chaining yang tepat berdasarkan kompleksitas dan kebutuhan tugas.
Dalam alur kerja ini, kita akan memproses masukan pelanggan dengan model obrolan dan rekayasa prompt untuk membangun pipeline pemrosesan teks yang dapat diskalakan. Tahapan tutorial berikut ini menunjukkan teknik sequential chaining, branching chaining, dan iterative chaining yang didukung oleh AI generatif.
Mengekstraksi kata kunci (sequential chaining)
Menghasilkan ringkasan sentimen (rantai percabangan)
Menyempurnakan ringkasan sentimen (rantai iteratif)
Output akhir
Pendekatan ini menggabungkan rantai berurutan, percabangan, dan iteratif dalam Python dengan model obrolan dan rekayasa prompt. Hal ini memastikan pemrosesan masukan pelanggan yang kuat, memanfaatkan AI generatif untuk ekstraksi kata kunci, analisis sentimen, dan penyempurnaan.
Anda memerlukan akun IBM Cloud untuk membuat proyek watsonx.ai .
Meskipun terdapat pilihan beberapa alat, tutorial ini akan memandu Anda menyiapkan akun IBM untuk menggunakan Jupyter Notebook.
Langkah ini akan membuka lingkungan notebook tempat Anda dapat menyalin kode dari tutorial ini. Atau, Anda dapat mengunduh notebook ini ke sistem lokal Anda dan mengunggahnya ke proyek watsonx.ai sebagai aset. Untuk melihat tutorial Granite lainnya, kunjungi Komunitas IBM Granite. Tutorial ini juga tersedia di GitHub.
Kita membutuhkan perpustakaan untuk digunakan bersama kerangka kerja langchain dan watsonxLLM. Mari kita instal paket yang diperlukan terlebih dahulu.
Catatan: Jika Anda menggunakan versi lama `pip`, Anda dapat menggunakan perintah pip install --upgrade pip` untuk mengupgradenya. Langkah ini membantu Anda menginstal paket terbaru yang mudah, yang mungkin tidak kompatibel dengan versi yang lebih lama. Namun, jika Anda sudah menggunakan versi terbaru atau baru saja mengupgrade paket, Anda dapat melewatkan perintah ini.
Blok kode ini mengimpor pustaka dan alat Python yang penting untuk membangun dan mengelola aplikasi LLM dengan menggunakan LangChain dan IBM Watson LLM.
Modul os digunakan untuk mengakses variabel lingkungan, seperti kredensial proyek atau kunci API.
WatsonxLLM adalah modul dari langchain_ibm yang mengintegrasikan IBM Watson LLM untuk menghasilkan output dari model AI generatif.
PromptTemplate membantu membuat template yang dapat digunakan kembali untuk prompt, demi memastikan struktur input dan fleksibilitas dalam rekayasa prompt.
LLMChain membangun rantai tugas individu, sementara
SequencialChain menghubungkan beberapa langkah menjadi alur kerja tunggal dan `getpass` mengambil informasi sensitif (misalnya, kunci API) dengan aman tanpa memaparkannya di layar.
Kode ini menyiapkan kredensial untuk mengakses IBM Watson Machine Learning (WML) API dan memastikan bahwa PROJECT_ID dikonfigurasi dengan benar.
Kode ini mengawali IBM Watson LLM untuk digunakan dalam aplikasi:
Langkah ini mempersiapkan Watson LLM untuk menghasilkan respons dalam alur kerja.
Kode ini mendefinisikan templat prompt untuk tiga tahap alur kerja pemrosesan teks:
Instans PromptTemplate ini memungkinkan rekayasa prompt yang dapat digunakan kembali dan terstruktur untuk aplikasi LLM.
Kode ini mendefinisikan rantai LLM yang menghubungkan prompt dengan IBM Watson LLM yang telah diawali, yang memberikan kunci output unik untuk setiap tahap:
Instans LLMChain ini memungkinkan eksekusi tugas modular, memfasilitasi alur kerja aplikasi LLM langkah demi langkah.
Kode ini menggabungkan rantai yang sudah ditentukan sebelumnya ke dalam alur kerja yang berurutan, sehingga memungkinkan proses langkah demi langkah untuk input teks. SequentialChain menghubungkan keyword_chain, sentiment_chain, dan refine_chain dalam urutan yang ditentukan, memastikan bahwa output dari satu rantai berfungsi sebagai input untuk rantai berikutnya. Alur kerja dikonfigurasi untuk menerima teks sebagai input awalnya, dengan ringkasan sentimen yang disempurnakan sebagai output akhir, disimpan di bawah kunci "refined_summary". Pengaturan ini memungkinkan eksekusi aplikasi LLM yang dirampingkan dan efisien, memastikan saluran pemrosesan yang koheren dan modular.
Di blok kode ini, kita akan menjalankan seluruh alur kerja. Pertama, tersedia string masukan multibaris yang ditetapkan sebagai feedback_text, yang berisi komentar positif dan negatif dari pengguna tentang aplikasi. Metode workflow.run memproses masukan melalui rantai berurutan (ekstraksi kata kunci, analisis sentimen, dan penyempurnaan) dengan menggunakan input yang disediakan. Ringkasan sentimen yang disempurnakan akan dicetak langsung sebagai hasil akhir.
OUTPUT
Ringkasan Sentimen yang Disempurnakan:
Sentimen pengguna sebagian besar bersifat negatif karena faktor crash aplikasi yang berulang dan waktu respons dukungan pelanggan yang lambat, meskipun pengguna juga memberikan apresiasi untuk fitur aplikasi dan dukungan pelanggan yang terkadang bermanfaat. Untuk meningkatkan kepuasan pengguna, tim pengembangan harus fokus mengatasi crash aplikasi dan mempercepat respons dukungan pelanggan.
Ringkasan sentimen yang disempurnakan adalah evaluasi masukan yang ringkas dan jelas. Ringkasan ini menyoroti apresiasi pengguna untuk fitur-fitur aplikasi sekaligus mengungkapkan frustrasi atas seringnya crash dan dukungan pelanggan yang lambat, yang mencerminkan kemampuan alur kerja untuk menyaring insight penting secara efektif.
Memilih jenis chaining yang sesuai untuk aplikasi LLM memerlukan evaluasi faktor-faktor utama guna memastikan efisiensi dan koherensi:
Kompleksitas tugas: Gunakan alur kerja yang dapat dijalankan untuk tugas dengan beberapa langkah. Beberapa contoh atau chatprompttemplate dapat membantu menyusun tugas kompleks yang membutuhkan prompt berbeda.
Dependensi: Jika output dari satu langkah adalah placeholder untuk prompt berikutnya, gunakan sequential chaining. Pengurai output memastikan transisi output yang mulus ke input terstruktur.
Kemampuan beradaptasi: Untuk alur kerja dinamis, seperti yang melibatkan agen langchain, rantai iteratif memungkinkan penyesuaian parameter dan prompt berikutnya secara real-time.
Modalitas data: Pilih alur kerja yang kompatibel dengan berbagai jenis data. Gunakan metode embedding untuk data teks dan vektor atau LangChain Expression Language untuk operasi yang fleksibel.
Dengan mempertimbangkan faktor-faktor ini, Anda dapat membangun aplikasi LLM yang tangguh dan mudah beradaptasi, serta memiliki alur kerja chaining yang koheren.
Rantai prompt adalah teknik serbaguna untuk membangun alur kerja pemrosesan bahasa alami (NLP) yang canggih. Dalam tutorial ini, kami menjelajahi berbagai jenis rantai dan mendemonstrasikan contoh umum yang mengintegrasikan beberapa pendekatan rantai. Bereksperimen dengan metode ini akan membuka potensi penuh model bahasa untuk aplikasi dunia nyata.
[1] Roegiest, A., & Chitta, R. (2024). Answering Questions in Stages: Prompt Chaining for Contract QA.
[2] Ge, J., Luo, H., Qian, S., Gan, Y., Fu, J., & Zhang, S. (2023). Chain of Thought Prompt Tuning in Vision Language Models.
[3] Sun, S., Yuan, R., Cao, Z., Li, W., & Liu, P. (2024). Prompt Chaining or Stepwise Prompt? Refinement in Text Summarization. , 7551-7558. https://arxiv.org/abs/2406.00507.
[4] Huang, Q., Zhu, J., Li, Z., Xing, Z., Wang, C., & Xu, X. (2023). PCR-Chain: Partial Code Reuse Assisted by Hierarchical Chaining of Prompts on Frozen Copilot. 2023 IEEE/ACM 45th International Conference on Software Engineering: Companion Proceedings (ICSE-Companion), 1-5. https://ieeexplore.ieee.org/document/10172550.
[5] Wu, T., Jiang, E., Donsbach, A., Gray, J., Molina, A., Terry, M., & Cai, C. (2022). PromptChainer: Chaining Large Language Model Prompts through Visual Programming. CHI Conference on Human Factors in Computing Systems Extended Abstracts. https://dl.acm.org/doi/10.1145/3491101.3519729.
[6] Trautmann, D. (2023). Large Language Model Prompt Chaining for Long Legal Document Classification. ArXiv, abs/2308.04138. https://arxiv.org/abs/2308.04138.