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."