Bagaimana untuk Menggabungkan Ejen dan Kedai Vektor dalam LangChain?

Bagaimana Untuk Menggabungkan Ejen Dan Kedai Vektor Dalam Langchain



LangChain ialah rangka kerja yang mereka bentuk model bahasa. Sejumlah besar data melatih model ini dalam bahasa semula jadi. Terdapat banyak pangkalan data atau kedai vektor seperti Chroma, dsb. untuk mengurus set data ini. Dengan menggabungkan stor ejen dan vektor, model menunjukkan prestasi yang lebih baik dengan data daripada domain yang berbeza. LangChain membenarkan penggunaan banyak kedai vektor untuk melatih model bahasa atau chatbot.

Rangka Pantas

Catatan ini akan menunjukkan:







Cara Menggunakan Ejen untuk Mengembalikan Output Berstruktur dalam LangChain



Kaedah 1: Menggabungkan Ejen dengan Kedai Vektor



Kaedah 2: Menggunakan Ejen sebagai Penghala





Kaedah 3: Menggunakan Ejen Dengan Kedai Vektor Berbilang Hop

Kesimpulan



Bagaimana Menggunakan Ejen untuk Mengembalikan Output Berstruktur dalam LangChain?

Pembangun menggunakan ejen untuk membuat laluan antara pangkalan data yang mengandungi data latihan untuk model. Ejen mempunyai cetak biru proses lengkap dengan menyimpan semua langkah. Ejen mempunyai alat untuk melaksanakan semua aktiviti ini untuk melengkapkan proses. Pengguna juga boleh menggunakan ejen untuk mendapatkan data daripada stor data yang berbeza untuk menjadikan model itu pelbagai.

Untuk mempelajari proses menggabungkan ejen dan kedai vektor dalam LangChain, cuma ikut langkah yang disenaraikan:

Langkah 1: Memasang Rangka Kerja

Mula-mula, pasang modul LangChain dan kebergantungannya untuk menggabungkan ejen dan kedai vektor:

pip pasang langchain

Dalam panduan ini, kami menggunakan pangkalan data Chroma yang boleh menyimpan data di lokasi atau jadual yang berbeza:

pip pasang chromadb

Untuk mendapatkan pemahaman yang lebih baik tentang data, bahagikan fail besar kepada bahagian yang lebih kecil menggunakan tokenizer tiktoken:

pip pasang tiktoken

OpenAI ialah modul yang boleh digunakan untuk membina model bahasa besar dalam rangka kerja LangChain:

pip pasang openai

Langkah 2: Persekitaran OpenAI

Langkah seterusnya di sini ialah menetapkan persekitaran menggunakan kunci API OpenAI yang boleh diekstrak daripada akaun rasmi OpenAI:

import awak
import getpass

awak . lebih kurang [ 'OPENAI_API_KEY' ] = getpass . getpass ( 'OpenAI API Key:' )

Sekarang, muat naik data daripada sistem setempat ke kerjasama Google untuk menggunakannya pada masa hadapan:

daripada google. ET AL import fail

dimuat naik = fail. muat naik ( )

Langkah 3: Mencipta Kedai Vektor

Langkah ini mengkonfigurasi komponen pertama tugas kami yang merupakan stor vektor untuk menyimpan data yang dimuat naik. Mengkonfigurasi stor vektor memerlukan perpustakaan yang boleh diimport daripada kebergantungan berbeza LangChain:

daripada langchain. benam . openai import OpenAIEmbeddings

#Vector menyimpan pergantungan untuk mendapatkan pangkalan data atau vektor yang diperlukan

daripada langchain. kedai vektor import Chroma

#Pemecah teks digunakan untuk menukar teks besar kepada ketulan yang lebih kecil

daripada langchain. text_splitter import CharacterTextSplitter

daripada langchain. llms import OpenAI

daripada langchain. pemuat_dokumen import WebBaseLoader

daripada langchain. rantai import RetrievalQA


llm = OpenAI ( suhu = 0 )

Langkah 4: Menetapkan Laluan

Selepas mengimport perpustakaan, hanya tetapkan laluan untuk mengakses stor vektor sebelum menyimpan data di dalamnya:

daripada pathlib import Laluan

bahagian_berkaitan = [ ]
untuk hlm dalam Laluan ( '.' ) . mutlak ( ) . bahagian :
bahagian_berkaitan. tambahkan ( hlm )
jika bahagian_berkaitan [ - 3 : ] == [ 'langchain' , 'dokumen' , 'modul' ] :
rehat
#Pernyataan Bersyarat di dalam gelung untuk menetapkan laluan bagi setiap pangkalan data
doc_path = str ( Laluan ( *bahagian_berkaitan ) / 'state_of_the_union.txt' )

Langkah 5: Memuatkan & Membahagikan Data

