Posting ini akan mendemonstrasikan proses penggunaan pengambilan dokumen induk di LangChain.
Bagaimana Cara Menggunakan Pengambil Dokumen Induk di LangChain?
Pengambil dokumen induk di LangChain dapat digunakan dengan membagi dokumen menjadi bagian-bagian yang lebih kecil sehingga tidak kehilangan maknanya pada saat penyematan. Dokumen induk dapat dikatakan sebagai keseluruhan dokumen atau bagian yang lebih besar dari mana bagian yang lebih kecil diekstraksi.
Untuk mempelajari proses penggunaan pengambilan dokumen induk di LangChain, cukup lihat panduan ini:
Langkah 1: Instal Modul
Pertama, mulai gunakan pengambilan dokumen induk dengan menginstal kerangka LangChain menggunakan perintah pip:
pip instal langchain
Instal modul database Chroma untuk menyimpan penyematan dokumen dan mengambil data darinya:
pip instal chromedb
Untuk menginstal tiktoken yang merupakan tokenizer yang mendapatkan token dokumen dengan membuat potongan kecil:
pip instal tiktoken
Dapatkan modul OpenAI dengan menjalankan perintah berikut pada notebook Python untuk mendapatkan dependensi dan pustakanya:
pip instal openai
Langkah 2: Atur Lingkungan & Unggah Data
Langkah selanjutnya adalah mengatur lingkungan menggunakan kunci API dari akun OpenAI:
impor Andaimpor dapatkan pass
Anda . sekitar [ 'OPENAI_API_KEY' ] = dapatkan pass . dapatkan pass ( 'Kunci API OpenAI:' )
Sekarang, unggah dokumen dari sistem lokal setelah mengimpor perpustakaan file dan kemudian panggil metode upload():
dari google. DAN AL impor filediunggah = file. mengunggah ( )
Langkah 3: Impor Perpustakaan
Langkah selanjutnya berisi kode untuk mengimpor perpustakaan yang diperlukan untuk menggunakan pengambilan dokumen induk menggunakan kerangka LangChain:
dari rantailang. retriever impor ParentDocumentRetrieverdari rantailang. toko vektor impor Kroma
dari rantailang. penyematan impor OpenAIEmbeddings
dari rantailang. pemisah_teks impor Pemisah TeksKarakter Rekursif
dari rantailang. penyimpanan impor DiMemoryStore
dari rantailang. document_loaders impor Pemuat Teks
Muat dokumen untuk membuat retriever menggunakan metode TextLoader() dengan jalur file:
loader = [Pemuat Teks ( 'Data.txt' ) ,
Pemuat Teks ( 'state_of_the_union.txt' ) ,
]
dokumen = [ ]
untuk aku di dalam loader:
Langkah 4: Mengambil Dokumen Lengkap
Setelah dokumen/file dimuat ke model, cukup buat penyematan dokumen, dan simpan di penyimpanan vektor:
pemisah_anak = Pemisah TeksKarakter Rekursif ( potongan_ukuran = 400 )toko vektor = Kroma (
nama_koleksi = 'dokumen_lengkap' ,
penyematan_fungsi = OpenAIEmbeddings ( )
)
toko = DiMemoryStore ( )
mengambil = ParentDocumentRetriever (
toko vektor = toko vektor ,
toko dokumen = toko ,
pemisah_anak = pemisah_anak ,
)
Sekarang, panggil metode add_documents() menggunakan retriever untuk membawa retriever ke dokumen:
mengambil. tambahkan_dokumen ( dokumen , id = Tidak ada )Kode berikut mengekstrak penyematan dokumen yang telah disimpan dalam database untuk file yang diunggah:
daftar ( toko. hasil_kunci ( ) )
Setelah mendapatkan penyematan dokumen, panggil metode kesamaan_pencarian() dengan kueri untuk mendapatkan potongan kecil dari dokumen:
sub_dokumen = toko vektor. kesamaan_pencarian ( 'keadilan breyer' )Panggil metode print() untuk menampilkan potongan yang dipanggil dalam kode sebelumnya berdasarkan kueri:
mencetak ( sub_dokumen [ 0 ] . halaman_konten )
Panggil fungsi lengkap retriever() untuk menyimpan semua token di database menggunakan kode berikut:
diambil_docs = mengambil. dapatkan_dokumen_relevan ( 'keadilan breyer' )Mencetak semua dokumen akan memakan banyak waktu dan tenaga pemrosesan, jadi cukup dapatkan panjang dokumen yang diambil sebelumnya:
hanya ( diambil_docs [ 0 ] . halaman_konten )
Langkah 5: Mengambil Potongan yang Lebih Besar
Langkah ini tidak akan mencakup keseluruhan dokumen; namun, dibutuhkan chipmunk yang lebih besar dari dokumen tersebut dan mengambil bagian yang lebih kecil darinya:
induk_splitter = Pemisah TeksKarakter Rekursif ( potongan_ukuran = 2000 )pemisah_anak = Pemisah TeksKarakter Rekursif ( potongan_ukuran = 400 )
toko vektor = Kroma ( nama_koleksi = 'berpisah_orang tua' , penyematan_fungsi = OpenAIEmbeddings ( ) )
toko = DiMemoryStore ( )
Konfigurasikan retriever untuk mendapatkan token yang lebih kecil dari kumpulan besar data yang disimpan di “ toko vektor ' variabel:
mengambil = ParentDocumentRetriever (toko vektor = toko vektor ,
toko dokumen = toko ,
pemisah_anak = pemisah_anak ,
induk_splitter = induk_splitter ,
)
Panggil retriever untuk mendapatkan potongan yang lebih besar dari penyimpanan vektor menggunakan dokumen variabel dalam argumen fungsi:
mengambil. tambahkan_dokumen ( dokumen )Dapatkan panjang dokumen-dokumen ini dari dokumen variabel melalui perintah di bawah ini:
hanya ( daftar ( toko. hasil_kunci ( ) ) )
Cukup ambil potongan yang lebih kecil dari yang lebih besar seperti pada tangkapan layar sebelumnya yang menunjukkan bahwa ada 23 dokumen yang disimpan di penyimpanan vektor. Kueri digunakan untuk mendapatkan data yang relevan menggunakan kesamaan_penelusuran() metode untuk mengambil data dari penyimpanan vektor:
sub_dokumen = toko vektor. kesamaan_pencarian ( 'keadilan breyer' )Cetak potongan yang lebih kecil menggunakan kueri yang disebutkan dalam kode sebelumnya untuk menampilkannya di layar:
mencetak ( sub_dokumen [ 0 ] . halaman_konten )
Sekarang, gunakan retriever pada kumpulan data lengkap yang disimpan dalam database menggunakan kueri sebagai argumen fungsi:
diambil_docs = mengambil. dapatkan_dokumen_relevan ( 'keadilan breyer' )Dapatkan panjang potongan lengkap yang dibuat dan disimpan dalam database:
hanya ( diambil_docs [ 0 ] . halaman_konten )
Kita tidak bisa menampilkan semua potongannya, tetapi potongan pertama dengan nomor indeks 0 ditampilkan dengan menggunakan kode berikut:
mencetak ( diambil_docs [ 0 ] . halaman_konten
Sekian tentang proses penggunaan pengambilan dokumen induk di LangChain.
Kesimpulan
Untuk menggunakan pengambilan dokumen induk di LangChain, cukup instal modul dan atur lingkungan OpenAI menggunakan kunci API-nya. Setelah itu, impor pustaka yang diperlukan dari LangChain untuk menggunakan pengambilan dokumen induk, lalu muat dokumen untuk model tersebut. Pengguna dapat menggunakan dokumen induk sebagai keseluruhan dokumen atau bagian besar dan mendapatkan bagian yang lebih kecil menggunakan kueri. Posting ini telah menguraikan proses penggunaan pengambilan dokumen induk di LangChain.