[🛠] Devlog do Keymory #9: implementação de Diary to Chat, otimização do sistema de AI Comment
✨ Resumo do GPT
Implementei o Diary to Chat, resolvi problemas que apareceram durante o processo de geração e corrigi erros de pontuação emocional e configuração de personagem no sistema de AI Comment.
💻 Diário de desenvolvimento
⏰ Tarefas de hoje
- ✅ Custom Function - ajudar a criar
systemPromptTemplate(responsável principal: KSK)- ✅ Revisar os parâmetros adicionados e a estrutura interna da função
- ✅ Testar se a Custom Function -
getAICommentestá realmente sendo aplicada- ✅ Confirmar se os valores de entrada são refletidos corretamente
- ✅ Confirmar se o valor de saída sai corretamente como String
- ✅ Chat Page - Create New Chat: aplicar o prompt do sistema (responsável principal: KSK)
- ✅ OpenAI API Call (createChatCompletion)
- Input: System Prompt(Chat)
- Output: New Chat Message by AI($.choices[0].message.content)
- Additional Actions: Create New Chat, Create New Message
- ✅ OpenAI API Call (createChatCompletion)
- ✅ DiaryPage - Create New Chat by Diary: criar New Chat com base no conteúdo do diário (responsável principal: KSK)
- ✅ OpenAI API Call (createDiaryComment)
- Input: Diary Content, System Prompt(AI Comment)
- Output: AI Comment($.choices[0].message.content)
- ✅ OpenAI API Call (createDiarySummary)
- Input: Diary Content, AI Comment, System Prompt(Diary Summary)
- Output: Diary Summary($.choices[0].message.content)
- ✅ OpenAI API Call (createChatFromDiary)
- Input: Diary Summary, System Prompt(Chat From Diary)
- Output: New Chat Message by AI($.choices[0].message.content)
- Additional Actions: Create New Chat, Create New Message
- ✅ OpenAI API Call (createDiaryComment)
- ✅ (Issue) Create New Chat by Diary: só funcionava depois de salvar apenas o diário, voltar para a Home, entrar de novo na página do diário e então criar o New Chat.
- Causa do problema
- Eu estava puxando uma variável Output de outra action chain
- A prevenção contra Unexpected Null Value não estava configurada
- O JSON Path não estava especificado corretamente
- Eu tinha definido
tmpDiariesDocForNewChatcomo Page State e atribuído o diary Document ali.- Mais exatamente,
- atribuía o
diariesDocpassado como Page Paramater, ou - atribuía o
newDiariesDoccriado quando o botão Save era pressionado.
- atribuía o
- Mas, sempre que eu apertava o botão
Save Diary and Chat with AI, o app travava.- Olhando com F12, vi que uma Exception era lançada por erro de
Unexpected Null Value. - Olhando o Debug Pannel,
tmpDiariesDocForNewChatestava definido comoNull.
- Olhando com F12, vi que uma Exception era lançada por erro de
- Troquei de novo o Page State de
tmpDiariesDocForNewChatparatmpDiariesDocRefForNewChat. (Document -> Document Reference)- Depois de ajustar as Actions corretamente com base em Document Reference, finalmente funcionou!
- Mais exatamente,
- 💡 O que aprendi: em uma Action Chain, atribuir um valor ao Page State e chamar esse valor logo em seguida pode causar Unexpected Null Value. Vamos usar bastante Document Reference em vez de Document. Claro, se eu fizer muitos Read Document com Backend Query, talvez role queda de performance… mas isso também pode ser resolvido fazendo o suficiente no OnPageLoad Event ou na criação das principais Action Chains.
- Causa do problema
- ✅ (Issue) Ao gerar AI Comment, as vezes a pontuação emocional do usuário ficava sendo salva como 0.
- Reforcei algo como “Principalmente, faça exatamente o ‘5. cálculo da fórmula ponderada’. A pontuação emocional do usuário nunca é 0.” e os casos em que ele escrevia 0 diminuíram. (Não sumiram.)
- Por enquanto, vamos seguir.
- ✅ (Issue) ChatPage: o personagem não sabe informações sobre si mesmo!
- Parece que se corrigiu sozinho enquanto eu resolvia os problemas relacionados ao Save. Maravilha.
- ✅ (Issue) ChatPage: o personagem está ignorando a “lista de perguntas de acompanhamento”!
- Parece que se corrigiu sozinho enquanto eu resolvia os problemas relacionados ao Save. Maravilha.
- ✅ (Issue) Ao passar para a ChatPage, a barra de navegação inferior desaparece.
- Always Show Nav bar Toggle On
- ✅ (Issue) No Drawer da ChatPage, a imagem do personagem aparece diferente.
- Issue causado por uma lógica antiga mal feita de salvar AI Comment. Como é um problema que só acontece em chats antigos, resolvido deletando aquele Chat document
💯 Resumo do que fiz
- Melhoria da lógica de criação de Chat
- Revisei a estrutura de parâmetros de
systemPromptTemplateegetAIComment - Apliquei o prompt do sistema em Create New Chat e otimizei a OpenAI API Call
- Organizei o fluxo de criação de New Chat baseado em Diary: AI Comment → resumo do diário → criação do Chat
- Revisei a estrutura de parâmetros de
- Otimização do sistema de AI Comment
- Corrigi o problema em que a pontuação emocional era salva como 0
- Resolvi o problema em que a AI não reconhecia as informações do personagem
- Melhorei o caso em que a lista de perguntas de acompanhamento era ignorada
- Correção de issues e melhoria de performance
- Corrigi o desaparecimento da barra de navegação ao ir para a ChatPage
- Corrigi a inconsistência da imagem do personagem ajustando a lógica de salvamento do AI Comment
- Usei Document → Document Reference para prevenir Unexpected Null Value
🎯 Tarefas futuras
Clique para ver detalhes
- ❔ (Issue) DiaryPage: se a resposta do AI Comment ainda não foi recebida, a tela avança com o personagem sem configuração.
- Por enquanto, remendar exibindo um alerta: “Você precisa receber um Comment da AI antes de começar o chat!”
-
❔ (Issue) DiaryPage: usar visualizador de markdown para a resposta do AI Comment (prevenir overflow: Container Height)
-
❔ ChatPage: alinhar o conteúdo da conversa do usuário à direita
-
❔ DiaryPage: mudar Emoji de expressão facial e cor de acordo com o valor do Mood Slider
- ❔ DiaryPage: Go to Linked Chat
- ❔ ChatPage: Go to Linked Diary
- Ao salvar no Diary Document da DiaryPage, também precisa adicionar o valor de Chat Reference como Field no Diary Document DB. (linkedChat)
- No Chat Document da ChatPage, naturalmente também precisa adicionar o valor de Diary Reference como Field no Chat Document DB. (linkedDiary)
- ❔ ChatPage - Create New Diary: criar New Diary com base no conteúdo da conversa (usar a lógica de Go to Linked Diary)
- ❔ 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)
- ❔ OpenAI API Call (createChatSummary)
- ❔ MoodPage(superior) - Mood Calendar
- ❔ Permitir conferir o número de posts escritos por data
- ❔ Ao clicar em uma data, mover para aquela data
- ❔ MoodPage(inferior) - Mood stats
- ❔ Exibir dados estatísticos sobre o mês em foco
- ❔ Exibir o comentário da AI sobre os dados estatísticos exibidos
- ❔ Exibir dados estatísticos sobre o mês em foco
- ❔ HomeFeedPage - importar e aplicar flutter_slidable:4.0.0
-
❔ HomeFeedPage: ao deslizar FeedCardDiary para a esquerda/direita, chat/editar/excluir
-
❔ Chat/Diary: GPT Streaming API
- ❔ ChatPage - implementar primeira mensagem ativa da AI (Alarm/Notification)
- O núcleo do prompt do sistema de chat é a proatividade.
- Para ficar mais realista, talvez seja bom passar também create_date of diary/chat, para mencionar datas como “ontem”.
- Referência de implementação de Alarm
- O núcleo do prompt do sistema de chat é a proatividade.
- ❔ DiaryPage: adicionar Choice Chips de palavras-chave emocionais detalhadas e configurar integração com DB
- ❔ DiaryPage - AI Comment: alterar inputs como Choice chips e mood slider para se adequarem ao
AI Comment System Prompt.- ❔ **
diárioanterior ouhistórico de conversainteiro (dívida técnica remendada) - ❔ informações básicas do usuário: nome, gênero, MBTI, …
- ❔ palavras-chave emocionais detalhadas: alegre, triste, …
- ❔ configuração de personagem: Somi, Sena, Minhyuk
- ❔ pontuação emocional: 1~100 pontos
- ❔ formato da resposta: Healing, Suggestion, Informative
- ❔ comprimento da resposta: curto, normal, detalhado
- is New Chat
- Como as messages desse Chat estão sendo criadas pela primeira vez, definir
is_initial = trueno primeiro message document e enfiar todos os prompts do sistema ali.- is_initial = false
- Limitação: se eu colocar o prompt do sistema no primeiro message document, fica difícil modificar no meio da conversa, mas é possível. Se existe um document com is_initial = true e ele foi modificado, é só apagar esse document e colocar de novo. Como, eu não sei.
- Como as messages desse Chat estão sendo criadas pela primeira vez, definir
- ❔ **
- ❔ DiaryPage - AI Comment: concluir CRUD
- ❔ remover field tmp_ai_comment e usar doc_ref
-
❔ DiaryPage - Drawer - ChatHistoryListTile: order by updated_time
-
❔ DiaryPage - importar e aplicar Interactive Slider
-
❔ HomeFeedPage: implementar função Search Diary
-
❔ AuthPage: implementar Google Login
- ❔ HomeFeedPage - Bottom Sheet (
+Button): permitir escolher 1 entre várias opções- novo diário: Go to DiaryPage
- registro emocional: Go to MoodPage
- ❔ MoodPage(popup): CRUD do slider de configuração de Mood
- Create
- Read
- Update
- Delete
- ❔ HomeFeedPage - ListView - exibir FeedCardMood
-
❔ HomeFeedPage - ListView: ordenar FeedCardDiary, FeedCardMood, FeedCardChat em ordem cronológica (usando Cloud Function)
-
❔ Criar MoodEditPage entre HomeFeedPage e DiaryPage: mover widgets como MoodSlider, MoodKeywordsRate(5~1), MoodDescription etc.
-
❔ (Issue) Ao criar tmpGetAIComment, as palavras-chave emocionais selecionadas pelo usuário não estão sendo consideradas.
- ❔ Extrair e instalar o APK da versão final para apresentação até
qua 2025.2.5
💭 Diário
Issues explodiram sem parar e minha cabeça quase foi para longe… Será que minha estratégia de “mesmo que a dívida técnica se acumule, se eu implementar primeiro, minha habilidade continua crescendo e depois eu consigo quitar a dívida!” chegou ao limite… ou ainda foi uma decisão eficiente…
Ah, sei lá~ Isso não é o que importa agora. Não tem tempo de verdade! Remendo pra frente.
✨ Comentário do GPT-4o (KPT)
✅ Pontos positivos (Keep)
- 🛠 Organização da lógica de criação de Chat: Foi bom organizar e resolver vários problemas que surgiam no processo de criação de New Chat!
- 🎭 Melhoria do sistema de AI Comment: Foi impressionante corrigir erros de pontuação emocional e configuração de personagem, induzindo respostas mais precisas da AI.
- 🔍 Evolução na capacidade de debugging: Resolver o problema de Unexpected Null Value e aprender a usar Document Reference vai ajudar muito daqui para frente.
❌ Pontos a melhorar (Problem)
- ⏳ Muito tempo gasto resolvendo issues: O debugging demorou mais do que o esperado, então talvez tenha faltado tempo para o desenvolvimento das features originalmente planejadas.
- 🔄 Aumento da dívida técnica: A estratégia de implementar rápido está acumulando dívida técnica, então uma limpeza posterior parece necessária.
- 📋 Documentação insuficiente: Se você organizar melhor os principais processos de resolução de problemas, vai conseguir resolver issues semelhantes mais rápido quando elas aparecerem de novo.
🔄 O que tentar (Try)
- 📌 Analisar padrões de issues: Identificar problemas que se repetem e pensar em como melhorar o padrão de desenvolvimento.
- 📝 Definir uma estratégia de gestão da dívida técnica: No curto prazo, soluções rápidas são necessárias, mas no longo prazo seria bom criar um roadmap de manutenção e otimização.
- 📖 Criar o hábito de registrar resoluções de problemas: Documente os principais processos de resolução de issues para economizar tempo de desenvolvimento no futuro.
🏁 Conclusão
Hoje foi um dia de melhorar a lógica de criação de Chat e corrigir erros no sistema de AI Comment, aumentando a estabilidade. O debugging levou mais tempo do que o esperado, mas o aprendizado também foi grande! Daqui para frente, vamos pensar em uma estratégia de desenvolvimento mais eficiente enquanto gerenciamos a dívida técnica. 🚀🔥
Deixe um comentário