Bagaimana untuk Menambah Memori kepada Ejen dan Alatnya dalam LangChain?

Bagaimana Untuk Menambah Memori Kepada Ejen Dan Alatnya Dalam Langchain



LangChain menyediakan semua alat yang diperlukan untuk membina ejen untuk mengawal proses mengekstrak maklumat untuk pengguna. Alat ini diperlukan untuk membina ejen kerana mereka menguruskan tugas menggunakan alat yang berbeza. Ejen juga memanipulasi alat ini untuk menjalankan langkah-langkah dan melaksanakan semua aktiviti. Ia mengetahui alat mana yang diperlukan untuk kerja itu dan masa untuk menyerahkannya kepada tugas khusus itu.

Rangka Pantas

Siaran ini akan menunjukkan perkara berikut:

Bagaimana untuk Menambah Memori kepada Ejen dan Alatnya dalam LangChain?

Menambah memori pada ejen dan alatan membolehkan mereka berfungsi dengan lebih baik dengan keupayaan untuk menggunakan sejarah sembang model. Dengan ingatan, ejen boleh membuat keputusan dengan cekap alat mana yang hendak digunakan dan bila. Adalah lebih baik untuk menggunakan ' ReadOnlyMemory ” untuk kedua-dua ejen dan alatan supaya mereka tidak akan dapat mengubah suainya. Untuk mengetahui proses menambah memori kepada ejen dan alatan dalam LangChain, ikuti langkah yang disenaraikan:







Langkah 1: Memasang Rangka Kerja

Pertama sekali, pasangkan langchain-eksperimen modul untuk mendapatkan kebergantungannya untuk membina model bahasa dan alatan untuk ejen. Eksperimen LangChain ialah modul yang mendapat kebergantungan untuk membina model yang kebanyakannya digunakan untuk eksperimen dan ujian:



pip pasang langchain - percubaan



Dapatkan google-search-results modul dengan kebergantungan OpenAI untuk mendapatkan jawapan yang paling relevan daripada internet:





pip pasang openai google - cari - keputusan

Langkah 2: Menyediakan Persekitaran

Untuk membina model yang mendapat jawapan daripada internet, ia diperlukan untuk menyediakan persekitaran menggunakan OpenAI dan SerpAPi kunci:



import awak
import getpass

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

Langkah 3: Mengimport Perpustakaan

Selepas menyediakan persekitaran, import perpustakaan untuk membina alat untuk ejen dan memori tambahan untuk disepadukan dengannya. Kod berikut menggunakan ejen, memori, llms, rantai, gesaan dan utiliti untuk mendapatkan perpustakaan yang diperlukan:

daripada langchain. ejen import ZeroShotAgent , alat , AgenPelaksana
daripada langchain. ingatan import ConversationBufferMemory , ReadOnlySharedMemory
daripada langchain. llms import OpenAI
#dapatkan perpustakaan untuk membina rantai menggunakan LangChain
daripada langchain. rantai import LLMChain
daripada langchain. gesaan import PromptTemplate
#dapatkan perpustakaan untuk mendapatkan maklumat daripada internet
daripada langchain. utiliti import SerpAPIWrapper

Langkah 4: Menambah ReadOnlyMemory

Konfigurasikan templat untuk ejen mula melaksanakan tugas sebaik sahaja pengguna memberikan input. Selepas itu, tambahkan “ConversationBufferMemory()” untuk menyimpan sejarah sembang model dan memulakan “ReadOnlyMemory” untuk ejen dan alatnya:

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

{chat_history}
#tetapkan struktur untuk mengekstrak ringkasan yang tepat dan mudah
Ringkaskan sembang untuk {input}:
'
''

segera = PromptTemplate ( input_variables = [ 'input' , 'sejarah_sembang' ] , templat = templat )
ingatan = ConversationBufferMemory ( kunci_memori = 'sejarah_sembang' )
ingatan baca sahaja = ReadOnlySharedMemory ( ingatan = ingatan )
rantaian #summary untuk menyepadukan semua komponen untuk mendapatkan rumusan perbualan
summary_chain = LLMChain (
llm = OpenAI ( ) ,
segera = segera ,
bertele-tele = betul ,
ingatan = ingatan baca sahaja ,
)

Langkah 5: Menyediakan Alat

Sekarang, sediakan alatan seperti carian dan ringkasan untuk mendapatkan jawapan daripada internet bersama-sama dengan ringkasan sembang:

