Speicher-Komponente basierend auf Vektordatenbank
Der VectorStoreRetrieverMemory
speichert Erinnerungen in einer Vektordatenbank und gibt jedes Mal die besten K ähnlichen Inhalte zurück, wenn historische Speicherdaten abgefragt werden.
Hier bezieht sich "Dokument" auf vorherige Dialognachrichtenfragmente.
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
Initialisierung der Vektordatenbank
Verschiedene Vektordatenbanken haben leicht unterschiedliche Initialisierungsschritte. Hier ist ein Beispiel für die Verwendung von Faiss.
import faiss
from langchain.docstore import InMemoryDocstore
from langchain_community.vectorstores import FAISS
embedding_size = 1536 # Vektor-Dimension
index = faiss.IndexFlatL2(embedding_size)
embedding_fn = OpenAIEmbeddings().embed_query
vectorstore = FAISS(embedding_fn, index, InMemoryDocstore({}), {})
Erstellung von VectorStoreRetrieverMemory
Erstellung der VectorStoreRetrieverMemory-Komponente unter Verwendung der Vektordatenbank.
retriever = vectorstore.as_retriever(search_kwargs=dict(k=1))
memory = VectorStoreRetrieverMemory(retriever=retriever)
memory.save_context({"input": "Mein Lieblingsessen ist Pizza"}, {"output": "Gut zu wissen"})
memory.save_context({"input": "Mein Lieblingssport ist Fußball"}, {"output": "..."})
memory.save_context({"input": "Ich mag die Celtics nicht"}, {"output": "ok"}) #
print(memory.load_memory_variables({"prompt": "Welchen Sport sollte ich mir ansehen?"})["history"])
input: Mein Lieblingssport ist Fußball
output: ...
Verwendung der Speicher-Komponente über Chain
Im Folgenden finden Sie ein Beispiel zum Erlernen der Verwendung der Speicher-Komponente. Sie können den Parameter "verbose=True" festlegen, um die interaktiven Aufforderungen mit dem Modell zu drucken.
llm = OpenAI(temperature=0) # Es kann sich um ein beliebiges gültiges LLM handeln, hier wählen wir openai
_DEFAULT_TEMPLATE = """Hier ist eine freundliche Unterhaltung zwischen Menschen und KI. Die KI ist gesprächig und liefert viele spezifische Details aus ihrem Kontext. Wenn die KI die Antwort auf die Frage nicht kennt, wird sie aufrichtig sagen, dass sie es nicht weiß.
Relevante Teile des vorherigen Gesprächs:
{history}
(Wenn irrelevant, müssen Sie diese Informationen nicht verwenden)
Aktuelle Unterhaltung:
Mensch: {input}
KI:"""
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="Hallo, mein Name ist Perry, was geht?")
> Neuen ConversationChain-Ketten betreten...
Aufforderung nach Formatierung:
Hier ist eine freundliche Unterhaltung zwischen Menschen und KI. Die KI ist gesprächig und liefert viele spezifische Details aus ihrem Kontext. Wenn die KI die Antwort auf die Frage nicht kennt, wird sie aufrichtig sagen, dass sie es nicht weiß.
Relevante Teile des vorherigen Gesprächs:
Eingabe: Mein Lieblingsessen ist Pizza.
Ausgabe: Das ist gut zu wissen.
(Wenn irrelevant, müssen Sie diese Informationen nicht verwenden)
Aktuelle Unterhaltung:
Mensch: Hallo, mein Name ist Perry, was geht?
KI:
> Kette beendet.
"Hallo Perry, mir geht's super. Und dir?"
conversation_with_summary.predict(input="Was ist mein Lieblingssport?")
> Neuen ConversationChain-Ketten betreten...
Aufforderung nach Formatierung:
Hier ist eine freundliche Unterhaltung zwischen Menschen und KI. Die KI ist gesprächig und liefert viele spezifische Details aus ihrem Kontext. Wenn die KI die Antwort auf die Frage nicht kennt, wird sie aufrichtig sagen, dass sie es nicht weiß.
Relevante Teile des vorherigen Gesprächs:
Eingabe: Mein Lieblingssport ist Fußball.
Ausgabe: ...
(Wenn irrelevant, müssen Sie diese Informationen nicht verwenden)
Aktuelle Unterhaltung:
Mensch: Was ist mein Lieblingssport?
KI:
> Kette beendet.
'Du hast mir früher erzählt, dass dein Lieblingssport Fußball ist.'