Vektör Tabanlı Bellek Bileşeni
VectorStoreRetrieverMemory
, belleği bir vektör veritabanında depolar ve her sorgulandığında en benzer K içeriği döndürür.
Burada "belge", önceki diyalog mesajı parçalarına atıfta bulunur.
from datetime import datetime
from langchain_openai import OpenAIEmbeddings
from langchain_openai import OpenAI
from langchain.memory import VectorStoreRetrieverMemory
from langchain.chains import ConversationChain
from langchain_core.prompts import PromptTemplate
Vektör Veritabanının Başlatılması
Farklı vektör veritabanlarının biraz farklı başlatma adımları vardır. İşte Faiss kullanarak bir örnek.
import faiss
from langchain.docstore import InMemoryDocstore
from langchain_community.vectorstores import FAISS
embedding_size = 1536 # Vektör boyutu
index = faiss.IndexFlatL2(embedding_size)
embedding_fn = OpenAIEmbeddings().embed_query
vectorstore = FAISS(embedding_fn, index, InMemoryDocstore({}), {})
VectorStoreRetrieverMemory Oluşturma
Vektör veritabanını kullanarak VectorStoreRetrieverMemory bileşeninin oluşturulması.
retriever = vectorstore.as_retriever(search_kwargs=dict(k=1))
memory = VectorStoreRetrieverMemory(retriever=retriever)
memory.save_context({"input": "En sevdiğim yemek pizza"}, {"output": "Bunu bilmek güzel"})
memory.save_context({"input": "En sevdiğim spor futbol"}, {"output": "..."})
memory.save_context({"input": "Celtics'i sevmem"}, {"output": "tamam"}) #
print(memory.load_memory_variables({"prompt": "Hangi sporu izlemeliyim?"})["history"])
input: En sevdiğim spor futbol
output: ...
Zincir Aracılığıyla Bellek Bileşeninin Kullanılması
Bellek bileşeninin nasıl kullanılacağına dair bir örnek aşağıda verilmiştir. "verbose=True" parametresini modelle etkileşimli iletişimleri yazdırmak için ayarlayabilirsiniz.
llm = OpenAI(temperature=0) # Herhangi geçerli bir LLM olabilir, burada openai'yi seçiyoruz
_DEFAULT_TEMPLATE = """İnsanlar ve yapay zeka arasında samimi bir diyalog. Yapay zeka konuşkan ve bağlamından birçok spesifik detay sağlar. Eğer yapay zeka sorunun yanıtını bilmiyorsa, bunu samimi bir şekilde söyleyecektir.
Önceki konuşmanın ilgili kısımları:
{history}
(Eğer ilgili değilse, bu bilgiyi kullanmanız gerekmez)
Geçerli konuşma:
İnsan: {input}
Yapay Zeka:"""
PROMPT = PromptTemplate(
input_variables=["history", "input"],
template=_DEFAULT_TEMPLATE
)
conversation_with_summary = ConversationChain(
llm=llm,
prompt=PROMPT,
memory=memory,
verbose=True
)
conversation_with_summary.predict(input="Merhaba, benim adım Perry, n'aber?")
> Yeni ConversationChain zincirine giriliyor...
Biçimlendirildikten sonraki İlgi:
İnsanlar ve yapay zeka arasında samimi bir diyalog. Yapay zeka konuşkan ve bağlamından birçok spesifik detay sağlar. Eğer yapay zeka sorunun yanıtını bilmiyorsa, bunu samimi bir şekilde söyleyecektir.
Önceki konuşmanın ilgili kısımları:
Giriş: En sevdiğim yemek pizza.
Çıkış: Bunu bilmek güzel.
(İlgisizse, bu bilgiyi kullanmanız gerekmez)
Geçerli konuşma:
İnsan: Merhaba, benim adım Perry, n'aber?
Yapay Zeka:
> Zincir tamamlandı.
"Merhaba Perry, ben harikayım. Sen nasılsın?"
conversation_with_summary.predict(input="En sevdiğim spor hangisi?")
> Yeni ConversationChain zincirine giriliyor...
Biçimlendirildikten sonraki İlgi:
İnsanlar ve yapay zeka arasında samimi bir diyalog. Yapay zeka konuşkan ve bağlamından birçok spesifik detay sağlar. Eğer yapay zeka sorunun yanıtını bilmiyorsa, bunu samimi bir şekilde söyleyecektir.
Önceki konuşmanın ilgili kısımları:
Giriş: En sevdiğim spor futbol.
Çıkış: ...
(İlgisizse, bu bilgiyi kullanmanız gerekmez)
Geçerli konuşma:
İnsan: En sevdiğim spor hangisi?
Yapay Zeka:
> Zincir tamamlandı.
'Bana daha önce en sevdiğin sporunun futbol olduğunu söylemiştin.'