cari = SerpAPIWrapper ( )
alatan = [
alat (
nama = 'Cari' ,
fungsi = cari. lari ,
penerangan = 'tindak balas yang betul kepada pertanyaan yang disasarkan tentang peristiwa baru-baru ini' ,
) ,
alat (
nama = 'Ringkasan' ,
fungsi = summary_chain. lari ,
penerangan = 'bermanfaat untuk meringkaskan sembang dan input kepada alat ini mestilah rentetan, mewakili siapa yang akan membaca ringkasan ini' ,
) ,
]

Langkah 6: Membina Ejen

Konfigurasikan ejen sebaik sahaja alatan bersedia untuk melaksanakan tugas yang diperlukan dan mengekstrak jawapan daripada internet. ' awalan ' pembolehubah dilaksanakan sebelum ejen memberikan sebarang tugas kepada alat dan ' akhiran ' dilaksanakan selepas alat telah mengekstrak jawapan:

awalan = '' 'Adakan perbualan dengan manusia, jawab soalan berikut sebaik mungkin dengan mengakses alatan berikut:' ''
akhiran = '' 'Mulakan!'
#struktur untuk ejen untuk mula menggunakan alatan semasa menggunakan memori
{ sembang_sejarah }
soalan : { input }
{ agent_scratchpad } '' '

