Bagaimana Cara Menambahkan Memori ke Agen dan Alatnya di LangChain?

Bagaimana Cara Menambahkan Memori Ke Agen Dan Alatnya Di Langchain



LangChain menyediakan semua alat yang diperlukan untuk membangun agen guna mengontrol proses penggalian informasi bagi pengguna. Alat-alat ini diperlukan untuk membangun agen saat mereka mengelola tugas menggunakan alat yang berbeda. Agen juga memanipulasi alat ini untuk menjalankan langkah-langkah dan menerapkan semua aktivitas. Ia mengetahui alat mana yang diperlukan untuk pekerjaan itu dan kapan menugaskannya untuk tugas spesifik tersebut.

Garis Besar Singkat

Posting ini akan menunjukkan hal berikut:

Bagaimana Cara Menambahkan Memori ke Agen dan Alatnya di LangChain?

Menambahkan memori ke agen dan alat memungkinkan mereka bekerja lebih baik dengan kemampuan menggunakan riwayat obrolan model. Dengan memori, agen dapat secara efisien memutuskan alat mana yang akan diterapkan dan kapan. Lebih disukai menggunakan “ BacaHanyaMemori ” baik untuk agen maupun alat sehingga mereka tidak akan dapat memodifikasinya. Untuk mempelajari proses penambahan memori ke agen dan alat di LangChain, lakukan langkah-langkah berikut:







Langkah 1: Menginstal Kerangka

Pertama-tama, instal langchain-eksperimental modul untuk mendapatkan dependensinya untuk membangun model bahasa dan alat untuk agen. Eksperimental LangChain adalah modul yang mendapatkan dependensi untuk membangun model yang sebagian besar digunakan untuk eksperimen dan pengujian:



pip instal langchain - eksperimental



Ambil hasil-pencarian-google modul dengan dependensi OpenAI untuk mendapatkan jawaban paling relevan dari internet:





pip instal buka google - mencari - hasil

Langkah 2: Menyiapkan Lingkungan

Untuk membangun model yang mendapat jawaban dari internet, diperlukan pengaturan lingkungan menggunakan OpenAI Dan SerpAPI kunci:



impor Anda
impor dapatkan pass

Anda. sekitar [ 'OPENAI_API_KEY' ] = dapatkan pass. dapatkan pass ( 'Kunci API OpenAI:' )
Anda. sekitar [ 'SERPAPI_API_KEY' ] = dapatkan pass. dapatkan pass ( 'Kunci API Serpapi:' )

Langkah 3: Mengimpor Perpustakaan

Setelah menyiapkan lingkungan, impor perpustakaan untuk membangun alat bagi agen dan memori tambahan untuk diintegrasikan dengannya. Kode berikut menggunakan agen, memori, llms, rantai, prompt, dan utilitas untuk mendapatkan perpustakaan yang diperlukan:

dari langchain. agen impor Agen ZeroShot , Alat , Agen Pelaksana
dari langchain. Penyimpanan impor PercakapanBufferMemory , ReadOnlySharedMemory
dari langchain. llms impor OpenAI
#dapatkan perpustakaan untuk membangun rantai menggunakan LangChain
dari langchain. rantai impor rantai LLM
dari langchain. petunjuknya impor Templat Prompt
#dapatkan perpustakaan untuk mendapatkan informasi dari internet
dari langchain. keperluan impor SerpAPIWrapper

Langkah 4: Menambahkan ReadOnlyMemory

Konfigurasikan templat bagi agen untuk mulai melakukan tugas segera setelah pengguna memberikan masukan. Setelah itu, tambahkan “PercakapanBufferMemory()” untuk menyimpan riwayat obrolan model dan menginisialisasi “Memori Hanya Baca” untuk agen dan alatnya:

templat = '' 'Ini adalah percakapan antara manusia dan bot:

{obrolan_history}
#atur struktur untuk mengekstrak ringkasan yang tepat dan mudah
Ringkaslah obrolan untuk {input}:
'
''

mengingatkan = Templat Prompt ( masukan_variabel = [ 'memasukkan' , 'sejarah_obrolan' ] , templat = templat )
Penyimpanan = PercakapanBufferMemory ( kunci_memori = 'sejarah_obrolan' )
memori hanya baca = ReadOnlySharedMemory ( Penyimpanan = Penyimpanan )
#ringkasan rantai untuk mengintegrasikan semua komponen untuk mendapatkan ringkasan percakapan
ringkasan_rantai = rantai LLM (
llm = OpenAI ( ) ,
mengingatkan = mengingatkan ,
bertele-tele = BENAR ,
Penyimpanan = memori hanya baca ,
)

Langkah 5: Menyiapkan Alat

Sekarang, siapkan alat seperti pencarian dan ringkasan untuk mendapatkan jawaban dari internet beserta ringkasan obrolan:

