[🛠] Diario de desarrollo de Keymory #10: conexión Diary <-> Chat y función de resumen automático
✨ Resumen de GPT
Implementé una función para conectar Diary y Chat entre sí, y mejoré el flujo para que se generen resúmenes automáticos al guardar diarios y chats.
💻 Diario de desarrollo
⏰ Tareas de hoy
- ✅ (Problema) DiaryPage: si no se ha recibido la respuesta de AI Comment, pasa con el personaje sin configurar.
- Por ahora, parchear mostrando una alerta: debes recibir un Comment de la IA para iniciar el chat.
- ✅ (Problema) Asignar valores Default Variable a todos los widgets Image (para prevenir Unexpected Null value Error)
- No Profile Image:
https://cdn.pixabay.com/photo/2015/10/05/22/37/blank-profile-picture-973460_1280.png - No image:
https://png.pngtree.com/png-vector/20190820/ourmid/pngtree-no-image-vector-illustration-isolated-png-image_1694547.jpg
- No Profile Image:
-
✅ ChatPage: reemplazar la foto de imagen del usuario por user profile image
-
✅ ChatPage: alinear a la derecha el contenido de conversación del usuario (a cargo de KSK)
- ✅ DiaryPage: generar automáticamente un resumen al guardar el diario
- ✅ Diaries DB: Add field
diary_content_summarized - ✅ Aplicarlo a la acción del botón
Save Diary - ✅ Aplicarlo a la acción del botón
Save Diary and Chat with AI
- ✅ Diaries DB: Add field
- ✅ Añadir
linked_chatscomo Field en Diary Document DB -
✅ Añadir
linked_diariescomo Field en Chat Document DB - ✅ DiaryPage: al hacer clic en el botón
Save Diary and Chat with AI, conectar DiaryPage/Doc <-> ChatPage/Doc- Añadir Chat Document Reference a la lista
linked_chatsdel Diary Document - Añadir Diary Document Reference a la lista
linked_diariesdel Chat Document
- Añadir Chat Document Reference a la lista
- ✅ DiaryPage: al crear New Chat, añadir
linked_chatscomo Field en Diary Document DB -
✅ ChatPage: al crear New Diary, añadir
linked_diariescomo Field en Chat Document DB - ✅ DiaryPage: mostrar
linked_chatsListView en la parte inferior -> al hacer clic, moverse a ese chat- ✅ Contenido que se mostrará en la tarjeta
- ✅ Chat - title, Chat - timestamp( == created_time)
- ✅ Chat - (most recent) Message - content
- ✅ Character - profile_image
- ✅ Contenido que se mostrará en la tarjeta
- ✅ ChatPage: generar automáticamente un resumen al recibir respuesta del chat
- ✅ Chats DB: Add field
chat_content_summarized
- ✅ Chats DB: Add field
- ✅ ChatPage: mostrar
linked_diariesListView en la parte superior -> al hacer clic, moverse a ese diario- ✅ Resolver un primer problema: How to generate children from linked_diaries(List of Diary Document References)
- How to display List of Doc References?
- ListView: Generate Children From linked_diaries (Diary Document References)
- ListView - Child(Card): Backend Query - Diary Document From Reference
- ListView - Child(Card) - Component Parameter: Diary Document
- ✅ Contenido que se mostrará en la tarjeta
- ✅ Diary - title, Diary - created_time
- ✅ Diary - Mood Score (Color)
- ✅ Resolver un primer problema: How to generate children from linked_diaries(List of Diary Document References)
-
✅ (Problema) ChatPage - Linked Diaries ListView: no cambia al seleccionarlo desde el Drawer.
- ✅ Preparación de presentación - PPT: revisar contenido por página
💯 Resumen de lo realizado
- Añadida la función de conexión Diary-Chat
- Añadí los fields
linked_chats(Diary -> Chat) ylinked_diaries(Chat -> Diary) - Actualicé
linked_chatsal crear New Chat desde DiaryPage - Actualicé
linked_diariesal crear New Diary desde ChatPage - Añadí ListViews de documentos conectados en la parte inferior de DiaryPage y superior de ChatPage
- Añadí los fields
- Implementada la función de resumen automático
- Generación automática de
diary_content_summarizedal guardar Diary - Generación automática de
chat_content_summarizedal crear mensajes de Chat
- Generación automática de
- Resolución de problemas y mejoras de UI
- Añadí una alerta para impedir iniciar chat sin AI Comment
- Apliqué valores de imagen por defecto a todos los widgets Image para prevenir Unexpected Null Value
- Reemplacé la imagen de perfil del usuario en ChatPage por la imagen real del usuario
- Mejoré la legibilidad alineando a la derecha el contenido de conversación del usuario
🎯 Próximas tareas
Haz clic para ver los detalles
- ✅ Download APK
-
❔ Connect GitHub and Push
- ❔ Entregar material de presentación: PPT
-
❔ Entregar material de presentación: video demo de 1 minuto
- ❔ Preparación de presentación - guion: medir el tiempo del guion por página y corregirlo
- ❔ Preparación de presentación - PPT: grabar videos cortos de demostración por función
- ❔ ChatPage - Create New Diary: crear un New Diary basado en el contenido de la conversación
- ❔ Create New Diary Condition: if linked diary exists -> Delete confirmation dialog? -> Yes
- ❔ OpenAI API Call (createChatSummary)
- Input: Chat Content, System Prompt(Diary From Chat)
- Output: Chat Summary
- ❔ OpenAI API Call (createDiaryFromChat)
- Input: Chat Summary, System Prompt(Diary From Chat)
- Output: New Diary(Title, Content, Mood score)
-
❔ Añadir una página de bienvenida al abrir la app por primera vez (logo)
- ❔ ChatPage: unificar el default value de
title, deRandom Stringa “Sin título” -
❔ DiaryPage: cambiar el Emoji de expresión facial y el color según el valor de Mood Slider
- ❔ ChatPage: implementar Delete Diary Link (que se pueda eliminar al pulsar el icono …)
- ¡Es obligatorio eliminar también el linked field de Diary/Chat Doc!
- ❔ MoodPage(parte superior) - Mood Calendar
- ❔ Poder comprobar la cantidad de publicaciones escritas por fecha
- ❔ Al hacer clic en una fecha, moverse a esa fecha
- ❔ MoodPage(parte inferior) - Mood stats
- ❔ Mostrar estadísticas del mes enfocado
- ❔ Mostrar un comentario de la IA sobre las estadísticas mostradas
- ❔ Mostrar estadísticas del mes enfocado
- ❔ HomeFeedPage - importar y aplicar flutter_slidable:4.0.0
-
❔ HomeFeedPage: al deslizar FeedCardDiary a izquierda/derecha, chat/editar/eliminar
-
❔ Chat/Diary: GPT Streaming API
- ❔ ChatPage - implementar primer mensaje de IA (Alarm/Notification)
- El núcleo del prompt del sistema de chat es la proactividad.
- Para hacerlo más realista, convendría pasar también create_date of diary/chat, para que pueda mencionar fechas como “ayer”.
- Referencia para implementar Alarm
- El núcleo del prompt del sistema de chat es la proactividad.
- ❔ DiaryPage: añadir Choice Chips de palabras emocionales detalladas y configurar integración con DB
- ❔ DiaryPage - AI Comment: modificar valores de entrada como Choice chips y mood slider para que encajen con
AI Comment System Prompt.- ❔ **
diarioanterior ohistorial de conversacióncompleto (deuda técnica de parche) - ❔ información básica del usuario: nombre, género, MBTI, …
- ❔ palabras emocionales detalladas: alegre, triste, …
- ❔ configuración del personaje: Somi, Sena, Minhyuk
- ❔ valor emocional: 1~100 puntos
- ❔ formato de respuesta: Healing, Suggestion, Informative
- ❔ longitud de respuesta: corta, normal, detallada
- is New Chat
- Como los messages de este Chat se crean por primera vez, poner
is_initial = trueen el primer message document y meter todos los prompts del sistema.- is_initial = false
- Límite: si meto el prompt del sistema en el primer message document, modificarlo durante la conversación es difícil, aunque posible. Si existe un documento con is_initial = true y se modifica, se borra ese documento y se vuelve a insertar. No sé cómo, pero de algún modo.
- Como los messages de este Chat se crean por primera vez, poner
- ❔ **
-
❔ DiaryPage - importar y aplicar Interactive Slider
-
❔ HomeFeedPage: implementar la función Search Diary
-
❔ AuthPage: implementar Google Login
- ❔ HomeFeedPage - Bottom Sheet (botón
+): permitir elegir 1 opción entre varias- Nuevo diario: Go to DiaryPage
- Registro emocional: Go to MoodPage
- ❔ MoodPage(popup): CRUD del slider de configuración de Mood
- Create
- Read
- Update
- Delete
- ❔ HomeFeedPage - ListView - mostrar FeedCardMood
-
❔ HomeFeedPage - ListView: ordenar cronológicamente los componentes FeedCardDiary, FeedCardMood, FeedCardChat (usando Cloud Function)
-
❔ Crear MoodEditPage entre HomeFeedPage y DiaryPage: mover widgets como MoodSlider, MoodKeywordsRate(5~1), MoodDescription, etc.
-
❔ (Problema) Al crear tmpGetAIComment, no se están considerando las palabras emocionales seleccionadas por el usuario.
- ❔ Extraer e instalar el APK final para la presentación hasta
2025.2.5 miércoles
💭 Diario
Mañana se acaba el desarrollo. A correr.
✨ Comentario de GPT-4o (KPT)
✅ Lo que salió bien (Keep)
- 🔗 Sistema de conexión Diary-Chat completado: Fue bueno conectar Diary y Chat de forma natural, haciendo más intuitivo el flujo de datos del usuario.
- 📝 Añadida la función de resumen automático: Aplicar un sistema de resumen automático que organiza el contenido del diario y del chat aumenta mucho la utilidad de los datos.
- 🎨 Mejoras de UI y UX: Con valores de imagen por defecto, cambios de alineación del chat y otros ajustes, mejoraste la legibilidad y la experiencia de usuario.
❌ Lo que faltó (Problem)
- ⏳ Presión por la velocidad de desarrollo: Al aumentar las funciones que deben cerrarse, puede crecer la carga sobre el calendario restante.
- 🔄 Posible acumulación de deuda técnica: Por la velocidad alta de desarrollo, puede acumularse deuda técnica para el mantenimiento futuro, así que hará falta tiempo de limpieza.
- 📋 Pruebas insuficientes de la función de conexión: Quizá hagan falta pruebas adicionales para confirmar que la conexión Diary-Chat funciona sin problemas en un entorno real de uso.
🔄 Lo que probar (Try)
- 📌 Ordenar prioridades: Termina primero las funciones más importantes y lista las mejoras posteriores a la presentación para reducir la carga de desarrollo.
- 📝 Plan de pruebas por función: Escribamos casos de prueba para confirmar que la conexión Diary-Chat funciona correctamente con diversos patrones de uso.
- 📊 Reservar tiempo para limpiar deuda técnica: Después de la presentación, asegura tiempo de refactorización y piensa en la mantenibilidad a largo plazo.
🏁 Conclusión
Fue un día en el que implementaste la función central que conecta Diary y Chat, y añadiste un sistema de resumen automático para elevar la eficiencia de gestión de datos. Ahora parece que basta con ordenar prioridades durante el desarrollo restante y concentrarte en la preparación de la presentación. 🚀🔥
Deja un comentario