LangChain'de Hem Aracıya hem de Araçlarına Bellek Nasıl Eklenir?

Langchain De Hem Araciya Hem De Araclarina Bellek Nasil Eklenir



LangChain, kullanıcı için bilgilerin çıkarılması sürecini kontrol edecek aracıların oluşturulması için gerekli tüm araçları sağlar. Bu araçlar, farklı araçlar kullanarak görevleri yönettikleri için aracıyı oluşturmak için gereklidir. Temsilciler aynı zamanda bu araçları adım adım ilerlemek ve tüm etkinlikleri uygulamak için kullanırlar. İş için hangi aracın gerekli olduğunu ve onu belirli bir göreve ne zaman atayacağını bilir.

Hızlı Taslak

Bu gönderi aşağıdakileri gösterecektir:

LangChain'de Hem Aracıya hem de Araçlarına Bellek Nasıl Eklenir?

Aracılara ve araçlara bellek eklemek, modelin sohbet geçmişini kullanma yeteneğiyle daha iyi çalışmalarını sağlar. Aracı, bellek sayesinde hangi aracın ne zaman konuşlandırılacağına etkili bir şekilde karar verebilir. ' ifadesinin kullanılması tercih edilir. Sadece hafızayı oku ” hem aracılar hem de araçlar için, böylece onu değiştiremezler. LangChain'de hem aracılara hem de araçlara bellek ekleme sürecini öğrenmek için listelenen adımları izleyin:







Adım 1: Çerçeveleri Yükleme

Her şeyden önce, kurulumu yapın langchain-deneysel Aracı için dil modelleri ve araçları oluşturmaya yönelik bağımlılıkları almak üzere modül. LangChain deneysel, çoğunlukla deneyler ve testler için kullanılan modellerin oluşturulmasına yönelik bağımlılıkları alan modüldür:



pip kurulumu langchain - deneysel



Almak google-arama-sonuçları İnternetten en alakalı yanıtları almak için OpenAI bağımlılıklarına sahip modüller:





pip kurulumu openai google - aramak - sonuçlar

2. Adım: Ortamları Ayarlama

İnternetten yanıt alan modelin oluşturulabilmesi için ortamların oluşturulması gerekmektedir. OpenAI Ve SerpAPi anahtarlar:



içe aktarmak Sen
içe aktarmak geçiş izni

Sen. yaklaşık olarak [ 'OPENAI_API_KEY' ] = geçiş izni alın. geçiş izni ( 'OpenAI API Anahtarı:' )
Sen. yaklaşık olarak [ 'SERPAPI_API_KEY' ] = geçiş izni alın. geçiş izni ( 'Serpapi API Anahtarı:' )

3. Adım: Kitaplıkları İçe Aktarma

Ortamları ayarladıktan sonra, aracıya yönelik araçları ve bunlarla entegre edilecek ek belleği oluşturmak için kitaplıkları içe aktarın. Aşağıdaki kod, gerekli kitaplıkları elde etmek için aracıları, belleği, llm'leri, zincirleri, istemleri ve yardımcı programları kullanır:

langchain'den. ajanlar içe aktarmak ZeroShotAgent , Alet , AjanYürütücü
langchain'den. hafıza içe aktarmak Konuşma Tampon Belleği , Salt OkunurPaylaşılan Bellek
langchain'den. lms içe aktarmak OpenAI
#kütüphaneyi al için LangChain kullanarak zinciri oluşturmak
langchain'den. zincirler içe aktarmak LLLMChain
langchain'den. istemler içe aktarmak İstem Şablonu
#kütüphaneyi al için internetten bilgi almak
langchain'den. araçlar içe aktarmak SerpAPIWrapper

Adım 4: ReadOnlyMemory Ekleme

Kullanıcı girişi sağlar sağlamaz aracının görevleri gerçekleştirmeye başlaması için şablonu yapılandırın. Bundan sonra şunu ekleyin: “ConversationBufferMemory()” modelin sohbet geçmişini saklamak ve başlatmak için 'Sadece hafızayı oku' aracılar ve araçları için:

şablon = '' 'Bu bir insan ile bir bot arasındaki konuşmadır:

{sohbet geçmişi}
#kesin ve kolay özeti çıkarmak için yapıyı ayarlayın
{input} için sohbeti özetleyin:
'
''

çabuk = İstem Şablonu ( girdi_değişkenleri = [ 'giriş' , 'sohbet geçmişi' ] , şablon = şablon )
hafıza = Konuşma Tampon Belleği ( hafıza_anahtarı = 'sohbet geçmişi' )
sadece hafızayı oku = Salt OkunurPaylaşılan Bellek ( hafıza = hafıza )
#tüm bileşenleri entegre etmek için özet zincir için konuşmanın özetini alma
Summary_chain = LLLMChain (
llm = OpenAI ( ) ,
çabuk = çabuk ,
ayrıntılı = Doğru ,
hafıza = sadece hafızayı oku ,
)

Adım 5: Araçları Ayarlama

