Dalam tutorial ini, Anda akan menggunakan Docling dari IBM dan IBM Granite vision sumber terbuka, penanaman berbasis teks, dan model generative AI untuk membuat sistem RAG. Model-model ini tersedia melalui berbagai kerangka kerja sumber terbuka. Dalam tutorial ini, kita akan menggunakan Replicate untuk menghubungkan ke visi IBM Granite dan model AI generatif serta HuggingFace untuk terhubung ke model penanaman.
Generasi dengan dukungan pengambilan data (RAG) adalah teknik yang digunakan dengan model bahasa besar (LLM) untuk menghubungkan model dengan basis pengetahuan informasi di luar data yang telah dilatih LLM tanpa harus melakukan penyempurnaan. RAG tradisional terbatas pada contoh penggunaan berbasis teks seperti ringkasan teks dan chatbot.
Multimodal RAG dapat menggunakan multimodal LLM (MLLM) untuk memproses informasi dari berbagai jenis data untuk dimasukkan sebagai bagian dari basis pengetahuan eksternal yang digunakan dalam RAG. Data multimodal dapat mencakup teks, gambar, audio, video atau bentuk lainnya. LLM multimodal populer termasuk Gemini Google, Meta Llama 3.2 dan GPT-4 dan GPT-4o OpenAI.
Untuk resep ini, Anda akan menggunakan model IBM Granite yang mampu memproses modalitas yang berbeda. Anda akan membuat sistem AI untuk menjawab pertanyaan pengguna real-time dari data tidak terstruktur dalam PDF.
Selamat datang di tutorial Granite. Dalam tutorial ini, Anda akan belajar cara memanfaatkan kekuatan alat-alat canggih untuk membangun pipeline RAG multimodal yang didukung oleh AI. Tutorial ini akan memandu Anda melalui proses berikut:
Tutorial ini menggunakan tiga teknologi mutakhir:
Pada akhir tutorial ini, Anda akan mencapai hal berikut:
Tutorial ini dirancang untuk pengembang, peneliti, dan penggemar AI yang ingin meningkatkan pengetahuan mereka tentang manajemen dokumen dan teknik pemrosesan bahasa alami (NLP) tingkat lanjut. Tutorial ini juga dapat ditemukan di Granite Snack Cookbook GitHub milik Komunitas IBM Granite dalam bentuk Jupyter Notebook.
! echo "::group::Install Dependencies"
%pip install uv
! uv pip install git+https://github.com/ibm-granite-community/utils.git \
transformers \
pillow \
langchain_classic \
langchain_core \
langchain_huggingface sentence_transformers \
langchain_milvus 'pymilvus[milvus_lite]' \
docling \
'langchain_replicate @ git+https://github.com/ibm-granite-community/langchain-replicate.git'
! echo "::endgroup::"
Untuk melihat beberapa informasi pencatatan, kita dapat mengonfigurasi level log INFO.
CATATAN: Anda dapat melewatkan menjalankan sel ini.
Tentukan model penanaman yang akan digunakan untuk menghasilkan vektor penanaman teks. Di sini kita akan menggunakan salah satu model Granite Embeddings
Untuk menggunakan model penanaman yang berbeda, ganti sel kode ini dengan salah satu dari resep Model Penanaman ini.
Tentukan MLLM yang akan digunakan untuk pemahaman gambar. Kami akan menggunakan model visi Granite.
Tentukan model bahasa yang akan digunakan untuk operasi pembuatan RAG. Di sini kita menggunakan klien Replicate LangChain untuk menyambung ke model Granite dari ibm-granite org di Replicate.
Untuk menyiapkan Replicate, lihat Memulai dengan Replicate. Untuk menyambung ke model pada penyedia selain Replicate, gantikan sel kode ini dengan sel kode dari resep komponen LLM.
Untuk menghubungkan ke model pada penyedia selain Replicate, gantikan sel kode ini dengan sel kode dari resep komponen LLM.
from langchain_replicate import ChatReplicate
model_path = "ibm-granite/granite-4.0-h-small"
model = ChatReplicate(
model=model_path,
replicate_api_token=get_env_var("REPLICATE_API_TOKEN"),
model_kwargs={
"max_tokens": 1000, # Set the maximum number of tokens to generate as output.
"min_tokens": 100, # Set the minimum number of tokens to generate as output.
},
)
Dalam contoh ini, dari sekumpulan dokumen sumber, kami menggunakan Docling untuk mengonversi dokumen menjadi teks dan gambar. Teks kemudian dibagi menjadi beberapa bagian. Gambar diproses oleh MLLM untuk menghasilkan ringkasan gambar.
Docling akan mengunduh dokumen PDF dan memprosesnya sehingga kami dapat memperoleh teks dan gambar yang terkandung dalam dokumen. Dalam PDF, ada berbagai jenis data, termasuk teks, tabel, grafik, dan gambar.
Dengan dokumen yang diproses, kami kemudian memproses lebih lanjut elemen teks dalam dokumen. Kami membagi data tersebut menjadi ukuran yang sesuai untuk model penyematan yang kami gunakan. Daftar dokumen LangChain dibuat dari potongan teks.
Selanjutnya kami memproses tabel apa pun dalam dokumen. Kami mengonversi data tabel ke format markdown untuk diteruskan ke model bahasa. Daftar dokumen LangChain dibuat dari rendering markdown tabel.
Akhirnya, kami memproses semua gambar yang terdapat dalam dokumen. Di sini kita menggunakan model bahasa visi untuk memahami isi gambar. Dalam contoh ini, kami tertarik pada informasi tekstual apa pun dalam gambar. Anda mungkin ingin bereksperimen dengan teks prompt yang berbeda untuk melihat bagaimana itu dapat meningkatkan hasil.
CATATAN: Pemrosesan gambar dapat memakan waktu yang sangat lama tergantung pada jumlah gambar dan layanan yang menjalankan model bahasa visi.
Kita kemudian dapat menampilkan dokumen LangChain yang dibuat dari dokumen input.
Dengan menggunakan model penanaman, kita memuat dokumen dari potongan teks dan menghasilkan teks gambar ke dalam basis data vektor. Pembuatan basis data vektor ini memungkinkan kita untuk dengan mudah melakukan pencarian kesamaan semantik di seluruh dokumen kita.
CATATAN: Populasi basis data vektor dapat memakan waktu tergantung pada model penanaman dan layanan Anda.
Tentukan basis data yang akan digunakan untuk menyimpan dan mengambil vektor penanaman.
Untuk terhubung ke basis data vektor selain Milvus, ganti sel kode ini dengan satu dari resep Penyimpanan Vektor ini.
Kami sekarang menambahkan semua dokumen LangChain untuk teks, tabel, dan deskripsi gambar ke basis data vektor.
Sekarang setelah kita berhasil mengonversi dokumen kami dan memvektoriskannya, kita dapat menyiapkan pipeline RAG.
Di sini kita menguji basis data vektor dengan mencari potongan dengan informasi yang relevan dengan kueri kita di ruang vektor. Kita menampilkan dokumen yang terkait dengan deskripsi gambar yang diambil.
Jangan ragu untuk mencoba pertanyaan yang berbeda.
Dokumen yang dikembalikan harus responsif terhadap kueri. Mari kita lanjutkan dan membangun pipeline RAG kita.
Pertama kita membuat prompt bagi Granite untuk melakukan query RAG. Kami menggunakan template obrolan Granite dan menyediakan nilai placeholder yang akan diganti oleh pipeline RAG LangChain.
Selanjutnya, kita membangun pipeline RAG dengan menggunakan template prompt Granite yang dibuat sebelumnya.
from ibm_granite_community.langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_classic.chains.retrieval import create_retrieval_chain
from langchain_core.prompts import ChatPromptTemplate
# Create a Granite prompt for question-answering with the retrieved context
prompt_template = ChatPromptTemplate.from_template("{input}")
# Assemble the retrieval-augmented generation chain
combine_docs_chain = create_stuff_documents_chain(
llm=model,
prompt=prompt_template,
)
rag_chain = create_retrieval_chain(
retriever=vector_db.as_retriever(),
combine_docs_chain=combine_docs_chain,
)
Saluran ini menggunakan kueri untuk menemukan dokumen dari basis data vektor dan menggunakannya sebagai konteks untuk kueri.
from ibm_granite_community.notebook_utils import wrap_text
output = rag_chain.invoke({"input": query})
print(wrap_text(output['answer']))
Luar biasa! Kami telah membuat aplikasi AI yang berhasil memanfaatkan pengetahuan dari teks dan gambar dokumen sumber.
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.
Gunakan AI di bisnis Anda dalam perpaduan antara keahlian AI terdepan di industri dari IBM dan portofolio solusi Anda.
Temukan kembali alur kerja dan operasi yang penting dengan menambahkan AI untuk memaksimalkan pengalaman, pengambilan keputusan secara real-time, dan nilai bisnis.