Intenté añadir un chat de IA a mi aplicación y me topé con un muro
Intenté añadir un asistente de chat con IA a mi herramienta de gestión de proyectos. Quería que los usuarios pudieran hacer preguntas sobre tareas atrasadas o notas de reuniones. Parecía fácil. Pensé que solo tendría que llamar a una API y listo. Me equivoqué.
Después de 15 mensajes, la IA se volvió lenta e incoherente. La API empezó a lanzar errores porque la conversación era demasiado larga. Usé GPT-4 con un límite de 8k tokens. Cada mensaje incluía descripciones y notas largas. El historial crecía demasiado rápido.
Intenté tres soluciones diferentes:
- Truncar el historial: Solo mantenía los últimos mensajes. Esto mejoraba la velocidad, pero la IA olvidaba todo lo demás.
- Resumen: Le pedía a una IA que resumiera el chat cada 5 mensajes. Esto ayudaba a la memoria, pero aumentaba mis costes y la latencia.
- Puntuación de relevancia: Intenté mantener solo los mensajes más relevantes. Esto requería un vector store y añadía demasiada complejidad.
Me di cuenta de que necesitaba una mejor estrategia. Me decidí por dos métodos: streaming y una ventana de contexto fija.
El streaming hace que la aplicación se sienta rápida. Los usuarios ven aparecer el texto al instante en lugar de esperar la respuesta completa. Utilicé Server-Sent Events para enviar fragmentos de texto a medida que llegaban.
También dividí mi contexto en tres partes:
- System prompt: Un conjunto fijo de instrucciones.
- Contexto dinámico: Actualizaciones recientes del proyecto y estados de las tareas.
- Historial de conversación: Una ventana deslizante de mensajes recientes.
No envío todo el historial cada vez. Solo envío lo suficiente para responder a la pregunta actual. Esto redujo el tamaño de mi payload en un 40%. Me ahorró dinero y mejoró la velocidad.
Si construyes funciones de IA, recuerda: El streaming te da velocidad. Una buena estrategia de contexto te aporta inteligencia.
¿Cómo gestionas la memoria de la conversación en tus aplicaciones? ¿Utilizas ventanas deslizantes o resúmenes?