HuggingChat y ChatGPT (como se ve a continuación) son interfaces generales de chatbot. Los usuarios pueden mantener conversaciones generales con los chatbots a través de una interfaz gráfica basada en web. La idea es que ambos servicios actúen como el asistente personal definitivo.
Estas interfaces están constituidas por tres capas clave:
- Large Language Model
- API Call
- Memoria de conversación/gestión de contexto
- Interfaz gráfica de usuario
A medida que crece el uso de estas interfaces de chat, los usuarios tienen un deseo natural de desarrollar o construir sobre estas interfaces. Y los LLM sobre los que se construyen estas interfaces de chat ya están disponibles.
En el caso de ChatGPT, los LLM utilizados son gpt-4, gpt-3.5-turbo, gpt-4-0214, gpt-3.5-turbo-0301.
En el caso de HuggingChat, el modelo actual es OpenAssistant/oasst-sft-6-llama-30b-xor .
Pero, tener acceso a la API no resuelve el requisito de gestionar el contexto de la conversación y la memoria, esto tendrá que ser desarrollado.
Más información sobre la gestión de la memoria del chatbot aquí.
La integración con la memoria permite mantener conversaciones de tipo humano con grandes modelos lingüísticos (LLM). El contexto de la conversación se gestiona y los usuarios pueden hacer preguntas de seguimiento haciendo referencia implícita al contexto de la conversación. Este elemento es vital para las conversaciones largas de varios turnos.
Haystack ha publicado recientemente un cuaderno que guía a los usuarios paso a paso en la construcción de su propia interfaz HuggingChat basado en el mismo LLM que HuggingChat está utilizando actualmente.
Como se puede ver a continuación, el cuaderno también genera una GUI a través de la cual se puede mantener una conversación con el chatbot, ver y borrar la memoria.
⭐️ Por favor, sígueme en LinkedIn para actualizaciones sobre LLMs ⭐️
A continuación, una guía completa sobre cómo tener tu propio asistente personal funcionando en un portátil.
En primer lugar, instala haystack:
pip install --upgrade pip pip install farm-haystack[colab]
Para acceder a las API de inferencia alojadas en HuggingFace, debe proporcionar una clave de API para HuggingFace:
from getpass import getpass model_api_key = getpass("Enter model provider API key:")
Un PromptNode se inicializa con el nombre del modelo, la clave api y la longitud máxima. Haremos referencia al mismo LLM utilizado por HuggingChat:
OpenAssistant/oasst-sft-1-pythia-12b
from haystack.nodes import PromptNode model_name = "OpenAssistant/oasst-sft-1-pythia-12b" prompt_node = PromptNode(model_name, api_key=model_api_key, max_length=256)
Para que la interfaz conversacional sea más parecida a la humana, es necesario crear memoria.
Hay dos tipos de opciones de memoria en Haystack:
- ConversationMemory: almacena el historial de conversaciones (por defecto).
- ConversationSummaryMemory: almacena el historial de conversaciones y genera resúmenes periódicamente.
from haystack.agents.memory import ConversationSummaryMemory summary_memory = ConversationSummaryMemory(prompt_node)
Ahora se puede inicializar el ConversationalAgent. Como PromptTemplate, ConversationalAgent utiliza conversational-agent por defecto.
from haystack.agents.conversational import ConversationalAgent conversational_agent = ConversationalAgent(prompt_node=prompt_node, memory=summary_memory)
El uso de la memoria puede ilustrarse formulando una pregunta, seguida de una segunda pregunta. La segunda pregunta hace referencia implícita al contexto de la primera:
Primera pregunta:
DIme las tres cosas más interesantes de Estambul, Turquía
Segunda pregunta:
¿Puedes dar más detalles sobre el segundo punto?
A continuación puedes ver cómo pueden publicarse las preguntas:
conversational_agent.run("Tell me three most interesting things about Istanbul, Turkey")
Y la pregunta implícita de seguimiento:
conversational_agent.run("Can you turn this info into a twitter thread?")
Lleva tu experiencia de chat al siguiente nivel con la siguiente aplicación de ejemplo…
Aquí está la ventana de chat interactiva dentro de Colab que el código generará:
Ejecuta la celda de código que aparece a continuación y utiliza el área de texto para intercambiar mensajes con el agente conversacional. Utiliza los botones de la derecha para cargar o borrar el historial de chat.
import ipywidgets as widgets from IPython.display import clear_output ## Text Input user_input = widgets.Textarea( value="", placeholder="Type your prompt here", disabled=False, style={"description_width": "initial"}, layout=widgets.Layout(width="100%", height="100%"), ) ## Submit Button submit_button = widgets.Button( description="Submit", button_style="success", layout=widgets.Layout(width="100%", height="80%") ) def on_button_clicked(b): user_prompt = user_input.value user_input.value = "" print("\nUser:\n", user_prompt) conversational_agent.run(user_prompt) submit_button.on_click(on_button_clicked) ## Show Memory Button memory_button = widgets.Button( description="Show Memory", button_style="info", layout=widgets.Layout(width="100%", height="100%") ) def on_memory_button_clicked(b): memory = conversational_agent.memory.load() if len(memory): print("\nMemory:\n", memory) else: print("Memory is empty") memory_button.on_click(on_memory_button_clicked) ## Clear Memory Button clear_button = widgets.Button( description="Clear Memory", button_style="warning", layout=widgets.Layout(width="100%", height="100%") ) def on_clear_button_button_clicked(b): conversational_agent.memory.clear() print("\nMemory is cleared\n") clear_button.on_click(on_clear_button_button_clicked) ## Layout grid = widgets.GridspecLayout(3, 3, height="200px", width="800px", grid_gap="10px") grid[0, 2] = clear_button grid[0:2, 0:2] = user_input grid[2, 0:] = submit_button grid[1, 2] = memory_button display(grid)
⭐️ Sígueme en LinkedIn para estar al día sobre la IA conversacional ⭐️
Actualmente soy el Evangelista Jefe @HumanFirst. Exploro y escribo sobre todas las cosas en la intersección de la IA y el lenguaje; que van desde LLMs, Chatbots, Voicebots, Marcos de Desarrollo, Data-Centric espacios latentes y más.