Sekarang, cuma muatkan data dan bahagikannya kepada bahagian yang lebih kecil untuk menjadikan kebolehbacaan dan kebolehfahamannya lebih baik. Cipta pembenaman data dengan menukar teks kepada nombor menjadikan ruang vektornya dan menyimpannya dalam pangkalan data Chorma:

daripada langchain. pemuat_dokumen import TextLoader

#Memuatkan set data daripada laluannya dan simpan bahagian yang lebih kecil dalam pangkalan data

pemuat = TextLoader ( doc_path )

dokumen = pemuat. memuatkan ( )

text_splitter = CharacterTextSplitter ( saiz_ketulan = 2000 , chunk_overlap = 0 )

teks = text_splitter. split_documents ( dokumen )

#Tukar teks kepada nombor dan simpan benam dalam pangkalan data

benam = OpenAIEmbeddings ( )

docsearch = Chroma. from_documents ( teks , benam , nama_koleksi = 'negara kesatuan' )

Langkah 6: Mencipta Retriever

Untuk menggabungkan stor ejen dan vektor, perlu mencipta retriever menggunakan kaedah RetrievalQA() daripada rangka kerja LangChain. Kaedah mendapatkan semula ini disyorkan untuk mendapatkan data daripada kedai vektor menggunakan ejen sebagai alat untuk bekerja dengan pangkalan data:

negeri_kesatuan = RetrievalQA. from_chain_type (

llm = llm , rantai_jenis = 'barang' , retriever = docsearch. as_retriever ( )

)

Muatkan set data lain untuk menyepadukan ejen dengan berbilang set data atau stor vektor:

pemuat = WebBaseLoader ( 'https://beta.ruff.rs/docs/faq/' )

Simpan set data ruff dalam chromadb selepas membuat potongan data yang lebih kecil dengan vektor pembenaman juga:

dokumen = pemuat. memuatkan ( )
ruff_texts = text_splitter. split_documents ( dokumen )
ruff_db = Chroma. from_documents ( ruff_texts , benam , nama_koleksi = 'ruff' )
ruff = RetrievalQA. from_chain_type (
llm = llm , rantai_jenis = 'barang' , retriever = ruff_db. as_retriever ( )
)

Kaedah 1: Menggabungkan Ejen dengan Kedai Vektor

Kaedah pertama menggabungkan kedua-dua ejen dan kedai vektor untuk mengekstrak maklumat disebut di bawah:

Langkah 1: Konfigurasi Alat

Sekarang bahawa kedai vektor dikonfigurasikan, bergerak ke arah membina komponen kedua proses kami iaitu ejen. Untuk mencipta ejen untuk proses tersebut, import perpustakaan menggunakan kebergantungan seperti ejen, alat, dsb.

daripada langchain. ejen import initialize_agent
daripada langchain. ejen import Jenis Agen
#Mendapatkan Alat daripada LangChain untuk membina ejen
daripada langchain. alatan import BaseTool
daripada langchain. llms import OpenAI
#Mendapatkan LLMMathChain daripada rantaian untuk membina model bahasa
daripada langchain. rantai import LLMMathChain
daripada langchain. utiliti import SerpAPIWrapper
daripada langchain. ejen import alat

Konfigurasikan alat yang akan digunakan dengan ejen menggunakan sistem QA atau pengambilan semula yang dikonfigurasikan lebih awal dengan nama dan perihalan alat:

alatan = [
alat (
nama = 'Sistem QA Negeri Kesatuan' ,
fungsi = negeri_kesatuan. lari ,
penerangan = 'Menyediakan jawapan kepada soalan yang berkaitan dengan set data yang dimuatkan dengan input sebagai soalan yang telah dibentuk sepenuhnya' ,
) ,
alat (
nama = 'Sistem QA Ruff' ,
fungsi = ruff. lari ,
penerangan = 'Menyediakan jawapan kepada soalan tentang ruff (sejenis ular sawa) dengan input sebagai soalan yang dibentuk sepenuhnya' ,
) ,
]

Langkah 2: Mulakan Ejen

Setelah alat dikonfigurasikan, hanya tetapkan ejen dalam hujah kaedah initializa_agent(). Agen yang kami gunakan di sini ialah ZERO_SHOT_REACT_DESCRIPTION bersama-sama dengan alatan, llm (model bahasa), dan verbose:

ejen = initialize_agent (

alatan , llm , ejen = Jenis Agen. ZERO_SHOT_REACT_DESCRIPTION , bertele-tele = betul

)

Langkah 3: Uji Ejen

Hanya laksanakan ejen menggunakan kaedah run() yang mengandungi soalan dalam hujahnya:

ejen. lari (

'Apa yang Presiden Joe Biden katakan tentang kanji coklat dalam alamat itu'

)

Tangkapan skrin berikut memaparkan jawapan yang diekstrak daripada kedua-dua stor data menggunakan pemerhatian yang disimpan dalam ingatan ejen:

Kaedah 2: Menggunakan Ejen sebagai Penghala

