Bagaimana Cara Menggunakan Pengambil Dokumen Induk di LangChain?

Bagaimana Cara Menggunakan Pengambil Dokumen Induk Di Langchain



Kerangka LangChain memungkinkan para pengembang untuk membangun Model Bahasa Besar yang dapat memahami dan menghasilkan teks dalam bahasa alami. Model LangChain dilatih pada data dalam jumlah besar sehingga model dapat memahami bahasa dengan menyimpan data di penyimpanan vektor. Hal ini juga memungkinkan pengguna untuk membangun retriever yang dapat mengekstrak data dari database atau penyimpanan vektor dengan semua data yang disimpan untuk model tersebut.

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 Anda
impor 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 file
diunggah = 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 ParentDocumentRetriever
dari 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.