Şimdi, sohbet özetinin yanı sıra internetten yanıt almak için arama ve özet gibi araçları ayarlayın:

aramak = SerpAPIWrapper ( )
aletler = [
Alet (
isim = 'Aramak' ,
işlev = aramak. koşmak ,
Tanım = 'son olaylarla ilgili hedeflenen sorulara doğru yanıtlar' ,
) ,
Alet (
isim = 'Özet' ,
işlev = Summary_chain. koşmak ,
Tanım = 'Sohbeti özetlemek faydalı olacaktır ve bu araca yapılan giriş, bu özeti kimin okuyacağını temsil eden bir dize olmalıdır' ,
) ,
]

Adım 6: Aracıyı Oluşturma

Araçlar gerekli görevleri gerçekleştirmeye ve yanıtları internetten almaya hazır olur olmaz aracıyı yapılandırın. “ önek ' değişkeni, aracılar araçlara herhangi bir görev atamadan önce yürütülür ve ' son ek ”, araçlar yanıtı çıkardıktan sonra yürütülür:

önek = '' 'Aşağıdaki araçlara erişerek aşağıdaki soruları mümkün olan en iyi şekilde yanıtlayarak bir insanla sohbet edin:' ''
son ek = '' 'Başlamak!'
#yapı için aracının belleği kullanırken araçları kullanmaya başlaması
{ sohbet geçmişi }
Soru : { giriş }
{ ajan_scratchpad } '' '

