Komponent pamięci oparty na bazie danych wektorowej
VectorStoreRetrieverMemory
przechowuje wspomnienia w bazie danych wektorowej i zwraca najbardziej podobne treści top K za każdym razem, gdy zapytane są historyczne dane pamięci.
Tutaj "dokument" odnosi się do fragmentów poprzednich wiadomości dialogowych.
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
Inicjowanie bazy danych wektorowej
Różne bazy danych wektorowych mają nieco inne kroki inicjalizacji. Oto przykład użycia Faiss.
import faiss
from langchain.docstore import InMemoryDocstore
from langchain_community.vectorstores import FAISS
rozmiar_wbodowania = 1536 # Wymiarowość wektorów
index = faiss.IndexFlatL2(rozmiar_wbodowania)
wbodowanie_fn = OpenAIEmbeddings().wbuduj_zapytanie
vectorstore = FAISS(wbodowanie_fn, index, InMemoryDocstore({}), {})
Tworzenie komponentu VectorStoreRetrieverMemory
Tworzenie komponentu VectorStoreRetrieverMemory za pomocą bazy danych wektorowej.
retriever = vectorstore.jako_przechwytujący(parametry_wyszukiwania=dict(k=1))
pamięć = VectorStoreRetrieverMemory(retriever=retriever)
pamięć.zapisz_kontekst({"wejście": "Moje ulubione jedzenie to pizza"}, {"wyjście": "Dobrze wiedzieć"})
pamięć.zapisz_kontekst({"wejście": "Mój ulubiony sport to piłka nożna"}, {"wyjście": "..."})
pamięć.zapisz_kontekst({"wejście": "Nie lubię Celticsów"}, {"wyjście": "ok"}) #
print(pamięć.załaduj_zmienne_pamięci({"zachęta": "Jaki sport powinienem oglądać?"})["historia"])
wejście: Mój ulubiony sport to piłka nożna
wyjście: ...
Użycie komponentu pamięci za pośrednictwem łańcucha
Poniżej znajduje się przykład nauki użytkowania komponentu pamięci. Możesz ustawić parametr "verbose=True", aby wydrukować interaktywne zachęty z modelem.
llm = OpenAI(temperatura=0) # Może być dowolny prawidłowy LLM, tutaj wybraliśmy openai
DOMYŚLNY_SZABLON = """Oto przyjazna rozmowa między ludźmi a sztuczną inteligencją. SI jest rozmowna i dostarcza wiele konkretnych szczegółów ze swojego kontekstu. Jeśli SI nie zna odpowiedzi na pytanie, szczerze powie, że nie wie.
Odpowiednie fragmenty poprzedniej rozmowy:
{historia}
(Jeśli nieistotne, nie musisz używać tych informacji)
Bieżąca rozmowa:
Człowiek: {wejście}
SI:"""
ZACHĘTA = PromptTemplate(
zmienne_wejściowe=["historia", "wejście"],
szablon=DOMYŚLNY_SZABLON
)
rozmowa_z_podsumowaniem = ConversationChain(
llm=llm,
zachęta=ZACHĘTA,
pamięć=pamięć,
verbose=True
)
rozmowa_z_podsumowaniem.przewiduj(wejście="Cześć, mam na imię Perry, co tam?")
> Rozpoczynam nowe łańcuch ConversationChain...
Zachęta po sformatowaniu:
Oto przyjazna rozmowa między ludźmi a SI. SI jest rozmowna i dostarcza wiele konkretnych szczegółów ze swojego kontekstu. Jeśli SI nie zna odpowiedzi na pytanie, szczerze powie, że nie wie.
Odpowiednie fragmenty poprzedniej rozmowy:
Wejście: Moje ulubione jedzenie to pizza.
Wyjście: Dobrze wiedzieć.
(Jeśli nieistotne, nie musisz używać tych informacji)
Bieżąca rozmowa:
Człowiek: Cześć, mam na imię Perry, co tam?
SI:
> Zakończono łańcuch.
"Witaj Perry, ja mam się świetnie. A ty?"
rozmowa_z_podsumowaniem.przewiduj(wejście="Jaki jest mój ulubiony sport?")
> Rozpoczynam nowe łańcuch ConversationChain...
Zachęta po sformatowaniu:
Oto przyjazna rozmowa między ludźmi a SI. SI jest rozmowna i dostarcza wiele konkretnych szczegółów ze swojego kontekstu. Jeśli SI nie zna odpowiedzi na pytanie, szczerze powie, że nie wie.
Odpowiednie fragmenty poprzedniej rozmowy:
Wejście: Mój ulubiony sport to piłka nożna.
Wyjście: ...
(Jeśli nieistotne, nie musisz używać tych informacji)
Bieżąca rozmowa:
Człowiek: Jaki jest mój ulubiony sport?
SI:
> Zakończono łańcuch.
'Powiedziałeś mi wcześniej, że twój ulubiony sport to piłka nożna."