Menerapkan potongan agen untuk mengoptimalkan input LLM dengan Langchain dan watsonx.ai

Penulis

Shalini Harkar

Lead AI Advocate

Apa itu Pemotongan berbasis agen?

Cara model bahasa memproses dan memisahkan teks berubah dari pendekatan statis tradisional menjadi proses yang lebih baik dan lebih responsif. Berbeda dengan pemotongan tradisional berukuran tetap yang memotong dokumen besar pada titik-titik yang tetap, pemotongan berbasis agen menggunakan teknik berbasis AI untuk menganalisis konten dalam proses yang dinamis dan menentukan cara terbaik untuk memisahkan teks.

Pemotongan berbasis agen memanfaatkan metode pembagian teks berbasis AI, pemotongan rekursif, dan metode pemotongan tumpang tindih, yang bekerja secara bersamaan untuk meningkatkan kemampuan pemecahan, yang menjaga hubungan antara berbagai ide penting sekaligus mengoptimalkan jendela konteks secara real-time. Dengan pemotongan berbasis agen, setiap potongan diperkaya dengan metadata untuk memperdalam akurasi pengambilan dan efisiensi model secara keseluruhan. Hal ini sangat penting dalam aplikasi RAG, di mana segmentasi data dapat secara langsung memengaruhi kualitas pengambilan dan koherensi respons. Konteks yang bermakna dipertahankan di semua potongan yang lebih kecil, menjadikan pendekatan ini sangat penting bagi chatbot, basis pengetahuan, dan contoh penggunaan AI generatif (gen AI). Kerangka kerja seperti Langchain atau LlamaIndex terus meningkatkan efisiensi pengambilan, menjadikan metode ini sangat efektif. 

Elemen kunci dari Pemotongan berbasis agen

1. Strategi pemotongan adaptif: Memilih metode pemotongan terbaik secara dinamis berdasarkan jenis konten, maksud di balik kueri, dan kebutuhan pengambilan data untuk memastikan segmentasi yang efektif.

2. Penyesuaian ukuran potongan secara dinamis: Mengubah ukuran potongan secara real-time dengan mempertimbangkan struktur semantik dan konteks, ketimbang tetap menggunakan batas token yang tetap.

3. Tumpang tindih yang mempertahankan konteks: Menilai tumpang tindih di antara potongan secara cerdas untuk menjaga koherensi tetap utuh dan menghindari kehilangan informasi penting, sehingga meningkatkan efisiensi pengambilan informasi.

 

Tren AI terbaru, dipersembahkan oleh para pakar

Dapatkan kurasi insight tentang berita AI yang paling penting dan menarik. Berlangganan buletin Think mingguan. Lihat Pernyataan Privasi IBM.

Terima kasih! Anda telah berlangganan.

Langganan Anda akan dikirimkan dalam bahasa Inggris. Anda akan menemukan tautan berhenti berlangganan di setiap buletin. Anda dapat mengelola langganan atau berhenti berlangganan di sini. Lihat Pernyataan Privasi IBM kami untuk informasi lebih lanjut.

Keuntungan Pemotongan berbasis agen dibandingkan metode tradisional

Pemotongan berbasis agen menawarkan keunggulan dibandingkan pemotongan tradisional:

a. Mempertahankan konteks: Mempertahankan informasi penting tanpa pemisahan yang tidak perlu.

b. Penyesuaian ukuran yang cerdas: Menyesuaikan batas potongan sesuai dengan arti dan maknanya.

c. Mengoptimalkan kueri: Terus menyempurnakan potongan agar cocok dengan kueri tertentu.

d. Pengambilan yang efisien: Meningkatkan output sistem pencarian dan RAG dengan meminimalkan fragmentasi yang tidak perlu.

 

Dalam tutorial ini, Anda akan bereksperimen dengan strategi pemotongan berbasis agen menggunakan model IBM Granite-3.0-8B-Instruct  IBM yang kini tersedia di watsonx.ai. Keseluruhan tujuan adalah untuk melakukan pemotongan yang efisien untuk menerapkan RAG secara efektif.

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 untuk menyiapkan akun IBM menggunakan Jupyter Notebook.

  1. Masuk ke watsonx.ai dengan menggunakan akun IBM Cloud Anda.

  2. Buat proyek watsonx.ai.
    Anda bisa mendapatkan ID proyek dari dalam proyek Anda. 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 aplikasi notebook ini ke sistem lokal Anda dan mengunggahnya ke proyek watsonx.ai sebagai aset. Untuk melihat tutorial Granite lain, lihat Komunitas IBM Granite. Aplikasi Jupyter Notebook ini bersama dengan kumpulan data yang digunakan dapat ditemukan di GitHub.

