Bu kılavuz, LangChain'de birden fazla girişi olan bir zincire bellek ekleme sürecini gösterecektir.
LangChain'de Çoklu Girişli Bir Zincire Bellek Nasıl Eklenir?
Modelin komutun içeriğini anlayabilmesi için en son mesajları veya verileri depolamak üzere bellek LLM'lere veya sohbet robotlarına eklenebilir. LangChain'de birden fazla girişi olan bir zincire bellek ekleme işlemini öğrenmek için aşağıdaki adımları uygulamanız yeterlidir:
Adım 1: Modülleri Kurun
İlk olarak, dil modelleri oluşturmak için çeşitli bağımlılıklara sahip olduğundan LangChain çerçevesini yükleyin:
pip kurulumu langchain
Bellek tarafından kullanılan verileri Chroma vektör deposunda depolamak için chromadb'yi yükleyin:
pip install chromadb
Tiktoken, kolayca yönetilebilmeleri için büyük belgelerden küçük parçalar oluşturmak için kullanılan tokenizerdir:
pip tiktoken kurulumu
OpenAI, OpenAI() yöntemini kullanarak zincirler ve LLM'ler oluşturmak için kullanılabilecek modüldür:
pip kurulumu openai
Adım 2: Ortamın Kurulumu ve Verilerin Yüklenmesi
Bu işlem için gerekli tüm modülleri kurduktan sonraki adım çevreyi ayarlama OpenAI hesabındaki API anahtarını kullanarak:
içe aktarmak Seniçe aktarmak geçiş izni
Sen . yaklaşık olarak [ 'OPENAI_API_KEY' ] = geçiş izni . geçiş izni ( 'OpenAI API Anahtarı:' )
LangChain çerçevesinde zincirler oluşturmak için dosya kitaplığını kullanarak belgeleri yükleyin:
itibaren google. ve diğerleri içe aktarmak Dosyalaryüklendi = Dosyalar. yüklemek ( )
3. Adım: Kitaplıkları İçe Aktarın
Belge başarıyla yüklendikten sonra gerekli kitaplıkları Langchain modülünden içe aktarmanız yeterlidir:
itibaren Langchain. gömmeler . açık içe aktarmak OpenAIE Yerleştirmeleriitibaren Langchain. gömmeler . tutarlı olmak içe aktarmak TutarlıGömmeler
itibaren Langchain. metin_splitter içe aktarmak KarakterMetin Bölücü
itibaren Langchain. vektör mağazaları . elastic_vector_search içe aktarmak ElasticVectorArama
itibaren Langchain. vektör mağazaları içe aktarmak Renk
itibaren Langchain. doküman deposu . belge içe aktarmak Belge
4. Adım: Chroma Veritabanını Kullanarak Bellek Oluşturma
Şimdi, daha önce yüklenen belgenin yerleştirmelerini ve belirteçlerini depolamak için vektör alanını oluşturmaya başlayın:
ile açık ( 'birliğin_durumu.txt' ) gibi F:birliğin Durumu = F. Okumak ( )
metin_splitter = KarakterMetin Bölücü ( Parça boyutu = 1000 , chunk_overlap = 0 )
metinler = text_splitter. bölünmüş metin ( birliğin Durumu )
gömmeler = OpenAIE Yerleştirmeleri ( )
Belgedeki metni ve eklemeleri depolamak için Chroma veritabanını yapılandırın:
doküman arama = Kroma. from_texts (metinler , gömmeler , meta veriler = [ { 'kaynak' : Ben } için Ben içinde menzil ( sadece ( metinler ) ) ]
)
Sorgu değişkenindeki komutu sorarak belleği test edin ve ardından benzerlik_search() yöntemini yürütün:
sorgu = 'NATO ne zaman kuruldu'dokümanlar = doküman araması. benzerlik_araması ( sorgu )
Adım 5: Bilgi İstemi Şablonunu Yapılandırma
Bu adım, aşağıdaki kitaplıkları içe aktararak bilgi istemleri için şablonu yapılandırma sürecini açıklamaktadır:
itibaren Langchain. zincirler . soru_cevaplama içe aktarmak load_qa_chainitibaren Langchain. lms içe aktarmak OpenAI
itibaren Langchain. istemler içe aktarmak İstem Şablonu
itibaren Langchain. hafıza içe aktarmak Konuşma Tampon Belleği
Bundan sonra, sorgu için şablonu veya yapıyı yapılandırmanız ve modele bellek eklendikten sonra zinciri çalıştırmanız yeterlidir:
şablon = '''Bir insanla sohbet eden bir modelsinUzun bir belgeden alınan parçalar ve bir soru göz önüne alındığında son bir cevap oluşturun
{bağlam}
{geçmiş}
İnsan: {giriş}
Sohbet robotu:'''
çabuk = İstem Şablonu (
girdi_değişkenleri = [ 'geçmiş' , 'giriş' , 'bağlam' ] , şablon = şablon
)
hafıza = Konuşma Tampon Belleği ( hafıza_anahtarı = 'geçmiş' , giriş_anahtarı = 'giriş' )
zincir = load_qa_chain (
OpenAI ( sıcaklık = 0 ) , zincir_tipi = 'şey' , hafıza = hafıza , çabuk = çabuk
)
Adım 6: Belleği Test Etme
Sorgu değişkenini kullanarak soruyu sorarak ve ardından Chain() yöntemini parametreleriyle birlikte çalıştırarak modeli test etmenin zamanı geldi:
sorgu = 'NATO ne zaman kuruldu'zincir ( { 'giriş_belgeleri' : dokümanlar , 'giriş' : sorgu } , return_only_outputs = Doğru )
Modelin verdiği yanıt yakın zamanda bellekte saklandığından, ara bellekte saklanan verileri yazdırın:
Yazdır ( zincir. hafıza . tampon )
Bu tamamen LangChain'de birden fazla girişi olan bir zincire bellek eklemekle ilgilidir.
Çözüm
LangChain'de birden fazla girişe sahip bir zincire bellek eklemek için, metinleri ve eklemeleri depolamak üzere modülleri ve vektör deposunu kurmanız yeterlidir. Bundan sonra, verileri/belgeyi yerel sistemden yükleyin ve ardından LLM için bellek oluşturmak amacıyla verileri depolamak için gerekli kitaplıkları içe aktarın. En son mesajları ara bellekte saklamak için bilgi istemi şablonunu yapılandırın ve ardından zincire mesaj gönderin. Bu kılavuz, LangChain'de birden fazla girişi olan bir zincire bellek ekleme sürecini ayrıntılı olarak ele almıştır.