Flazzo memiliki fokus utama untuk menambah nilai bisnis Anda.

Blog

Cara menggunakan pengambilan generasi tambahan secara lokal

17998071-thumb.jpg
Blog

Cara menggunakan pengambilan generasi tambahan secara lokal

[ad_1]

Dalam postingan blog ini, kita akan mempelajari cara menggunakan retrieval augmented generation (RAG) untuk membuat aplikasi AI percakapan yang lebih efektif dan menarik. Kami akan membahas dasar-dasar RAG, manfaatnya, dan memberikan petunjuk langkah demi langkah tentang cara mengembangkan mekanisme RAG Anda sendiri untuk penggunaan lokal.

Apa itu RAG?

RAG (Reinforcement-based Generation) menggabungkan kekuatan dari dua pendekatan penting terhadap pemrosesan bahasa alami (NLP): model berbasis pengambilan dan model berbasis generasi. Dalam metode berbasis generasi tradisional, sistem AI menghasilkan teks dari awal menggunakan model dan aturan yang telah dilatih sebelumnya. Namun, pendekatan ini sering kali menyebabkan terbatasnya kreativitas, kurangnya pengetahuan spesifik konteks, dan buruknya konsistensi.

Sebaliknya, model berbasis pengambilan memanfaatkan model bahasa yang telah dilatih sebelumnya untuk mengambil informasi yang relevan dari korpora besar, kumpulan data khusus, atau database. Meskipun model-model ini unggul dalam memberikan jawaban akurat berdasarkan teks yang sudah ada, model-model ini mungkin kesulitan menghadapi konteks baru atau ambigu.

Model RAG dan model penyempurnaan LLM

Menyempurnakan LLM (Model Bahasa Besar) melibatkan penyesuaian pra-pelatihannya dengan tugas tertentu. Awalnya, LLM dilatih pada kumpulan data besar untuk mempelajari pola linguistik umum. Proses ini diikuti dengan pelatihan tambahan pada kumpulan data yang lebih kecil, yang disesuaikan dengan aplikasi tertentu, seperti layanan pelanggan atau pembuatan kode. [1].

Sebaliknya, RAG (Reinforcement-based Generation) berguna ketika Anda membutuhkan LLM Anda untuk menghasilkan jawaban berdasarkan sejumlah besar data yang diperbarui dan spesifik konteks. Misalnya, memperkaya respons model LLM dengan kumpulan data dari data lake atau dokumen arsip Anda.

RAG menawarkan alternatif penyempurnaan yang hemat biaya karena persyaratan sumber daya dan pengetahuan teknisnya yang minimal. Hanya dengan 10 baris kode Python, Anda dapat memastikan model Anda memiliki akses ke data yang paling relevan dan terkini.

Banyak aplikasi klien Web dan Desktop, seperti Open WebUI atau AnythingLLM, sudah mengintegrasikan fungsionalitas RAG. Namun, bagi perusahaan swasta, pembuatan sistem RAG khusus diperlukan untuk mengunggah dan mengintegrasikan data untuk digunakan oleh model LLM mereka.

Dalam postingan blog kali ini, saya akan memberikan panduan langkah demi langkah tentang cara mengimplementasikan RAG dengan Python menggunakan pola Llama3.

Mekanisme RAG dapat diringkas sebagai berikut:

Grafik ringkasan mekanisme RAG

Untuk membuat sistem RAG lokal, Anda memerlukan komponen berikut.

  1. Sumber: Dokumen sumber; ini bisa berupa file .doc, txt atau pdf yang terletak di jaringan Anda
  2. Memuat: Pengumpan yang akan memuat dan membagi dokumen menjadi beberapa bagian
  3. Mengubah: Ubah lagu untuk integrasi.
  4. Model integrasi: Model penyematan mengambil masukan sebagai blok dan mengeluarkan penyematan sebagai representasi vektor.
  5. Basis data vektor: Database vektor untuk menyimpan integrasi
  6. Model LLM: Model terlatih yang akan menggunakan integrasi untuk menjawab pertanyaan pengguna

Untuk memulai, izinkan saya merangkum komponen-komponen utama yang akan saya gunakan selanjutnya.

  1. Server LLM: Server lokal Ollama
  2. Model LLM: Lama 3 8b
  3. Model integrasi:semua-MiniLM-L6-v2
  4. Basis data vektor: SQLiteVSS (sqlite3)
  5. Bingkai: LangChain
  6. Sistem operasi: macOS
  7. Bahasa pemrograman: Python 3.11.3

Petunjuk dan contoh yang akan saya gunakan tersedia di bagian sumber daya [2]. Untuk menjalankan contoh penulis, Anda harus memiliki keahlian yang baik dalam Python. Di sini saya akan memandu Anda melalui setiap langkah yang diperlukan untuk menghemat waktu dan tenaga.

Panduan langkah demi langkah

Jika Anda merasa nyaman dengan Python, silakan lewati langkah-langkah sebelum versi 7.

Langkah 1: Unduh dan instal Python

Jangan gunakan sistem Python Anda untuk menjalankan aplikasi. Instal Python 3 dengan homebrew.

homebrew install python

Langkah 2: Instal pip

python -m ensurepip or python3 -m ensurepip

Langkah 3: Instal Notebook dan Lab Jupyter

python3 -m pip install jupyterlab
python3 -m pip install notebook

Langkah 4: Jalankan Jupyter Lab atau Notebook

python3 -m jupyterlab

Perintah sebelumnya akan meluncurkan antarmuka web yang memungkinkan Anda membuat, menjalankan, dan mengelola aplikasi Python di URL yang ditentukan.

Langkah 5: Instal SQLite3

brew install sqlite3

Setelah menginstal database SQLite3, tambahkan baris berikut ke file .bashprofile atau .zshrc Anda:

export PATH="/usr/local/opt/sqlite/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/sqlite/lib"
export CPPFLAGS="-I/usr/local/opt/sqlite/include"
export PYTHON_CONFIGURE_OPTS="--enable-loadable-sqlite-extensions"

Buka kembali terminalnya.

Langkah 6: Tambahkan Buku Catatan Baru

Tambahkan peluncur atau buku catatan baru ke lab Jupyter lokal Anda. Tambahkan sel pertama dengan kode berikut yang akan menginstal semua paket yang diperlukan.

#install necessary package 
pip install --upgrade langchain
pip install -U langchain-community
pip install -U langchain-huggingface
pip install sentence-transformers
pip install --upgrade --quiet  sqlite-vss

Langkah 7: Impor semua paket yang diperlukan

from langchain.embeddings.sentence_transformer import SentenceTransformerEmbeddings
from langchain_huggingface import HuggingFaceEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import SQLiteVSS
from langchain.document_loaders import TextLoader

Unduh dokumen di link dan letakkan di suatu tempat di ruang kerja Anda.

Langkah 8: Muat dokumen sumber dari direktori

# Load the document using a LangChain text loader
loader = TextLoader("PATH_TO_THE_FILE/stateoftheunion2023.txt")
documents = loader.load()

Langkah 9: Bagilah Dokumen menjadi Beberapa Bagian

# Split the document into chunks
text_splitter = CharacterTextSplitter (chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
texts = [doc.page_content for doc in docs]

Di sini Anda dapat mencetak potongan ke konsol untuk memastikan dokumen diurai.

print (texts)

Langkah 10: Integrasi potongan-potongan

# Use the sentence transformer package with the all-MiniLM-L6-v2 embedding model embedding_function = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2") 

Langkah 11: Muat integrasi ke dalam database SQLite3

# Load the text embeddings in SQLiteVSS in a table named state_union
db = SQLiteVSS.from_texts(
    texts = texts,
    embedding = embedding_function,
    table = "state_union",
    db_file = "/tmp/vss.db"
)

Langkah 12 (Opsional): Kueri database dan selidiki integrasi

Gunakan DBeaver atau Visual Studio Code untuk menanyakan database SQLite3 lokal. File database untuk database lokal adalah “/tmp/vss.db”.

Kueri database dan selidiki integrasi

Langkah 13: Kueri Pencarian Semantik (Kesamaan)

# First, we will do a simple retrieval using similarity search
# Query
question = "What did the president say about Nancy Pelosi?"
data = db.similarity_search(question)
# print results
print(data[0].page_content)

Hasilnya akan terlihat seperti berikut:

State of The Union 2023: Biden's Full Speech

Mr. Speaker. Madam Vice President. Our First Lady and Second Gentleman.

Members of Congress and the Cabinet. Leaders of our military.

Mr. Chief Justice, Associate Justices, and retired Justices of the Supreme Court.

And you, my fellow Americans.

I start tonight by congratulating the members of the 118th Congress and the new Speaker of the House, Kevin McCarthy.

Mr. Speaker, I look forward to working together.

I also want to congratulate the new leader of the House Democrats and the first Black House Minority Leader in history, Hakeem Jeffries.

Congratulations to the longest serving Senate Leader in history, Mitch McConnell.

And congratulations to Chuck Schumer for another term as Senate Majority Leader, this time with an even bigger majority.

And I want to give special recognition to someone who I think will be considered the greatest Speaker in the history of this country, Nancy Pelosi.

Langkah 14: Jalankan server Ollama lokal

ollama run llama3

Langkah 15: Impor paket LangChain LLM dan sambungkan ke server lokal

# LLM
from langchain.llms import Ollama
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
llm = Ollama(
    model = "llama3",
    verbose = True,
    callback_manager = CallbackManager([StreamingStdOutCallbackHandler()]),
)

Langkah 16: Gunakan Prompt LangChain untuk Mengajukan Pertanyaan

# QA chain
from langchain.chains import RetrievalQA
from langchain import hub
# LangChain Hub is a repository of LangChain prompts shared by the community
QA_CHAIN_PROMPT = hub.pull("rlm/rag-prompt-llama")
qa_chain = RetrievalQA.from_chain_type(
    llm,
    # we create a retriever to interact with the db using an augmented context
    retriever = db.as_retriever(), 
    chain_type_kwargs = {"prompt": QA_CHAIN_PROMPT},
)

Langkah 17: Cetak hasilnya

result = qa_chain({"query": question})

Ini mencetak hasil kueri. Hasil kueri akan terlihat seperti ini:

The president referred to Nancy Pelosi as "someone who I think will be considered the greatest Speaker in the history of this country."

Perhatikan bahwa responsnya mungkin memerlukan waktu beberapa menit, bergantung pada sumber daya komputer lokal Anda.

Dalam hal ini, LLM menghasilkan jawaban ringkas untuk kueri berdasarkan penyematan. Saat mencari kesamaan semantik, kami mengirimkan kueri ke database vektor, yang mengembalikan skor kesamaan untuk jawabannya.

Sumber daya

Bagian artikel ini diambil dari buku “Memulai Dengan AI Generatif”.

  1. Generasi ditambah dengan pemulihan atau penyempurnaan: mana yang cocok untuk Anda
  2. Generasi lokal sepenuhnya diperkuat dengan pemulihan, selangkah demi selangkah

[ad_2]