Prompt chaining dengan LangChain: Ikhtisar komprehensif

Penulis

Vrunda Gadesha

AI Advocate | Technical Content Author

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:

  1. Jelajahi berbagai jenis rantai prompt (berurutan, percabangan, iteratif, dan lainnya).
  2. Terapkan contoh rantai generik yang menggabungkan tipe rantai berurutan, percabangan, dan iteratif.
  3. Memanfaatkan kelas-kelas bawaan LangChain, seperti PromptTemplate, LLMChain, dan SequentialChain, untuk menentukan dan mengelola alur kerja.

Bagaimana LangChain mengelola rantai prompt

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.

Diagram prompt Gambar - 1 Kerangka kerja prompt chaining menggunakan langchain

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.

Jenis-jenis prompt chaining

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.

Contoh penggunaan - pemrosesan teks dalam beberapa langkah

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)

  • Teks input atau input pengguna yang diberikan dalam bahasa alami diproses melalui templat prompt untuk mengidentifikasi kata kunci yang signifikan.
  • Langkah ini menggunakan sequential chaining untuk memastikan kata kunci yang diekstraksi diinput langsung ke tugas-tugas berikutnya.

Menghasilkan ringkasan sentimen (rantai percabangan)

  • Kata kunci yang diekstraksi diteruskan ke model obrolan untuk menghasilkan ringkasan sentimen.
  • Dengan branching chaining, jalur paralel untuk peringkasan dapat menyesuaikan output berdasarkan konteks.

Menyempurnakan ringkasan sentimen (rantai iteratif)

  • Jika tidak memenuhi kriteria kualitas yang telah ditentukan sebelumnya, ringkasan sentimen akan diteruskan melalui prompt penyempurnaan.
  • Rantai iteratif memungkinkan pemrosesan ulang hingga output memenuhi tingkat presisi yang diharapkan.

Output akhir

  • Ringkasan sentimen yang telah disempurnakan ini kemudian disampaikan sebagai output untuk memberikan insight kepada pengguna.
  • Ringkasan tersebut menampilkan integrasi rekayasa prompt, AI generatif, dan teknik chaining lanjutan.

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.

Prasyarat

Anda memerlukan akun IBM Cloud untuk membuat proyek watsonx.ai .

Langkah-langkah

Langkah 1. Siapkan lingkungan Anda

Meskipun terdapat pilihan beberapa alat, tutorial ini akan memandu Anda menyiapkan akun IBM untuk menggunakan Jupyter Notebook.

  1. Masuk ke watsonx.ai menggunakan akun IBM Cloud Anda.
  2. Buat proyek watsonx.ai. Anda bisa mendapatkan ID proyek dari dalam proyek. Klik tab Kelola. Kemudian, salin ID proyek dari bagian Detail di halaman Umum. Anda memerlukan ID ini untuk tutorial ini.
  3. Buat 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.

Langkah 2. Siapkan layanan watsonx.ai Runtime dan kunci API

  1. Buat instans layanan watsonx.ai Runtime (pilih paket Lite, yang merupakan instans gratis).
  2. Buat Kunci API.
  3. Tautkan layanan watsonx.ai Runtime dengan proyek yang telah Anda buat di watsonx.ai.

Langkah 3. Penginstalan paket

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.

!pip install --upgrade pip
%pip install langchain
!pip install langchain-ibm

Langkah 4. Impor perpustakaan yang diperlukan

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.

import os
from langchain_ibm import WatsonxLLM
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain, SequentialChain
import getpass

Langkah 5. Siapkan kredensial

Kode ini menyiapkan kredensial untuk mengakses IBM Watson Machine Learning (WML) API dan memastikan bahwa PROJECT_ID dikonfigurasi dengan benar.

  • Kredensial kamus dibuat dengan URL layanan WML dan kunci API. Kunci API dikumpulkan secara aman dengan menggunakan gatepass.gatepass untuk menghindari pemaparan informasi sensitif.
  • Kode mencoba mengambil PROJECT_ID dari variabel lingkungan dengan menggunakan fungsi os.environ. Jika PROJECT_ID tidak ditemukan, pengguna diminta untuk memasukkannya secara manual melalui input.
# Set up credentials
credentials = {
    "url": "https://us-south.ml.cloud.ibm.com", # Replace with the correct region if needed
    "apikey": getpass.getpass("Please enter your WML API key (hit enter): ")
}

# Set up project_id
try:
    project_id = os.environ["PROJECT_ID"]
except KeyError:
    project_id = input("Please enter your project_id (hit enter): ")

Langkah 6. Awali model bahasa besar

Kode ini mengawali IBM Watson LLM untuk digunakan dalam aplikasi:

  1. Kode ini membuat instans WatsonxLLM menggunakan model ibm/granite-3-8b-instruct, yang dirancang untuk tugas-tugas AI generatif berbasis instruksi.
  2. Nilai url, apikey, dan project_id dari kredensial yang disiapkan sebelumnya akan diteruakan untuk mengautentikasi dan menghubungkan ke layanan IBM Watson LLM.
  3. Konfigurasi parameter max_new_tokens untuk membatasi jumlah token yang dihasilkan oleh model dalam setiap respons (150 token dalam kasus ini).

Langkah ini mempersiapkan Watson LLM untuk menghasilkan respons dalam alur kerja.

# Initialize the IBM LLM
llm = WatsonxLLM(
    model_id="ibm/granite-3-8b-instruct",
    url=credentials["url"],
    apikey=credentials["apikey"],
    project_id=project_id,
    params={
    "max_new_tokens": 150
    }
)   