mencari = SerpAPIWrapper ( )
peralatan = [
Alat (
nama = 'Mencari' ,
fungsi = mencari. berlari ,
keterangan = 'tanggapan yang tepat terhadap pertanyaan yang ditargetkan tentang kejadian terkini' ,
) ,
Alat (
nama = 'Ringkasan' ,
fungsi = ringkasan_rantai. berlari ,
keterangan = 'membantu untuk meringkas obrolan dan masukan ke alat ini harus berupa string, yang mewakili siapa yang akan membaca ringkasan ini' ,
) ,
]

Langkah 6: Membangun Agen

Konfigurasikan agen segera setelah alat siap untuk melakukan tugas yang diperlukan dan mengekstrak jawabannya dari internet. “ awalan Variabel ” dijalankan sebelum agen menetapkan tugas apa pun ke alat dan “ akhiran ” dijalankan setelah alat mengekstrak jawabannya:

awalan = '' 'Lakukan percakapan dengan manusia, jawablah pertanyaan-pertanyaan berikut sebaik mungkin dengan mengakses alat-alat berikut:' ''
akhiran = '' 'Mulai!'
#struktur untuk agen untuk mulai menggunakan alat saat menggunakan memori
{ obrolan_sejarah }
Pertanyaan : { memasukkan }
{ agen_scratchpad } '' '