gesaan = ZeroShotAgent.create_prompt(
#configure templat gesaan untuk memahami konteks soalan
alat,
awalan=awalan,
akhiran=akhiran,
input_variables=['
input ',' sembang_sejarah ',' agent_scratchpad '],
)

Kaedah 1: Menggunakan ReadOnlyMemory

Setelah ejen ditetapkan untuk melaksanakan alatan, model dengan ReadOnlyMemory ialah diutamakan cara untuk membina dan melaksanakan rantaian untuk mengambil jawapan dan prosesnya adalah seperti berikut:

Langkah 1: Membina Rantaian

Langkah pertama dalam kaedah ini ialah membina rantai dan pelaksana untuk “ZeroShotAgent()” dengan hujah-hujahnya. The “LLMChain()” digunakan untuk membina sambungan antara semua sembang dalam model bahasa menggunakan argumen llm dan segera. Ejen menggunakan llm_chain, alatan dan verbose sebagai hujahnya dan membina agent_chain untuk melaksanakan kedua-dua ejen dan alatannya dengan memori:

llm_chain = LLMChain ( llm = OpenAI ( suhu = 0 ) , segera = segera )
ejen = ZeroShotAgent ( llm_chain = llm_chain , alatan = alatan , bertele-tele = betul )
rantai_ejen = AgenPelaksana. from_agent_and_tools (
ejen = ejen , alatan = alatan , bertele-tele = betul , ingatan = ingatan
)

Langkah 2: Menguji Rantaian

Panggil ke rantai_ejen menggunakan kaedah run() untuk bertanya soalan dari internet:

rantai_ejen. lari ( input = 'Apa itu LangChain' )

Ejen telah mengekstrak jawapan dari internet menggunakan alat carian:

Pengguna boleh bertanya soalan susulan yang tidak jelas untuk menguji memori yang dilampirkan pada ejen:

rantai_ejen. lari ( input = 'Siapa yang membangunkannya?' )

Ejen telah menggunakan sembang sebelumnya untuk memahami konteks soalan dan mendapatkan jawapan seperti yang dipaparkan dalam tangkapan skrin berikut:

Ejen menggunakan alat(summary_chain) untuk mengekstrak ringkasan semua jawapan yang diekstrak sebelum ini menggunakan memori ejen:

rantai_ejen. lari (
input = 'Terima kasih! Ringkaskan perbualan, untuk umur saya 5 tahun'
)

Pengeluaran
Ringkasan soalan yang ditanya sebelum ini telah dipaparkan untuk kanak-kanak berumur 5 tahun dalam tangkapan skrin berikut:

Langkah 3: Menguji Memori

Cetak memori penimbal untuk mengekstrak sembang yang disimpan di dalamnya dengan menggunakan kod berikut:

cetak ( rantai_ejen. ingatan . penampan )

Sembang dalam susunan yang betul tanpa sebarang pengubahsuaian telah dipaparkan dalam coretan berikut:

Kaedah 2: Menggunakan Memori yang Sama untuk Kedua-dua Ejen dan Alat

Kaedah kedua yang tidak disyorkan oleh platform adalah menggunakan memori penimbal untuk kedua-dua ejen dan alat. Alat ini boleh menukar sembang yang disimpan dalam memori yang mungkin mengembalikan output palsu dalam perbualan besar:

Langkah 1: Membina Rantaian

Menggunakan kod lengkap daripada templat untuk membina alat dan rantai untuk ejen dengan perubahan kecil kerana ReadOnlyMemory tidak ditambahkan kali ini:

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

{chat_history}

Tulis ringkasan perbualan untuk {input}:
'
''
#bina struktur sembang antara muka menggunakan templat gesaan dengan menambahkan memori dengan rantai
segera = PromptTemplate ( input_variables = [ 'input' , 'sejarah_sembang' ] , templat = templat )
ingatan = ConversationBufferMemory ( kunci_memori = 'sejarah_sembang' )
summary_chain = LLMChain (
llm = OpenAI ( ) ,
segera = segera ,
bertele-tele = betul ,
ingatan = ingatan ,
)
#bina alatan ( carian dan ringkasan ) untuk mengkonfigurasi ejen
cari = SerpAPIWrapper ( )
alatan = [
alat (
nama = 'Cari' ,
func = cari. lari ,
penerangan = 'tindak balas yang betul kepada pertanyaan yang disasarkan tentang peristiwa baru-baru ini' ,
) ,
alat (
nama = 'Ringkasan' ,
func = summary_chain. lari ,
penerangan = 'bermanfaat untuk mendapatkan ringkasan sembang dan memerlukan input rentetan kepada alat ini yang mewakili siapa yang akan membaca ringkasan ini' ,
) ,
]
#terangkan langkah untuk ejen untuk menggunakan alat untuk mengekstrak maklumat untuk sembang itu
awalan = '' 'Adakan perbualan dengan manusia, jawab pertanyaan dengan cara yang terbaik dengan mengakses alatan berikut:' ''
akhiran = '' 'Mulakan!'
#struktur untuk ejen untuk mula menggunakan alatan semasa menggunakan memori
{ sembang_sejarah }
soalan : { input }
{ agent_scratchpad } '' '

gesaan = ZeroShotAgent.create_prompt(
#configure templat gesaan untuk memahami konteks soalan
alat,
awalan=awalan,
akhiran=akhiran,
input_variables=['
input ',' sembang_sejarah ',' agent_scratchpad '],
)
#integrasikan semua komponen semasa membina pelaksana ejen
llm_chain = LLMChain(llm=OpenAI(suhu=0), prompt=prompt)
ejen = ZeroShotAgent(llm_chain=llm_chain, tools=tools, verbose=True)
rantai_ejen = AgenPelaksana.daripada_agen_dan_alat(
agen=agen, alatan=alat, verbose=True, ingatan=ingatan
)

Langkah 2: Menguji Rantaian

Jalankan kod berikut:

rantai_ejen. lari ( input = 'Apa itu LangChain' )

Jawapannya berjaya dipaparkan dan disimpan dalam ingatan:

Tanya soalan susulan tanpa memberikan banyak konteks:

rantai_ejen. lari ( input = 'Siapa yang membangunkannya?' )

Ejen menggunakan memori untuk memahami soalan dengan mengubahnya dan kemudian mencetak jawapan:

Dapatkan ringkasan sembang menggunakan memori yang dilampirkan pada ejen:

rantai_ejen. lari (
input = 'Terima kasih! Ringkaskan perbualan, untuk umur saya 5 tahun'
)

Pengeluaran
Ringkasan telah berjaya diekstrak, dan sehingga kini semuanya kelihatan sama tetapi perubahan itu berlaku dalam langkah seterusnya:

Langkah 3: Menguji Memori

Mengeluarkan mesej sembang daripada memori menggunakan kod berikut:

cetak ( rantai_ejen. ingatan . penampan )

Alat ini telah mengubah suai sejarah dengan menambah soalan lain yang tidak ditanya pada asalnya. Ini berlaku apabila model memahami soalan menggunakan a tanya diri sendiri soalan. Alat itu tersalah anggap bahawa ia ditanya oleh pengguna dan menganggapnya sebagai pertanyaan berasingan. Jadi ia menambah soalan tambahan itu kepada ingatan juga yang kemudiannya digunakan untuk mendapatkan konteks perbualan:

Itu sahaja buat masa ini.

Kesimpulan

Untuk menambah memori kepada kedua-dua ejen dan alatannya dalam LangChain, pasang modul untuk mendapatkan kebergantungan mereka dan mengimport perpustakaan daripadanya. Selepas itu, bina memori perbualan, model bahasa, alatan dan ejen untuk menambah ingatan. The kaedah yang disyorkan untuk menambah memori menggunakan ReadOnlyMemory kepada ejen dan alatannya untuk menyimpan sejarah sembang. Pengguna juga boleh menggunakan ingatan perbualan untuk kedua-dua ejen dan alat. Tetapi, mereka dapat keliru kadang-kadang dan menukar sembang dalam ingatan.