Rangka Pantas
Catatan ini akan menunjukkan:
Cara Menggunakan Ejen untuk Mengembalikan Output Berstruktur dalam LangChain
- Memasang Rangka Kerja
- Persekitaran OpenAI
- Mencipta Kedai Vektor
- Menetapkan Laluan
- Memuatkan & Membahagikan Data
- Mencipta Retriever
Kaedah 1: Menggabungkan Ejen dengan Kedai Vektor
Kaedah 2: Menggunakan Ejen sebagai Penghala
Kaedah 3: Menggunakan Ejen Dengan Kedai Vektor Berbilang Hop
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 awakimport 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 faildimuat 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 Laluanbahagian_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_agentdaripada 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.