Langkah 7. Tentukan templat prompt

Kode ini mendefinisikan templat prompt untuk tiga tahap alur kerja pemrosesan teks:

  1. Ekstraksi kata kunci: keyword_prompt dirancang untuk mengekstraksi kata kunci yang paling penting dari teks yang disediakan. Prompt ini menggunakan placeholder {text} untuk menyisipkan input secara dinamis.
  2. Pembuatan ringkasan sentimen: sentiment_prompt mengambil hasil ekstraksi {keywords} sebagai input dan menghasilkan ringkasan sentimen dari masukan. Template ini memastikan bahwa pembuatan sentimen difokuskan pada kata kunci yang disediakan.
  3. Penyempurnaan ringkasan: refine_prompt meningkatkan ringkasan sentimen dengan menggunakan {sentiment_summary} sebagai input. Prompt ini berfokus pada pembuatan output yang ringkas dan tepat.

Instans PromptTemplate ini memungkinkan rekayasa prompt yang dapat digunakan kembali dan terstruktur untuk aplikasi LLM.

# Define Prompt Templates

# Prompt for extracting keywords
keyword_prompt = PromptTemplate(
    input_variables=["text"],
    template="Extract the most important keywords from the following text:\n{text}\n\nKeywords:"
)

# Prompt for generating sentiment summary
sentiment_prompt = PromptTemplate(
    input_variables=["keywords"],
    template="Using the following keywords, summarize the sentiment of the feedback:\nKeywords: {keywords}\n\nSentiment Summary:"
)

# Prompt for refining the summary
refine_prompt = PromptTemplate(
    input_variables=["sentiment_summary"],
    template="Refine the following sentiment summary to make it more concise and precise:\n{sentiment_summary}\n\nRefined Summary:"
)

Langkah 8. Buat rantai

Kode ini mendefinisikan rantai LLM yang menghubungkan prompt dengan IBM Watson LLM yang telah diawali, yang memberikan kunci output unik untuk setiap tahap:

  1. Rantai kata kunci: keyword_chain menggunakan keyword_prompt untuk mengekstraksi kata kunci dari teks input. Hasilnya disimpan pada kunci unik "keywords" untuk digunakan dalam langkah-langkah selanjutnya.
  2. Rantai sentimen: sentiment_chain mengambil kata kunci yang diekstrak dan menghasilkan ringkasan sentimen dengan menggunakan sentiment_prompt. Output diberi label sebagai "sentiment_summary".
  3. Rantai penyempurnaan: refine_chain memproses ringkasan sentimen yang dihasilkan dengan menggunakan refine_prompt. Output akhir yang telah disempurnakan akan disimpan dengan kunci "refined_summary".

Instans LLMChain ini memungkinkan eksekusi tugas modular, memfasilitasi alur kerja aplikasi LLM langkah demi langkah.

# Define Chains with Unique Keys

# Chain to extract keywords
keyword_chain = LLMChain(
    llm=llm,
    prompt=keyword_prompt,
    output_key="keywords" # Unique key for extracted keywords
)

# Chain to generate sentiment summary
sentiment_chain = LLMChain(
    llm=llm,
    prompt=sentiment_prompt,
    output_key="sentiment_summary" # Unique key for sentiment summary
)

# Chain to refine the sentiment summary
refine_chain = LLMChain(
    llm=llm,
    prompt=refine_prompt,
    output_key="refined_summary" # Final refined output
)

Langkah 9. Gabungkan rantai

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.

# Combine Chains into a Sequential Workflow

workflow = SequentialChain(
    chains=[keyword_chain, sentiment_chain, refine_chain],
    input_variables=["text"], # Initial input for the workflow
    output_variables=["refined_summary"] # Final output of the workflow
)

Langkah 10. Jalankan alur kerja

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.

# Example Input Text

feedback_text = """
    I really enjoy the features of this app, but it crashes frequently, making it hard to use.
    The customer support is helpful, but response times are slow.

    I tried to reachout to the support team, but they never responded

    For me, the customer support was very much helpful. Ihis is very helpful app. Thank you for grate services.

"""

# Run the Workflow

result = workflow.run({"text": feedback_text})

# Display the Output

print("Refined Sentiment Summary:")
print(result) # Directly print the result since it is a string

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.

Cara memilih jenis chaining yang tepat

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.

Ringkasan

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.

Solusi terkait
IBM® watsonx.ai

Latih, validasi, lakukan tuning, dan terapkan AI generatif, model dasar, dan kemampuan machine learning dengan IBM watsonx.ai, studio perusahaan generasi berikutnya untuk pembangun AI. Bangun aplikasi AI dalam waktu singkat, dengan sedikit data.

Jelajahi watsonx.ai
Solusi kecerdasan buatan (AI)

Manfaatkan AI di bisnis Anda dengan perpaduan antara keahlian AI terdepan di industri dari IBM dan portofolio solusi Anda.

Jelajahi solusi AI
Konsultasi dan layanan kecerdasan buatan (AI)

Layanan IBM Consulting AI membantu merancang ulang cara kerja bisnis dengan AI untuk transformasi.

Jelajahi layanan AI
Ambil langkah selanjutnya

Dengan menggunakan AI, IBM Concert mengungkap insight penting tentang operasi Anda dan memberikan rekomendasi spesifik aplikasi untuk perbaikan. Temukan cara Concert dapat memajukan bisnis Anda.

Jelajahi Concert Jelajahi solusi otomatisasi proses bisnis
Catatan kaki

[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.