Langkah 2. Siapkan instans Waktu Proses watsonx.ai dan kunci API

  1. Buat instans layanan waktu proses watsonx.ai (pilih wilayah yang sesuai dan pilih paket Lite, yang merupakan instans gratis).

  2. Buat Kunci API.

  3. Kaitkan instans layanan waktu proses watsonx.ai ke proyek yang Anda buat di watsonx.ai.

Langkah 3. Instal dan impor pustaka yang relevan dan siapkan kredensial Anda

Anda akan membutuhkan beberapa pustaka dan modul untuk tutorial ini. Pastikan untuk mengimpor yang berikut ini dan jika tidak diinstal, instalasi pip cepat akan menyelesaikan masalah.

Catatan, tutorial ini dibuat menggunakan Python 3.12.7

!pip install -q langchain langchain-ibm langchain_experimental langchain-text-splitters langchain_chroma transformers bs4 langchain_huggingface sentence-transformers
import getpass
import requests
from bs4 import BeautifulSoup
from langchain_ibm import WatsonxLLM
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_community.document_loaders import WebBaseLoader
from langchain.schema import SystemMessage, HumanMessage
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.prompts import ChatPromptTemplate
from langchain.vectorstores import Chroma
from langchain.tools import tool
from langchain.agents import AgentExecutor
from langchain.memory import ConversationBufferMemory
from transformers import AutoTokenizer
from ibm_watsonx_ai.foundation_models.utils.enums import EmbeddingTypes
from ibm_watsonx_ai.metanames import GenTextParamsMetaNames as GenParams
from langchain.output_parsers import CommaSeparatedListOutputParser
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.schema import Document
from langchain.chains.combine_documents import create_stuff_documents_chain



 

Untuk mengatur kredensial, kita membutuhkan "WATSONX_APIKEY" dan "WATSONX_PROJECT_ID". Kita juga akan mengatur URL yang berfungsi sebagai titik akhir API.

load_dotenv(os.getcwd()+"/.env", override=True)
credentials = {
    "url": "https://us-south.ml.cloud.ibm.com",
    "apikey": os.getenv("WATSONX_APIKEY", ""),
}
project_id = os.getenv("PROJECT_ID", "")

Langkah 4. Awali model bahasa Anda. 

Untuk tutorial ini, kami sarankan menggunakan model Granite-3.0-8B-Instruct dari IBM sebagai LLM untuk mencapai hasil yang serupa. Anda bebas menggunakan model AI apa pun pilihan Anda. Model dasar yang tersedia melalui watsonx dapat ditemukan di sini.

llm = WatsonxLLM(
    model_id="ibm/granite-3-8b-instruct",
    url=credentials.get("url"),
    apikey=credentials.get("apikey"),
    project_id=project_id,
    params={
        GenParams.DECODING_METHOD: "greedy",
        GenParams.TEMPERATURE: 0,
        GenParams.MIN_NEW_TOKENS: 5,
        GenParams.MAX_NEW_TOKENS: 250,
        GenParams.STOP_SEQUENCES: ["Human:", "Observation"],
    },
)

 Langkah 5. Muat dokumen Anda

Fungsi ini mengekstrak konten teks dari halaman penjelas IBM tentang machine learning. Fungsi ini menghapus elemen HTML yang tidak diinginkan (skrip, gaya) dan mengembalikan teks yang bersih dan dapat dibaca.

def get_text_from_url(url):
    response = requests.get(url)
    if response.status_code != 200:
        raise ValueError(f"Failed to fetch the page, status code: {response.status_code}")
    soup = BeautifulSoup(response.text, "html.parser")
    for script in soup(["script", "style"]):
        script.decompose()
    return soup.get_text(separator="\n", strip=True)
url = "https://www.ibm.com/id-id/think/topics/machine-learning"
web_text = get_text_from_url(url)
web_text

Alih-alih menggunakan metode pemotongan dengan panjang tetap, kami menggunakan LLM untuk membagi teks berdasarkan makna. Fungsi ini memanfaatkan LLM untuk membagi teks secara cerdas menjadi potongan yang bermakna secara semantik berdasarkan topik.

def agentic_chunking(text):
    """
    Dynamically splits text into meaningful chunks using LLM.
    """
    system_message = SystemMessage(content="You are an AI assistant helping to split text into meaningful chunks based on topics.")
    
    human_message = HumanMessage(content=f"Please divide the following text into semantically different, separate and meaningful chunks:\n\n{text}")

    response = llm.invoke([system_message, human_message]) # LLM returns a string
    return response.split("\n\n") # Split based on meaningful sections
chunks = agentic_chunking(web_text)
chunks

Mari kita cetak potongan untuk mendapatkan pemahaman yang lebih baik tentang struktur output mereka.

for i, chunk in enumerate(chunks,1):
    print(f"Chunk {i}:\n{chunk}\n{'-'*40}")

Hebat! Potongan berhasil dibuat oleh agen di output.

Langkah 6: Buat penyimpanan vektor

Sekarang setelah bereksperimen dengan pemotongan agen pada teks, mari kita lanjutkan implementasi RAG kita.

