cari
Rumahpembangunan bahagian belakangTutorial PythonCara Mencipta RAG Anda Sendiri dengan Model LLM Percuma dan Pangkalan Pengetahuan

Artikel ini meneroka pelaksanaan sistem menjawab soalan yang mudah tetapi berkesan yang menggabungkan model berasaskan transformer moden. Sistem ini menggunakan T5 (Pengubah Pemindahan Teks ke Teks) untuk penjanaan jawapan dan Pengubah Ayat untuk pemadanan persamaan semantik.

Dalam artikel saya sebelum ini, saya menerangkan cara mencipta API terjemahan mudah dengan antara muka web menggunakan model LLM asas percuma. Kali ini, mari kita terjun ke dalam membina sistem Retrieval-Augmented Generation (RAG) menggunakan model LLM berasaskan transformer percuma dan pangkalan pengetahuan.

RAG (Retrieval-Augmented Generation) ialah teknik yang menggabungkan dua komponen utama:

Pendapatan semula: Mula-mula, ia mencari melalui pangkalan pengetahuan (seperti dokumen, pangkalan data, dll.) untuk mencari maklumat yang berkaitan untuk pertanyaan yang diberikan. Ini biasanya melibatkan:

  • Menukar teks kepada benam (vektor berangka yang mewakili makna)
  • Mencari kandungan serupa menggunakan ukuran persamaan (seperti persamaan kosinus)
  • Memilih maklumat yang paling relevan

Penjanaan: Kemudian ia menggunakan model bahasa (seperti T5 dalam kod kami) untuk menjana respons melalui:

Menggabungkan maklumat yang diambil dengan soalan asal

Mencipta respons bahasa semula jadi berdasarkan konteks ini

Dalam kod:

  • The SentenceTransformer mengendalikan bahagian pengambilan semula dengan mencipta pembenaman
  • Model T5 mengendalikan bahagian penjanaan dengan mencipta jawapan

Kebaikan RAG:

  • Respons yang lebih tepat kerana ia berasaskan pengetahuan khusus
  • Mengurangkan halusinasi berbanding tindak balas LLM tulen
  • Keupayaan untuk mengakses maklumat terkini atau khusus domain
  • Lebih terkawal dan telus daripada generasi tulen

Gambaran Keseluruhan Seni Bina Sistem

How to Create Your Own RAG with Free LLM Models and a Knowledge Base

Pelaksanaan terdiri daripada kelas SimpleQASystem yang mengatur dua komponen utama:

  • Sistem carian semantik menggunakan Pengubah Ayat
  • Sistem penjanaan jawapan menggunakan T5

Anda boleh memuat turun versi terkini kod sumber di sini: https://github.com/alexander-uspenskiy/rag_project

Rajah Sistem

How to Create Your Own RAG with Free LLM Models and a Knowledge Base

Panduan Persediaan Projek RAG

Panduan ini akan membantu anda menyediakan projek Retrieval-Augmented Generation (RAG) anda pada kedua-dua macOS dan Windows.

Prasyarat

Untuk macOS:

Pasang Homebrew (jika belum dipasang):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Pasang Python 3.8 menggunakan Homebrew
bru pasang python@3.10
Untuk Windows:
Muat turun dan pasang Python 3.8 daripada python.org
Pastikan anda menyemak “Tambah Python pada PATH” semasa pemasangan

Persediaan Projek

Langkah 1: Cipta Direktori Projek

macOS:

mkdir RAG_project
cd RAG_project
Tingkap:

mkdir RAG_project
cd RAG_project

Langkah 2: Sediakan Persekitaran Maya

macOS:

python3 -m venv venv
sumber venv/bin/activate

Tingkap:

python -m venv venv
venvScriptsactivate

**Komponen Teras

  1. Permulaan**
def __init__(self):
    self.model_name = 't5-small'
    self.tokenizer = T5Tokenizer.from_pretrained(self.model_name)
    self.model = T5ForConditionalGeneration.from_pretrained(self.model_name)
    self.encoder = SentenceTransformer('paraphrase-MiniLM-L6-v2')

Sistem dimulakan dengan dua model utama:

T5-kecil: Versi model T5 yang lebih kecil untuk menjana jawapan
paraphrase-MiniLM-L6-v2: Model pengubah ayat untuk pengekodan teks kepada vektor yang bermakna

2. Penyediaan Set Data

def prepare_dataset(self, data: List[Dict[str, str]]):
    self.answers = [item['answer'] for item in data]
    self.answer_embeddings = []
    for answer in self.answers:
        embedding = self.encoder.encode(answer, convert_to_tensor=True)
        self.answer_embeddings.append(embedding)

Fasa penyediaan set data:

  • Mengekstrak jawapan daripada data input
  • Mencipta benam untuk setiap jawapan menggunakan pengubah ayat
  • Menyimpan kedua-dua jawapan dan benamnya untuk mendapatkan semula cepat

Bagaimana Sistem Berfungsi

1. Pemprosesan Soalan

Apabila pengguna menyerahkan soalan, sistem mengikut langkah berikut:

Penjanaan Benam: Soalan ditukar kepada perwakilan vektor menggunakan model pengubah ayat yang sama digunakan untuk jawapan.