Satu lagi cara untuk menggabungkan kedua-dua komponen adalah dengan menggunakan ejen sebagai penghala dan yang berikut menerangkan prosesnya:

Langkah 1: Konfigurasi Alat

Menggunakan ejen sebagai penghala bermakna sistem RetrievalQA akan mengembalikan output secara langsung kerana alat dikonfigurasikan untuk mengembalikan output secara langsung:

alatan = [
#mengkonfigurasi alatan yang diperlukan untuk membina ejen untuk mendapatkan data daripada data
alat (
nama = 'Sistem QA Negeri Kesatuan' ,
fungsi = negeri_kesatuan. lari ,
penerangan = 'Menyediakan jawapan kepada soalan yang berkaitan dengan set data yang dimuatkan dengan input sebagai soalan yang lengkap' ,
return_direct = betul ,
) ,
alat (
nama = 'Sistem QA Ruff' ,
fungsi = ruff. lari ,
penerangan = 'Menyediakan jawapan kepada soalan tentang ruff (ular sawa linter) dengan input sebagai soalan lengkap' ,
return_direct = betul ,
) ,
]

Langkah 2: Mulakan dan Uji Ejen

Selepas menetapkan alat hanya tetapkan ejen yang boleh digunakan semata-mata sebagai penghala menggunakan kaedah initialize_agent():

ejen = initialize_agent (

alatan , llm , ejen = Jenis Agen. ZERO_SHOT_REACT_DESCRIPTION , bertele-tele = betul

)

Uji ejen dengan memberikan soalan input dalam kaedah agent.run() dengan melaksanakan arahan berikut:

ejen. lari (

'Apa yang Presiden Joe Biden katakan tentang kanji coklat dalam alamat itu'

)

Pengeluaran

Tangkapan skrin output memaparkan bahawa ejen telah memulangkan jawapan kepada soalan daripada set data yang diekstrak oleh sistem RetrievalQA:

Kaedah 3: Menggunakan Ejen Dengan Kedai Vektor Berbilang Hop

Kaedah ketiga di mana pembangun boleh menggabungkan kedua-dua kedai ejen dan vektor adalah untuk pertanyaan kedai vektor berbilang hop. Bahagian berikut menerangkan proses lengkap:

Langkah 1: Konfigurasi Alat

Langkah pertama ialah, seperti biasa, konfigurasi alat yang digunakan untuk membina ejen untuk mengekstrak data daripada stor data:

alatan = [
alat (
nama = 'Sistem QA Negeri Kesatuan' ,
fungsi = negeri_kesatuan. lari ,
penerangan = 'Menyediakan jawapan kepada soalan yang berkaitan dengan set data yang dimuatkan dengan input sebagai soalan yang dibentuk sepenuhnya, tidak merujuk sebarang kata ganti nama daripada perbualan sebelumnya' ,
) ,
alat (
nama = 'Sistem QA Ruff' ,
fungsi = ruff. lari ,
penerangan = 'Menyediakan jawapan kepada soalan yang berkaitan dengan set data yang dimuatkan dengan input sebagai soalan yang dibentuk sepenuhnya, tidak merujuk sebarang kata ganti nama daripada perbualan sebelumnya' ,
) ,
]

Langkah 2: Mulakan dan Uji Ejen

Selepas itu, bina pembolehubah ejen menggunakan kaedah initialize_agent() dengan nama ejen:

ejen = initialize_agent (

alatan , llm , ejen = Jenis Agen. ZERO_SHOT_REACT_DESCRIPTION , bertele-tele = betul

)

Jalankan ejen menggunakan soalan multi-hop yang mengandungi lebih daripada satu aspek atau ciri kerana blok kod berikut mengandungi soalan sedemikian:

ejen. lari (

'Apakah alat yang digunakan oleh ruff untuk menjalankan komputer riba Python dan Adakah mana-mana pembesar suara menyebut alat itu dalam alamat mereka'

)

Pengeluaran

Tangkapan skrin berikut menunjukkan bahawa ejen perlu menyelesaikan soalan untuk memahami kerumitannya. Ia telah mengembalikan jawapan yang diekstrak oleh sistem QA daripada pelbagai stor data yang kami muat naik sebelum ini dalam proses:

Itu sahaja tentang cara menggabungkan ejen dan kedai vektor dalam LangChain.

Kesimpulan

Untuk menggabungkan ejen dengan kedai vektor di LangChain, mulakan dengan pemasangan modul untuk menyediakan persekitaran dan memuatkan set data. Konfigurasikan stor vektor untuk memuatkan data dengan membahagikannya kepada bahagian yang lebih kecil dahulu dan kemudian membina model bahasa menggunakan kaedah OpenAI(). Konfigurasikan ejen untuk mengintegrasikannya dengan kedai vektor untuk mengekstrak data untuk pelbagai jenis pertanyaan. Artikel ini telah menghuraikan proses penggabungan ejen dan kedai vektor di LangChain.