Untuk tutorial ini, kita memilih potongan yang dihasilkan oleh agen dan mengubahnya menjadi penanaman vektor. Penyimpanan vektor sumber terbuka yang dapat kita gunakan adalah Chroma DB. Kita dapat dengan mudah mengakses fungsionalitas Chroma melalui paket langchain_chroma. Mari kita awali basis data vektor Chroma, memberikannya model penanaman, dan menambahkan dokumen kita yang dihasilkan oleh pemotongan agen.

embeddings_model = HuggingFaceEmbeddings(model_name="ibm-granite/granite-embedding-30m-english")
 

Buat basis data vektor Chroma

vector_db = Chroma(
    collection_name="example_collection",
    embedding_function=embeddings_model
)

Konversi setiap potongan teks menjadi objek dokumen

documents = [Document(page_content=chunk) for chunk in chunks]

Tambahkan dokumen ke basis data vektor.

vector_db.add_documents(documents)

Langkah 7: Susun templat prompt

Sekarang kita dapat membuat templat prompt untuk LLM. Templat ini memastikan bahwa kita dapat mengajukan banyak pertanyaan sekaligus mempertahankan struktur prompt yang konsisten. Selain itu, kita dapat mengintegrasikan penyimpanan vektor sebagai pengambil data yang menyelesaikan kerangka kerja RAG.

prompt_template = """<|start_of_role|>user<|end_of_role|>Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.
{context}
Question: {input}<|end_of_text|>
<|start_of_role|>assistant<|end_of_role|>"""
qa_chain_prompt = PromptTemplate.from_template(prompt_template)
combine_docs_chain = create_stuff_documents_chain(llm, qa_chain_prompt)
rag_chain = create_retrieval_chain(vector_db.as_retriever(), combine_docs_chain)

Langkah 8: Perintahkan rantai RAG

Menggunakan potongan agen ini dalam alur kerja RAG, mari kita mulai kueri pengguna. Pertama, kita dapat secara strategis memerintahkan model tanpa konteks tambahan dari penyimpanan vektor yang kita buat untuk menguji, apakah model menggunakan pengetahuan bawaannya atau benar-benar menggunakan konteks RAG. Menggunakan penjelas machine learning dari IBM, mari kita ajukan pertanyaan sekarang.

output = llm.invoke("What is Model optimization process")
output

Jelas, model tersebut tidak dilatih menggunakan informasi tentang proses optimasi model, dan tanpa alat atau informasi eksternal, model ini tidak dapat memberikan informasi yang benar kepada kita. Model berhalusinasi. Sekarang, mari kita coba memberikan kueri yang sama ke rantai RAG dengan potongan agen yang kita buat.

rag_output = rag_chain.invoke({"input": "What is Model optimization process?"})
rag_output['answer']

Hebat! Model Granite menggunakan potongan RAG agen dengan benar sebagai konteks untuk memberikan kita informasi yang benar tentang proses pengoptimalan model sekaligus mempertahankan koherensi semantik.

Ringkasan

Dalam tutorial ini, kita menghasilkan potongan informasi relevan yang lebih kecil menggunakan agen AI dalam proses pemotongan dan membangun jalur generasi dengan dukungan pengambilan data (RAG).

Metode ini meningkatkan pengambilan informasi dan optimasi jendela konteks dengan menggunakan kecerdasan buatan dan pemrosesan bahasa alami (NLP). Ini mengoptimalkan potongan data untuk meningkatkan efisiensi pengambilan data saat memanfaatkan model bahasa besar (LLM) seperti model GPT dari OpenAI untuk mendapatkan hasil yang lebih baik.

Solusi terkait
Pengembangan agen AI IBM 

Bantu pengembang untuk membangun, menerapkan, dan memantau agen AI dengan studio IBM watsonx.ai.

Jelajahi watsonx.ai
Agen AI dan asisten IBM

Ciptakan produktivitas inovatif dengan salah satu rangkaian kemampuan paling komprehensif di industri untuk membantu bisnis membangun, menyesuaikan, dan mengelola agen dan asisten AI. 

Jelajahi agen AI
IBM Granite

Raih penghematan biaya lebih dari 90% dengan model Granite yang lebih kecil dan terbuka, yang dirancang untuk efisiensi pengembang. Model yang sesuai dengan kebutuhan perusahaan ini memberikan kinerja luar biasa terhadap tolok ukur keamanan dan di berbagai tugas perusahaan, mulai dari keamanan siber hingga RAG.

Jelajahi Granite
Ambil langkah selanjutnya

Otomatisasi alur kerja yang kompleks dan ciptakan produktivitas inovatif dengan salah satu rangkaian kemampuan paling komprehensif di industri untuk membantu bisnis membangun, menyesuaikan, dan mengelola agen dan asisten AI. 

Jelajahi pengembangan agen watsonx.ai Temukan watsonx Orchestrate