inteligencia_artificial:langchain:memoria
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Próxima revisión | Revisión previa | ||
| inteligencia_artificial:langchain:memoria [2025/01/09 00:21] – creado alberto | inteligencia_artificial:langchain:memoria [2025/12/18 16:52] (actual) – [Ventana de tokens del buffer de conversación] alberto | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== Memoria ====== | ====== Memoria ====== | ||
| + | El modo en que se gestiona la memoria en este apartado a través de langchain, está obsoleto // | ||
| + | Se debe de hacer a través de // | ||
| + | |||
| + | |||
| + | Si a un modelo le hacemos varias consultas seguidas, al responder cada una, no recuerda qué respondió las anteriores, por lo que es complicado realizar con él una conversación coherente. | ||
| + | |||
| + | <code Python> | ||
| + | from langchain_ollama import ChatOllama | ||
| + | |||
| + | chat = ChatOllama( | ||
| + | model = " | ||
| + | temperature = 0.0, | ||
| + | verbose = False | ||
| + | ) | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | </ | ||
| + | ===== Buffer de conversación ===== | ||
| + | Cuando instanciamos la clase **ConversationBufferMemory**, | ||
| + | Si le pasamos esta información con una plantilla de prompt en cada iteración, le estaremos proporcionando al modelo una memoria a corto plazo a costa de una gran cantidad de tokens. | ||
| + | |||
| + | <code Python> | ||
| + | from langchain_ollama import ChatOllama | ||
| + | from langchain.memory import ConversationBufferMemory | ||
| + | from langchain.chains.llm import LLMChain | ||
| + | from langchain.prompts import PromptTemplate | ||
| + | |||
| + | chat = ChatOllama( | ||
| + | model = " | ||
| + | temperature = 0.0, | ||
| + | verbose = False | ||
| + | ) | ||
| + | |||
| + | # Definimos el prompt con una plantilla, en el prompt especificaremos el historial | ||
| + | # de la conversación (transcripción) que pasaremos en cada nueva llamada | ||
| + | prompt = PromptTemplate( | ||
| + | input_variables=[" | ||
| + | template=" | ||
| + | ) | ||
| + | |||
| + | # Creamos la memoria de la conversación | ||
| + | memoria = ConversationBufferMemory(memory_key=" | ||
| + | |||
| + | # Cadena LLMChain con el modelo, el prompt y la memoria, hay que hacerlo así | ||
| + | chat_chain = LLMChain( | ||
| + | llm = chat, | ||
| + | prompt=prompt, | ||
| + | memory=memoria, | ||
| + | verbose=False | ||
| + | ) | ||
| + | # Obtenemos las respuestas del modelo | ||
| + | respuesta = chat_chain.invoke(" | ||
| + | # | ||
| + | |||
| + | respuesta = chat_chain.invoke(" | ||
| + | # | ||
| + | |||
| + | respuesta = chat_chain.invoke(" | ||
| + | # | ||
| + | |||
| + | # Podemos añadir contexto a la memoria | ||
| + | memoria.save_context( | ||
| + | {" | ||
| + | {" | ||
| + | ) | ||
| + | |||
| + | # Muestro la conversación completa | ||
| + | print(memoria.buffer_as_str) | ||
| + | </ | ||
| + | |||
| + | ===== Ventana del Buffer de conversación ===== | ||
| + | Podemos seleccionar el número de interacciones (pregunta-respuesta) que queremos que el modelo " | ||
| + | |||
| + | <code Python> | ||
| + | from langchain.memory import ConversationBufferWindowMemory | ||
| + | |||
| + | # Instanciamos la memoria con una ventana de contexto de 2 iteraciones: | ||
| + | memoria = ConversationBufferWindowMemory(k = 2) | ||
| + | |||
| + | # En lugar de preguntar a un modelo, le introducimos las interacciones directamente en memoria | ||
| + | memoria.save_context( | ||
| + | {" | ||
| + | {" | ||
| + | ) | ||
| + | |||
| + | memoria.save_context( | ||
| + | {" | ||
| + | {" | ||
| + | ) | ||
| + | |||
| + | memoria.save_context( | ||
| + | {" | ||
| + | {" | ||
| + | ) | ||
| + | |||
| + | print(memoria.load_memory_variables({})) | ||
| + | </ | ||
| + | |||
| + | ===== Ventana de tokens del buffer de conversación ===== | ||
| + | Del mismo modo que hicimos anteriormente, | ||
| + | De esta manera se recordarán los últimos tokens en el número definido en la clase **ConversationTokenBufferMemory** | ||
| + | |||
| + | <code Python> | ||
| + | # CUARTO EJEMPLO: Definimos el número máximo de tokens a recordar | ||
| + | # Se necesita instalar el módulo " | ||
| + | # Tembién he tenido que instalar el módulo " | ||
| + | from langchain.memory import ConversationTokenBufferMemory | ||
| + | from langchain_ollama import ChatOllama | ||
| + | |||
| + | chat = ChatOllama( | ||
| + | model = " | ||
| + | temperature = 0.0, | ||
| + | verbose = False | ||
| + | ) | ||
| + | |||
| + | # Definimos la memoria, indicando el modelo y el número máximo de tokens a recordar | ||
| + | memoria = ConversationTokenBufferMemory(llm=chat, | ||
| + | |||
| + | memoria.save_context ( | ||
| + | {" | ||
| + | {" | ||
| + | ) | ||
| + | |||
| + | memoria.save_context ( | ||
| + | {" | ||
| + | {" | ||
| + | ) | ||
| + | |||
| + | memoria.save_context ( | ||
| + | {" | ||
| + | {" | ||
| + | ) | ||
| + | |||
| + | print(memoria.load_memory_variables({})) | ||
| + | </ | ||
| + | {{gallery>: | ||
| + | ===== Resumen de conversación ===== | ||
| + | Con el fin de " | ||
| + | |||
| + | <code Python> | ||
| + | from langchain_ollama import ChatOllama | ||
| + | from langchain.memory import ConversationSummaryBufferMemory | ||
| + | from langchain.chains.llm import LLMChain | ||
| + | from langchain.prompts import PromptTemplate | ||
| + | |||
| + | # Definimos el chat del modelo | ||
| + | chat = ChatOllama( | ||
| + | model = " | ||
| + | temperature = 0.0, | ||
| + | verbose = False # Podemos añadir como parámetro ' | ||
| + | ) | ||
| + | |||
| + | # Texto con el que vamos a trabajar | ||
| + | with open(' | ||
| + | texto = articulo.read() | ||
| + | |||
| + | # Definimos la memoria | ||
| + | memoria = ConversationSummaryBufferMemory(llm=chat, | ||
| + | |||
| + | # Añadimos contexto a la conversación, | ||
| + | memoria.save_context ( | ||
| + | {" | ||
| + | {" | ||
| + | ) | ||
| + | |||
| + | memoria.save_context ( | ||
| + | {" | ||
| + | {" | ||
| + | ) | ||
| + | |||
| + | memoria.save_context ( | ||
| + | {" | ||
| + | {" | ||
| + | ) | ||
| + | |||
| + | # | ||
| + | # | ||
| + | |||
| + | # Creamos el prompt sólo con la entrada | ||
| + | prompt = PromptTemplate( | ||
| + | input_variables=[" | ||
| + | template=" | ||
| + | ) | ||
| + | |||
| + | # Cadena (chain) de conversación | ||
| + | conversacion = LLMChain( | ||
| + | llm = chat, | ||
| + | prompt = prompt, | ||
| + | memory=memoria, | ||
| + | verbose=True | ||
| + | ) | ||
| + | |||
| + | respuesta = conversacion.invoke(" | ||
| + | |||
| + | print(respuesta) | ||
| + | # | ||
| + | # | ||
| + | </ | ||
inteligencia_artificial/langchain/memoria.1736378497.txt.gz · Última modificación: por alberto
