Saya menerima maklum balas yang sangat baik daripada ahli komuniti mengenai penyerahan saya kepada peraduan Python 2024. Saya harap tidak mengapa jika saya menyiarkannya semula di sini:
anda membina bekas lebih daripada 5 kali ganda saiz IRIS tulen
dan ini memerlukan masa
permulaan kontena juga lambat tetapi selesai
belakang boleh diakses seperti yang diterangkan
produksi sedang berkeliaran
frontend bertindak balas
Saya gagal memahami apa yang ingin ditunjukkan
penjelasan ditujukan untuk pakar selain saya
Serahan ada di sini: https://openexchange.intersystems.com/package/IRIS-RAG-App
Saya amat menghargai maklum balas ini, bukan sedikit pun kerana ia merupakan gesaan yang bagus untuk artikel tentang projek itu. Projek ini termasuk dokumentasi yang agak komprehensif, tetapi ia menganggap kebiasaan dengan pembenaman vektor, saluran paip RAG dan penjanaan teks LLM, serta ular sawa dan perpustakaan ular sawa popular tertentu, seperti LLamaIndex.
Artikel ini, yang ditulis sepenuhnya tanpa AI, bertujuan untuk mencuba penjelasan tentang perkara tersebut dan cara ia sesuai bersama dalam projek ini untuk menunjukkan RAG aliran kerja pada IRIS.
Bekas adalah besar kerana kebergantungan perpustakaan yang diperlukan untuk pakej ular sawa yang terlibat dalam mencipta pembenaman vektor adalah sangat besar. Ada kemungkinan bahawa melalui import yang lebih terpilih, saiznya boleh dikurangkan dengan ketara.
Memang mengambil masa untuk mula membina bekas itu, tetapi sebaik sahaja anda melakukannya, masa yang diperlukan untuk memulakannya adalah lebih singkat. Masa permulaan masih boleh dipertingkatkan. Sebab utama permulaan mengambil masa yang lama ialah entrypoint.sh telah dikemas kini dengan andaian bahawa perubahan mungkin telah dibuat pada mana-mana bahagian aplikasi sejak permulaan terakhir itu, termasuk pemindahan pangkalan data, konfigurasi css, konfigurasi javascript dan python kod bahagian belakang, dan ia menyusun semula keseluruhan projek setiap kali ia dimulakan. Ini adalah untuk memudahkan anda memulakan pembangunan pada projek ini, kerana jika tidak, ia boleh menjadi sukar untuk menjalankan binaan bahagian hadapan dan belakang dengan betul apabila perubahan dibuat. Dengan cara ini, jika anda menukar mana-mana kod dalam projek, anda hanya perlu memulakan semula bekas, mungkin memulihkan pengeluaran di bahagian belakang dan perubahan anda harus ditunjukkan dalam antara muka dan pengendalian aplikasi.
Saya agak pasti bahawa pengeluaran di bahagian belakang adalah apa yang menghantar permintaan http kepada aplikasi Django, dan penting untuk saling kendali dalam pakej ini. Walau bagaimanapun, saya baru menggunakan platform IRIS dan perlu belajar lebih banyak tentang produksi.
Seterusnya saya ingin memberikan penjelasan menyeluruh tentang pembenaman vektor, LLM dan RAG. Yang pertama dicipta ialah pembenaman vektor. Mula-mula kita boleh menerangkan vektor. Dalam kebanyakan konteks, vektor ialah arah. Ia adalah anak panah yang menunjuk ke suatu tempat di angkasa. Secara lebih formal, vektor ialah "kuantiti yang mempunyai arah dan juga magnitud". Ini boleh dicontohkan oleh bunga api, yang bergerak ke arah tertentu dan meletup pada titik tertentu di angkasa. Katakan setiap bunga api dilepaskan dari titik pusat yang sama, titik asal, [0,0,0], tetapi semuanya terbang keluar dan meletup dalam awan di sekitar titik asal itu. Secara matematik anda boleh menerangkan lokasi setiap letupan bunga api menggunakan tiga sistem koordinat, [x,y,z] dan itu akan menjadi "pembenaman vektor" untuk letupan bunga api. Jika anda mengambil banyak video paparan bunga api dan merekodkan semua letupan bunga api sebagai set data, maka anda akan mencipta sejenis pangkalan data pembenaman vektor, atau kedai vektor, bagi paparan bunga api.
Apakah yang boleh anda lakukan dengan maklumat tentang pertunjukan bunga api itu? Jika saya menunjukkan bunga api tertentu dan meminta bunga api yang meletup paling hampir dengan titik yang sama sepanjang keseluruhan paparan, anda boleh menemui bunga api lain yang meletup di titik berdekatan di angkasa. Anda hanya mencari yang paling dekat, dan ada matematik untuk melakukannya.
Ingat, kami hanya merekodkan tiga nombor untuk setiap bunga api, koordinat x, y dan z dalam ruang tiga dimensi dengan [0,0,0] menjadi pelancar bunga api di atas tanah.
Bagaimana jika saya ingin tahu juga bunga api yang meletup pada jarak yang paling dekat dan paling dekat dengan bunga api tertentu yang lain? Untuk mengetahuinya, kami perlu menyemak semula rakaman video kami tentang pertunjukan bunga api dan merekodkan masa setiap letupan juga. Sekarang kita mempunyai vektor 4 dimensi dengan 4 nombor: kedudukan tiga dimensi letupan bunga api dan masa letupan. Kini kami mempunyai jenis pembenaman yang lebih deskriptif untuk paparan bunga api dengan menambahkan dimensi lain pada benam vektor kami.
Bagaimanakah ini diterjemahkan kepada pembelajaran mesin? Pendek kata, dengan memproses sejumlah besar data teks, saintis komputer berjaya mencipta model pembenaman yang boleh mengubah sekeping teks seperti frasa, ayat, perenggan atau halaman, dan mengubahnya menjadi siri yang sangat panjang nombor yang mewakili titik dalam ruang dimensi tinggi teori.
Daripada 4 nombor, terdapat 300, atau 700, malah 1500. Ini mewakili 1500 cara di mana satu bahagian teks boleh menjadi "dekat" atau "jauh" dari yang lain, atau 1500 dimensi makna. Konsep yang menarik bagi ramai bahawa kami mempunyai cara untuk mencipta nombor yang mewakili dalam beberapa cara makna semantik sekeping teks.
Menggunakan matematik, dua daripada benam vektor teks berdimensi tinggi ini boleh dibandingkan untuk mengetahui sejauh mana persamaan atau "dekat" mereka antara satu sama lain jika ia dicipta oleh model yang sama.
Itulah perkara pertama yang berlaku dalam apl ini. Pengguna mesti memasukkan dokumen dan menamakannya, dan kemudian memilih jenis pembenaman. Pelayan mengambil dokumen itu, memecahkannya kepada ketulan teks, dan kemudian menukar setiap ketulan tersebut menjadi pembenaman vektor, dan ketulan itu disimpan sebagai baris dalam jadual khusus untuk dokumen tersebut. Setiap dokumen disimpan dalam jadual khasnya sendiri untuk membenarkan panjang pembolehubah pembenaman vektor yang dibuat oleh model pembenaman teks yang berbeza.
Setelah dokumen disimpan dalam pangkalan data sebagai pembenaman vektor, pengguna boleh memasukkan pertanyaan untuk "meminta" dokumen. Pertanyaan digunakan dalam dua cara. Cara pertama ialah mencari dokumen. Kami tidak melakukan carian teks tradisional, sebaliknya kami melakukan "carian vektor". Apl mengambil pertanyaan, mengubahnya menjadi pembenaman vektor, dan kemudian mencari bahagian dokumen dengan pembenaman yang paling serupa dengan pembenaman vektor pertanyaan. Skor persamaan antara 0 dan 1 kemudian dijana untuk setiap bahagian dokumen, dan beberapa bahagian diambil daripada pangkalan data vektor berdasarkan top_k_similarity dan similarity_threshold. Pada asasnya, anda boleh menanyakannya berapa banyak bahagian dokumen yang perlu diambil dan sejauh mana kesamaannya dengan pertanyaan anda untuk melayakkan diri untuk mendapatkan semula.
Itulah Retrieval dalam Retrieval Augmented Generation. Langkah seterusnya ialah generasi.
Setelah saintis komputer mengetahui cara menukar teks kepada benam vektor angka yang signifikan secara semantik, langkah seterusnya ialah mencipta model yang boleh menghasilkan teks. Mereka melakukannya dengan kejayaan yang besar, dan kini kami mempunyai Model Bahasa Besar seperti GPT-4, LLama3 dan Claude 3.5. LLM ini boleh mengambil gesaan, atau pertanyaan, dan menyampaikan pelengkapan, atau jawapan, yang merupakan teks yang difikirkannya kemungkinan besar akan diteruskan daripada teks yang dibentangkan, gesaan.
LLM mesti dilatih mengenai jumlah data teks yang besar, dan respons atau pelengkapan mereka terhad kepada data latihan tersebut. Apabila kami mahu LLM menyediakan penyiapan yang mungkin termasuk data yang tidak dalam set latihan mereka, atau meletakkan penyiapan mereka dalam set pengetahuan tertentu, satu cara untuk melakukannya ialah dengan memasukkan data kontekstual tambahan dalam gesaan. Pada asasnya, jika kami mahukan jawapan daripada LLM tentang sesuatu yang tidak dilatih, kami perlu memberikannya maklumat dalam gesaan.
Ramai orang mendapati diri mereka berada dalam situasi di mana mereka ingin chatGPT atau pemasangan LLama tempatan mereka boleh memberikan jawapan berdasarkan dokumen peribadi mereka sendiri. Cukup mudah untuk mencari dokumen anda untuk maklumat itu, menampalnya ke dalam gesaan dan memasukkan soalan anda, dan orang mendapati diri mereka melakukannya secara manual. Itulah bentuk Retrieval Augmented Generation sendiri. RAG hanyalah automasi mencari maklumat yang berkaitan dengan pertanyaan pengguna dan menyediakannya dengan pertanyaan kepada LLM untuk respons yang lebih tepat atau berguna.
Dalam apl ini, bahagian dokumen yang kami dapatkan dengan carian vektor dihantar dengan pertanyaan kepada LLM yang dipilih, dilabelkan dalam antara muka sebagai Model, kepada berikan konteks kepada jawapan.
Dalam contoh video yang saya buat untuk projek ini, saya bertanyakan soalan "Siapakah penjahat dalam drama ini?" dengan dokumen "Hamlet" dan "King Lear", yang mengandungi keseluruhan teks dua drama Shakespeare. Pangkalan data IRIS sudah mempunyai dua jadual, satu untuk Hamlet, dan satu lagi untuk King Lear. Setiap jadual diisi dengan barisan benam vektor yang dibuat daripada membahagikan teks setiap mainan kepada bahagian. Pembenaman ini ialah siri nombor panjang yang mewakili banyak dimensi makna dalam setiap bahagian dokumen.
Pelayan menukar soalan "Siapa penjahat dalam drama ini" menjadi vektor berangka menggunakan model teks-ke-vektor yang sama yang menghasilkan pembenaman vektor untuk King Lear, dan mencari bahagian dalam jadual King Lear yang paling serupa dengannya. Ini mungkin bahagian yang menyebut perkataan penjahat, ya, tetapi mungkin perkara penjahat lain, seperti pengkhianatan, pengkhianatan, dan penipuan, walaupun penjahat tidak disebut secara eksplisit. Bahagian dokumen ini ditambahkan pada pertanyaan dan dihantar bersama sebagai gesaan kepada LLM yang kemudiannya menjawab soalan berdasarkan bahagian dokumen yang disediakan.
Ini dilakukan secara berasingan untuk setiap dokumen, dan inilah sebabnya jawapan kepada pertanyaan berbeza bergantung pada dokumen yang disoal. Ini melengkapkan akronim, kerana kami menambah Penjanaan jawapan kami daripada LLM dengan Mendapatkan semula maklumat konteks yang berkaitan menggunakan kuasa carian vektor.
Ribuan terima kasih kepada sesiapa yang meluangkan masa untuk membaca ini dan saya berbesar hati untuk mengembangkan mana-mana topik ini dalam artikel akan datang. Maklum balas sentiasa dialu-alukan.
Atas ialah kandungan terperinci Penjelasan Diperluaskan RAG, Carian Vektor dan cara ia dilaksanakan pada IRIS dalam Apl IRIS RAG. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!