Composant mémoire basé sur la base de données de vecteurs
Le VectorStoreRetrieverMemory
stocke les souvenirs dans une base de données de vecteurs et renvoie les contenus similaires les plus proches à chaque fois que des données historiques de la mémoire sont interrogées.
Ici, "document" fait référence aux fragments de messages de dialogue précédents.
Initialisation de la base de données de vecteurs
Différentes bases de données de vecteurs ont des étapes d'initialisation légèrement différentes. Voici un exemple d'utilisation de Faiss.
import faiss
from langchain.docstore import InMemoryDocstore
from langchain_community.vectorstores import FAISS
taille_embbeding = 1536 # Dimensionnalité du vecteur
index = faiss.IndexFlatL2(taille_embbeding)
embedding_fn = OpenAIEmbeddings().embed_query
vectorstore = FAISS(embedding_fn, index, InMemoryDocstore({}), {})
Création de VectorStoreRetrieverMemory
Création du composant VectorStoreRetrieverMemory en utilisant la base de données de vecteurs.
retriever = vectorstore.as_retriever(search_kwargs=dict(k=1))
memory = VectorStoreRetrieverMemory(retriever=retriever)
memory.save_context({"input": "Ma nourriture préférée est la pizza"}, {"output": "C'est bon à savoir"})
memory.save_context({"input": "Mon sport préféré est le soccer"}, {"output": "..."})
memory.save_context({"input": "Je n'aime pas les Celtics"}, {"output": "ok"}) #
print(memory.load_memory_variables({"prompt": "Quel sport devrais-je regarder?"})["history"])
input: Mon sport préféré est le soccer
output: ...
Utilisation du composant mémoire via Chain
Voici un exemple pour apprendre à utiliser le composant mémoire. Vous pouvez définir le paramètre "verbose=True" pour imprimer les invites interactives avec le modèle.
llm = OpenAI(temperature=0) # Il peut s'agir de n'importe quel LLM valide, ici nous choisissons OpenAI
_DEFAULT_TEMPLATE = """Voici une conversation amicale entre des humains et une IA. L'IA est bavarde et fournit de nombreux détails spécifiques à partir de son contexte. Si l'IA ne connaît pas la réponse à la question, elle dira sincèrement qu'elle ne sait pas.
Parties pertinentes de la conversation précédente:
{history}
(Si non pertinent, vous n'avez pas besoin d'utiliser ces informations)
Conversation actuelle:
Humain: {input}
IA:"""
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="Salut, je m'appelle Perry, quoi de neuf?")
> Entering new ConversationChain chain...
Invite après formatage:
Voici une conversation amicale entre des humains et une IA. L'IA est bavarde et fournit de nombreux détails spécifiques à partir de son contexte. Si l'IA ne connaît pas la réponse à la question, elle dira sincèrement qu'elle ne sait pas.
Parties pertinentes de la conversation précédente:
Input: Ma nourriture préférée est la pizza.
Output: C'est bon à savoir.
(Si non pertinent, vous n'avez pas besoin d'utiliser ces informations)
Conversation actuelle:
Humain: Salut, je m'appelle Perry, quoi de neuf?
IA:
> Chaîne terminée.
"Salut Perry, je vais très bien. Et toi ?"
conversation_with_summary.predict(input="Quel est mon sport préféré?")
> Entering new ConversationChain chain...
Invite après formatage:
Voici une conversation amicale entre des humains et une IA. L'IA est bavarde et fournit de nombreux détails spécifiques à partir de son contexte. Si l'IA ne connaît pas la réponse à la question, elle dira sincèrement qu'elle ne sait pas.
Parties pertinentes de la conversation précédente:
Input: Mon sport préféré est le soccer.
Output: ...
(Si non pertinent, vous n'avez pas besoin d'utiliser ces informations)
Conversation actuelle:
Humain: Quel est mon sport préféré?
IA:
> Chaîne terminée.
'Tu m'as dit plus tôt que ton sport préféré est le soccer.'