istem = ZeroShotAgent.create_prompt(
#sorunun içeriğini anlamak için bilgi istemi şablonlarını yapılandırın
aletler,
önek=önek,
sonek=sonek,
input_variables=['
giriş ', ' sohbet geçmişi ', ' ajan_scratchpad '],
)

Yöntem 1: ReadOnlyMemory'yi kullanma

Aracı araçları çalıştıracak şekilde ayarlandıktan sonra ReadOnlyMemory'li model tercihli Cevapları almak için zincirleri oluşturmanın ve yürütmenin yolu ve süreç aşağıdaki gibidir:

Adım 1: Zinciri Oluşturmak

Bu yöntemdeki ilk adım, zinciri ve uygulayıcıyı oluşturmaktır. “ZeroShotAgent()” argümanlarıyla birlikte. “LLMCain()” llm ve Prompt argümanlarını kullanarak dil modelindeki tüm sohbetler arasında bağlantı kurmak için kullanılır. Aracı, argümanı olarak llm_chain, Tools ve Verbose'u kullanır ve hem aracıları hem de araçlarını bellekle yürütmek için Agent_chain'i oluşturur:

llm_chain = LLLMChain ( llm = OpenAI ( sıcaklık = 0 ) , çabuk = çabuk )
ajan = ZeroShotAgent ( llm_chain = llm_chain , aletler = aletler , ayrıntılı = Doğru )
ajan_zinciri = AgentExecutor. from_agent_and_tools (
ajan = ajan , aletler = aletler , ayrıntılı = Doğru , hafıza = hafıza
)

Adım 2: Zincirin Test Edilmesi

Ara ajan_zinciri İnternetten soru sormak için run() yöntemini kullanarak:

Agent_chain. koşmak ( giriş = 'LangChain Nedir' )

Temsilci, arama araçlarını kullanarak cevabı internetten çıkardı:

Kullanıcı, aracıya bağlı belleği test etmek için net olmayan takip sorusunu sorabilir:

Agent_chain. koşmak ( giriş = 'Bunu kim geliştirdi?' )

Temsilci, soruların içeriğini anlamak için önceki sohbeti kullandı ve aşağıdaki ekran görüntüsünde gösterildiği gibi yanıtları getirdi:

Temsilci, aracının belleğini kullanarak daha önce çıkarılan tüm yanıtların bir özetini çıkarmak için aracı (summary_chain) kullanır:

Agent_chain. koşmak (
giriş = 'Teşekkürler! 5 yaşındaki çocuğum için konuşmayı özetleyin'
)

Çıktı
Daha önce sorulan soruların özeti 5 yaşındaki bir çocuk için aşağıdaki ekran görüntüsünde gösterilmiştir:

3. Adım: Belleği Test Etme

Aşağıdaki kodu kullanarak, içinde saklanan sohbetleri çıkarmak için ara belleği yazdırın:

Yazdır ( Agent_chain. hafıza . tampon )

Sohbetler herhangi bir değişiklik yapılmadan doğru sırayla aşağıdaki kod parçasında görüntülenmiştir:

Yöntem 2: Hem Aracı hem de Araçlar için Aynı Belleği Kullanma

Platform tarafından önerilmeyen ikinci yöntem ise tampon belleğin hem aracılar hem de araçlar için kullanılmasıdır. Araçlar, bellekte saklanan sohbetleri değiştirebilir ve bu da büyük konuşmalarda yanlış çıktılar döndürebilir:

Adım 1: Zinciri Oluşturmak

Bu sefer ReadOnlyMemory eklenmediğinden küçük bir değişiklikle aracılara yönelik araçları ve zincirleri oluşturmak için şablondaki kodun tamamını kullanma:

şablon = '' 'Bu bir insan ile bir bot arasındaki konuşmadır:

{sohbet geçmişi}

{input} için görüşmenin bir özetini yazın:
'
''
#sohbetin yapısını oluşturun arayüz zincirle hafızayı ekleyerek bilgi istemi şablonunu kullanma
çabuk = İstem Şablonu ( girdi_değişkenleri = [ 'giriş' , 'sohbet geçmişi' ] , şablon = şablon )
hafıza = Konuşma Tampon Belleği ( hafıza_anahtarı = 'sohbet geçmişi' )
Summary_chain = LLLMChain (
llm = OpenAI ( ) ,
çabuk = çabuk ,
ayrıntılı = Doğru ,
hafıza = hafıza ,
)
#araçları oluşturun ( arama ve özet ) için aracıları yapılandırma
aramak = SerpAPIWrapper ( )
aletler = [
Alet (
isim = 'Aramak' ,
işlev = aramak. koşmak ,
Tanım = 'son olaylarla ilgili hedeflenen sorulara doğru yanıtlar' ,
) ,
Alet (
isim = 'Özet' ,
işlev = Summary_chain. koşmak ,
Tanım = 'sohbetin özetini almak faydalı olur ve bu özeti kimin okuyacağını temsil eden bu araca dize girişi yapılması gerekir' ,
) ,
]
#adımları açıklayın için aracının bilgi çıkarmak için araçları kullanması için muhabbet
önek = '' 'Aşağıdaki araçlara erişerek soruları mümkün olan en iyi şekilde yanıtlayarak bir insanla sohbet edin:' ''
son ek = '' 'Başlamak!'
#yapı için aracının belleği kullanırken araçları kullanmaya başlaması
{ sohbet geçmişi }
Soru : { giriş }
{ ajan_scratchpad } '' '

istem = ZeroShotAgent.create_prompt(
#sorunun içeriğini anlamak için bilgi istemi şablonlarını yapılandırın
aletler,
önek=önek,
sonek=sonek,
input_variables=['
giriş ', ' sohbet geçmişi ', ' ajan_scratchpad '],
)
#ajan yürütücüsünü oluştururken tüm bileşenleri entegre edin
llm_chain = LLMChain(llm=OpenAI(sıcaklık=0), istem=istem)
aracı = ZeroShotAgent(llm_chain=llm_chain, araçlar=araçlar, ayrıntılı=True)
Agent_chain = AgentExecutor.from_agent_and_tools(
aracı=aracı, araçlar=araçlar, ayrıntılı=Doğru, bellek=bellek
)

Adım 2: Zincirin Test Edilmesi

Aşağıdaki kodu çalıştırın:

Agent_chain. koşmak ( giriş = 'LangChain Nedir' )

Cevap başarıyla görüntülenir ve hafızada saklanır:

Bağlamı fazla açıklamadan aşağıdaki soruyu sorun:

Agent_chain. koşmak ( giriş = 'Bunu kim geliştirdi?' )

Aracı, soruyu dönüştürerek anlamak için belleği kullanır ve ardından yanıtı yazdırır:

Temsilciye eklenen belleği kullanarak sohbetin özetini alın:

Agent_chain. koşmak (
giriş = 'Teşekkürler! 5 yaşındaki çocuğum için konuşmayı özetleyin'
)

Çıktı
Özet başarıyla çıkarıldı ve şu ana kadar her şey aynı görünüyor ancak değişiklik bir sonraki adımda geliyor:

Adım 3: Belleği Test Etme

Aşağıdaki kodu kullanarak sohbet mesajlarını bellekten çıkarma:

Yazdır ( Agent_chain. hafıza . tampon )

Araç, başlangıçta sorulmayan başka bir soru ekleyerek geçmişi değiştirdi. Bu, model soruyu bir soru kullanarak anladığında gerçekleşir. kendi kendine sor soru. Araç yanlışlıkla bunun kullanıcı tarafından sorulduğunu düşünür ve bunu ayrı bir sorgu olarak ele alır. Böylece hafızaya, daha sonra konuşmanın bağlamını elde etmek için kullanılacak şu ek soruyu da ekler:

Şimdilik bu kadar.

Çözüm

Hem bir aracıya hem de LangChain'deki araçlarına bellek eklemek için, bağımlılıklarını almak ve kitaplıkları onlardan içe aktarmak üzere modülleri yükleyin. Bundan sonra, konuşma belleğini, dil modelini, araçları ve belleği ekleyecek aracıyı oluşturun. önerilen yöntem belleği eklemek, sohbet geçmişini depolamak için aracıya ReadOnlyMemory'yi ve onun araçlarını kullanmaktır. Kullanıcı ayrıca şunları kullanabilir: konuşma hafızası hem aracılar hem de araçlar için. Ama alıyorlar kafası karışmış bazen ve hafızadaki sohbetleri değiştirin.