Carian Semantik: Sistem mencari jawapan tersimpan yang paling relevan dengan:

  • Mengira persamaan kosinus antara pembenaman soalan dan semua pembenaman jawapan
  • Memilih jawapan dengan skor persamaan tertinggi Pembentukan Konteks: Jawapan yang dipilih menjadi konteks untuk T5 menjana respons akhir.

2. Penjanaan Jawapan

def get_answer(self, question: str) -> str:
    # ... semantic search logic ...
    input_text = f"Given the context, what is the answer to the question: {question} Context: {context}"
    input_ids = self.tokenizer(input_text, max_length=512, truncation=True, 
                             padding='max_length', return_tensors='pt').input_ids
    outputs = self.model.generate(input_ids, max_length=50, num_beams=4, 
                                early_stopping=True, no_repeat_ngram_size=2

Proses penjanaan jawapan:

  • Menggabungkan soalan dan konteks menjadi gesaan untuk T5
  • Tokenize teks input dengan panjang maksimum 512 token
  • Menghasilkan jawapan menggunakan carian pancaran dengan parameter ini:
  • panjang_maks=50: Hadkan panjang jawapan
  • num_beams=4: Menggunakan carian rasuk dengan 4 rasuk
  • early_stopping=Benar: Menghentikan penjanaan apabila semua rasuk mencapai token tamat
  • no_repeat_ngram_size=2: Menghalang pengulangan bigram

3. Jawapan Pembersihan

def __init__(self):
    self.model_name = 't5-small'
    self.tokenizer = T5Tokenizer.from_pretrained(self.model_name)
    self.model = T5ForConditionalGeneration.from_pretrained(self.model_name)
    self.encoder = SentenceTransformer('paraphrase-MiniLM-L6-v2')
  • Mengalih keluar perkataan berturut-turut pendua (tidak peka huruf besar-kecil)
  • Menggunakan huruf besar pada huruf pertama jawapan
  • Mengalih keluar ruang kosong tambahan

Kod Sumber Penuh

Anda boleh memuat turun versi terbaharu kod sumber di sini: https://github.com/alexander-uspenskiy/rag_project

def prepare_dataset(self, data: List[Dict[str, str]]):
    self.answers = [item['answer'] for item in data]
    self.answer_embeddings = []
    for answer in self.answers:
        embedding = self.encoder.encode(answer, convert_to_tensor=True)
        self.answer_embeddings.append(embedding)

Pengurusan Memori:

Sistem secara eksplisit menggunakan CPU untuk mengelakkan masalah ingatan
Pembenaman ditukar kepada tensor CPU apabila diperlukan
Panjang input terhad kepada 512 token

Pengendalian Ralat:

  • Cuba menyeluruh kecuali blok sepanjang kod
  • Mesej ralat yang bermakna untuk nyahpepijat
  • Semakan pengesahan untuk komponen yang tidak dimulakan

Contoh Penggunaan

def get_answer(self, question: str) -> str:
    # ... semantic search logic ...
    input_text = f"Given the context, what is the answer to the question: {question} Context: {context}"
    input_ids = self.tokenizer(input_text, max_length=512, truncation=True, 
                             padding='max_length', return_tensors='pt').input_ids
    outputs = self.model.generate(input_ids, max_length=50, num_beams=4, 
                                early_stopping=True, no_repeat_ngram_size=2

Jalankan di terminal

How to Create Your Own RAG with Free LLM Models and a Knowledge Base

Had dan Potensi Penambahbaikan

Skalabiliti:

Pelaksanaan semasa menyimpan semua benam dalam ingatan
Boleh dipertingkatkan dengan pangkalan data vektor untuk aplikasi berskala besar

Kualiti Jawapan:

Sangat bergantung pada kualiti set data jawapan yang disediakan
Terhad oleh tetingkap konteks T5-small
Boleh mendapat manfaat daripada pengesahan jawapan atau pemarkahan keyakinan

Prestasi:

  • Menggunakan CPU sahaja mungkin lebih perlahan untuk aplikasi berskala besar
  • Boleh dioptimumkan dengan pemprosesan kelompok
  • Boleh melaksanakan caching untuk soalan lazim

Kesimpulan

Pelaksanaan ini menyediakan asas yang kukuh untuk sistem menjawab soalan, menggabungkan kekuatan carian semantik dan penjanaan teks berasaskan transformer. Jangan ragu untuk bermain dengan parameter model (seperti max_length, num_beams, early_stopping, no_repeat_ngram_size, dll) untuk mencari cara yang lebih baik untuk mendapatkan jawapan yang lebih koheren dan stabil. Walaupun terdapat ruang untuk penambahbaikan, pelaksanaan semasa menawarkan keseimbangan yang baik antara kerumitan dan fungsi, menjadikannya sesuai untuk tujuan pendidikan dan aplikasi kecil hingga sederhana.

Selamat mengekod!

Atas ialah kandungan terperinci Cara Mencipta RAG Anda Sendiri dengan Model LLM Percuma dan Pangkalan Pengetahuan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Python vs C: Memahami perbezaan utamaPython vs C: Memahami perbezaan utamaApr 21, 2025 am 12:18 AM

Python dan C masing -masing mempunyai kelebihan sendiri, dan pilihannya harus berdasarkan keperluan projek. 1) Python sesuai untuk pembangunan pesat dan pemprosesan data kerana sintaks ringkas dan menaip dinamik. 2) C sesuai untuk prestasi tinggi dan pengaturcaraan sistem kerana menaip statik dan pengurusan memori manual.