cepat = ZeroShotAgent.create_prompt(
#configure templat cepat untuk memahami konteks pertanyaan
peralatan,
awalan=awalan,
akhiran=akhiran,
masukan_variabel=['
memasukkan ', ' obrolan_sejarah ', ' agen_scratchpad '],
)

Metode 1: Menggunakan ReadOnlyMemory

Setelah agen diatur untuk menjalankan alat, model dengan ReadOnlyMemory adalah modelnya disukai cara membangun dan menjalankan rantai untuk mengambil jawaban dan prosesnya adalah sebagai berikut:

Langkah 1: Membangun Rantai

Langkah pertama dalam metode ini adalah membangun rantai dan pelaksananya “Agen ZeroShot()” dengan argumentasinya. Itu “Rantai LLM()” digunakan untuk membangun koneksi di antara semua obrolan dalam model bahasa menggunakan argumen llm dan prompt. Agen menggunakan llm_chain, tools, dan verbose sebagai argumennya dan membangun agent_chain untuk mengeksekusi agen dan alat-alatnya dengan memori:

llm_chain = rantai LLM ( llm = OpenAI ( suhu = 0 ) , mengingatkan = mengingatkan )
agen = Agen ZeroShot ( llm_chain = llm_chain , peralatan = peralatan , bertele-tele = BENAR )
agen_rantai = Agen Pelaksana. dari_agen_dan_alat (
agen = agen , peralatan = peralatan , bertele-tele = BENAR , Penyimpanan = Penyimpanan
)

Langkah 2: Menguji Rantai

Hubungi agen_rantai menggunakan metode run() untuk mengajukan pertanyaan dari internet:

agen_rantai. berlari ( memasukkan = 'Apa itu LangChain' )

Agen telah mengekstrak jawabannya dari internet menggunakan alat pencarian:

Pengguna dapat mengajukan pertanyaan lanjutan yang tidak jelas untuk menguji memori yang melekat pada agen:

agen_rantai. berlari ( memasukkan = Siapa yang mengembangkannya? )

Agen telah menggunakan obrolan sebelumnya untuk memahami konteks pertanyaan dan mengambil jawaban seperti yang ditampilkan pada tangkapan layar berikut:

Agen menggunakan alat (summary_chain) untuk mengekstrak ringkasan semua jawaban yang diekstraksi sebelumnya menggunakan memori agen:

agen_rantai. berlari (
memasukkan = 'Terima kasih! Ringkas percakapannya, untuk anakku yang berumur 5 tahun'
)

Keluaran
Ringkasan pertanyaan yang diajukan sebelumnya telah ditampilkan untuk anak berusia 5 tahun pada tangkapan layar berikut:

Langkah 3: Menguji Memori

Cetak memori buffer untuk mengekstrak chat yang tersimpan di dalamnya dengan menggunakan kode berikut:

mencetak ( agen_rantai. Penyimpanan . penyangga )

Obrolan dalam urutan yang benar tanpa modifikasi apa pun telah ditampilkan dalam cuplikan berikut:

Metode 2: Menggunakan Memori yang Sama untuk Agen dan Alat

Metode kedua yang tidak direkomendasikan oleh platform adalah menggunakan memori buffer untuk agen dan alat. Alat tersebut dapat mengubah obrolan yang tersimpan di memori yang mungkin menghasilkan keluaran palsu dalam percakapan besar:

Langkah 1: Membangun Rantai

Menggunakan kode lengkap dari templat untuk membangun alat dan rantai bagi agen dengan sedikit perubahan karena ReadOnlyMemory tidak ditambahkan kali ini:

templat = '' 'Ini adalah percakapan antara manusia dan bot:

{obrolan_history}

Tulis ringkasan percakapan untuk {input}:
'
''
#bangun struktur obrolan antarmuka menggunakan templat prompt dengan menambahkan memori dengan rantai
mengingatkan = Templat Prompt ( masukan_variabel = [ 'memasukkan' , 'sejarah_obrolan' ] , templat = templat )
Penyimpanan = PercakapanBufferMemory ( kunci_memori = 'sejarah_obrolan' )
ringkasan_rantai = rantai LLM (
llm = OpenAI ( ) ,
mengingatkan = mengingatkan ,
bertele-tele = BENAR ,
Penyimpanan = Penyimpanan ,
)
#buat alatnya ( pencarian dan ringkasan ) untuk mengkonfigurasi agen
mencari = SerpAPIWrapper ( )
peralatan = [
Alat (
nama = 'Mencari' ,
fungsi = mencari. berlari ,
keterangan = 'tanggapan yang tepat terhadap pertanyaan yang ditargetkan tentang kejadian terkini' ,
) ,
Alat (
nama = 'Ringkasan' ,
fungsi = ringkasan_rantai. berlari ,
keterangan = 'bermanfaat untuk mendapatkan ringkasan obrolan dan memerlukan masukan string ke alat ini yang mewakili siapa yang akan membaca ringkasan ini' ,
) ,
]
#jelaskan langkah-langkahnya untuk agen untuk menggunakan alat untuk mengekstrak informasi untuk obrolan
awalan = '' 'Lakukan percakapan dengan manusia, jawab pertanyaan dengan cara terbaik dengan mengakses alat berikut:' ''
akhiran = '' 'Mulai!'
#struktur untuk agen untuk mulai menggunakan alat saat menggunakan memori
{ obrolan_sejarah }
Pertanyaan : { memasukkan }
{ agen_scratchpad } '' '

cepat = ZeroShotAgent.create_prompt(
#configure templat cepat untuk memahami konteks pertanyaan
peralatan,
awalan=awalan,
akhiran=akhiran,
masukan_variabel=['
memasukkan ', ' obrolan_sejarah ', ' agen_scratchpad '],
)
#mengintegrasikan semua komponen sambil membangun pelaksana agen
llm_chain = LLMChain(llm=OpenAI(suhu=0), prompt=prompt)
agen = ZeroShotAgent(llm_chain=llm_chain, alat=alat, verbose=Benar)
agent_chain = AgentExecutor.from_agent_and_tools(
agen=agen, alat=alat, verbose=Benar, memori=memori
)

Langkah 2: Menguji Rantai

Jalankan kode berikut:

agen_rantai. berlari ( memasukkan = 'Apa itu LangChain' )

Jawabannya berhasil ditampilkan dan disimpan di memori:

Ajukan pertanyaan lanjutan tanpa memberikan banyak konteks:

agen_rantai. berlari ( memasukkan = Siapa yang mengembangkannya? )

Agen menggunakan memori untuk memahami pertanyaan dengan mengubahnya dan kemudian mencetak jawabannya:

Dapatkan ringkasan obrolan menggunakan memori yang terpasang pada agen:

agen_rantai. berlari (
memasukkan = 'Terima kasih! Ringkas percakapannya, untuk anakku yang berumur 5 tahun'
)

Keluaran
Ringkasan telah berhasil diekstraksi, dan sampai sekarang semuanya tampak sama tetapi perubahan terjadi pada langkah berikutnya:

Langkah 3: Menguji Memori

Mengekstrak pesan obrolan dari memori menggunakan kode berikut:

mencetak ( agen_rantai. Penyimpanan . penyangga )

Alat ini telah mengubah riwayat dengan menambahkan pertanyaan lain yang awalnya tidak ditanyakan. Hal ini terjadi ketika model memahami pertanyaan menggunakan a bertanya pada diri sendiri pertanyaan. Alat tersebut secara keliru mengira bahwa itu ditanyakan oleh pengguna dan memperlakukannya sebagai kueri terpisah. Jadi ini juga menambahkan pertanyaan tambahan ke dalam ingatan yang kemudian digunakan untuk mengetahui konteks percakapan:

Itu saja untuk saat ini.

Kesimpulan

Untuk menambahkan memori ke agen dan alatnya di LangChain, instal modul untuk mendapatkan dependensinya dan impor pustaka dari modul tersebut. Setelah itu, bangun memori percakapan, model bahasa, alat, dan agen untuk menambah memori. Itu metode yang direkomendasikan untuk menambah memori menggunakan ReadOnlyMemory ke agen dan alatnya untuk menyimpan riwayat obrolan. Pengguna juga dapat menggunakan memori percakapan untuk agen dan alat. Tapi, mereka mengerti bingung terkadang dan mengubah obrolan di memori.