Python vs C: Bahasa mana yang harus dipilih untuk projek anda?Python vs C: Bahasa mana yang harus dipilih untuk projek anda?Apr 21, 2025 am 12:17 AM

Memilih Python atau C bergantung kepada keperluan projek: 1) Jika anda memerlukan pembangunan pesat, pemprosesan data dan reka bentuk prototaip, pilih Python; 2) Jika anda memerlukan prestasi tinggi, latensi rendah dan kawalan perkakasan yang rapat, pilih C.

Mencapai matlamat python anda: kekuatan 2 jam sehariMencapai matlamat python anda: kekuatan 2 jam sehariApr 20, 2025 am 12:21 AM

Dengan melabur 2 jam pembelajaran python setiap hari, anda dapat meningkatkan kemahiran pengaturcaraan anda dengan berkesan. 1. Ketahui Pengetahuan Baru: Baca dokumen atau tutorial menonton. 2. Amalan: Tulis kod dan latihan lengkap. 3. Kajian: Menyatukan kandungan yang telah anda pelajari. 4. Amalan Projek: Sapukan apa yang telah anda pelajari dalam projek sebenar. Pelan pembelajaran berstruktur seperti ini dapat membantu anda menguasai Python secara sistematik dan mencapai matlamat kerjaya.

Memaksimumkan 2 Jam: Strategi Pembelajaran Python BerkesanMemaksimumkan 2 Jam: Strategi Pembelajaran Python BerkesanApr 20, 2025 am 12:20 AM

Kaedah untuk belajar python dengan cekap dalam masa dua jam termasuk: 1. Semak pengetahuan asas dan pastikan anda sudah biasa dengan pemasangan Python dan sintaks asas; 2. Memahami konsep teras python, seperti pembolehubah, senarai, fungsi, dan lain -lain; 3. Menguasai penggunaan asas dan lanjutan dengan menggunakan contoh; 4. Belajar kesilapan biasa dan teknik debugging; 5. Memohon pengoptimuman prestasi dan amalan terbaik, seperti menggunakan komprehensif senarai dan mengikuti panduan gaya PEP8.

Memilih antara python dan c: bahasa yang sesuai untuk andaMemilih antara python dan c: bahasa yang sesuai untuk andaApr 20, 2025 am 12:20 AM

Python sesuai untuk pemula dan sains data, dan C sesuai untuk pengaturcaraan sistem dan pembangunan permainan. 1. Python adalah mudah dan mudah digunakan, sesuai untuk sains data dan pembangunan web. 2.C menyediakan prestasi dan kawalan yang tinggi, sesuai untuk pembangunan permainan dan pengaturcaraan sistem. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Python vs C: Analisis perbandingan bahasa pengaturcaraanPython vs C: Analisis perbandingan bahasa pengaturcaraanApr 20, 2025 am 12:14 AM

Python lebih sesuai untuk sains data dan perkembangan pesat, manakala C lebih sesuai untuk prestasi tinggi dan pengaturcaraan sistem. 1. Sintaks Python adalah ringkas dan mudah dipelajari, sesuai untuk pemprosesan data dan pengkomputeran saintifik. 2.C mempunyai sintaks kompleks tetapi prestasi yang sangat baik dan sering digunakan dalam pembangunan permainan dan pengaturcaraan sistem.

2 jam sehari: potensi pembelajaran python2 jam sehari: potensi pembelajaran pythonApr 20, 2025 am 12:14 AM

Adalah mungkin untuk melabur dua jam sehari untuk belajar Python. 1. Belajar Pengetahuan Baru: Ketahui konsep baru dalam satu jam, seperti senarai dan kamus. 2. Amalan dan Amalan: Gunakan satu jam untuk melakukan latihan pengaturcaraan, seperti menulis program kecil. Melalui perancangan dan ketekunan yang munasabah, anda boleh menguasai konsep teras Python dalam masa yang singkat.

Python vs C: Lengkung pembelajaran dan kemudahan penggunaanPython vs C: Lengkung pembelajaran dan kemudahan penggunaanApr 19, 2025 am 12:20 AM

Python lebih mudah dipelajari dan digunakan, manakala C lebih kuat tetapi kompleks. 1. Sintaks Python adalah ringkas dan sesuai untuk pemula. Penaipan dinamik dan pengurusan memori automatik menjadikannya mudah digunakan, tetapi boleh menyebabkan kesilapan runtime. 2.C menyediakan kawalan peringkat rendah dan ciri-ciri canggih, sesuai untuk aplikasi berprestasi tinggi, tetapi mempunyai ambang pembelajaran yang tinggi dan memerlukan memori manual dan pengurusan keselamatan jenis.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa