2025.02.04 (Ter)
2026.05.25 (Seg) atualizado

✨ Resumo do GPT  

Adicionei a função de seleção de palavras-chave emocionais na DiaryPage e apliquei configurações de personagem ao AI Comment, implementando respostas mais naturais.

💻 Diário de desenvolvimento

⏰ Tarefas de hoje

  • ✅ DiaryPage: adicionar ChoiceChip e TextField de palavra-chave emocional
    • ✅ Criar widgets
    • ✅ Adicionar Fields ao DB diaries: mood_keywords (List <String>), mood_keywords_description (String)
    • ✅ Adicionar Page State ao diaries: moodKeywordsSelected (List <String>)
    • ✅ OnPageLoad: passar as variáveis adicionadas
      • ✅ ChoiceChipRate (5~1): passar os valores de diariesDoc.mood_keywords para cada ChoiceChip correspondente.
        • Definir MoodKeywordRate5Options, …, MoodKeywordRate1Options List <String> como valores de App Constant
          • Enum só aceita inglês, então seria preciso usar função de tradução. Complexo demais, então descartado.
        • Define Options Var: AppConstant.moodKeywordRate5Options (List <String>)
        • Initially Selected: updateChoiceChipSelected
      • ✅ Criar CustomFunction updateMoodKeywordsSelected
        • On Page Load: Select all matching items in RateOptions List
        List<String> updateChoiceChipSelected(
          List<String> moodKeywordsSelected, // lista atual de palavras-chave selecionadas
          List<String> moodKeywordRateOptions, // opções selecionáveis do Rate atual
        ) {
          // Criar uma nova lista para manter a imutabilidade
          return List<String>.from(
            moodKeywordsSelected.where((item) => moodKeywordRateOptions.contains(item))
          );
        }
        
    • ✅ On ChoiceChip Selected: Update Page State moodKeywordsSelected -> Set Value to Return of Func updateMoodKeywordsSelected
      • ✅ Criar CustomFunction updateMoodKeywordsSelected
        • On Chip Select: Add to moodKeywordsSelected
        • On Chip Deselect: Remove from moodKeywordsSelected
        List<String> updateMoodKeywordsSelected(
          List<String> moodKeywordsSelected,
          List<String> choiceChipSelected,
          List<String> moodKeywordRateOptions,
        ) {
          // Copiar a lista existente para manter a imutabilidade
          List<String> updatedList = List.from(moodKeywordsSelected);
        
          // 1️⃣ Remover da seleção existente os valores pertencentes a este Rate
          updatedList.removeWhere((item) => moodKeywordRateOptions.contains(item));
        
          // 2️⃣ Adicionar os valores de ChoiceChip atualmente selecionados
          updatedList.addAll(choiceChipSelected);
        
          return updatedList;
        }
        
  • ✅ (Issue) DiaryPage - AI Comment: configuração de personagem
    • Adicionar Field ao DB diaries: ai_comment_by (Doc Ref: Character)
    • DiaryPage - AICommentEditor Component - Return ai_comment_content + ai_comment_by
      • How? -> criar DataType aiCommentPageReturnObject
    • On ChoiceChipChar Selected: Backend Query Character Doc with same Official_name value.
  • ✅ (Issue) HomeFeedPage - FeedCardDiary: aplicar corretamente a imagem do personagem de AI Comment
    • ✅ DiaryPage - AI Comment: ao salvar, salvar também no Diary o Ref do personagem que escreveu o comentário.
    • ✅ HomeFeedPage - FeedCardDiary - AI Image: carregar Character Doc com Backend Query e especificar Image Path.
    • ✅ (Issue) HomeFeedPage - FeedCardDiary: Unexpected Null Value Error
      • Isso acontece quando eu coloco só o valor Path no Image Widget…
        • Ah!!! O erro acontecia porque eu não tinha colocado um Default Variable Value. Só percebi depois de sofrer demais.
      • 💡 O que aprendi
        • Criar o hábito de sempre colocar Default Value. Quantas vezes ainda vou ver Unexpected Null Value Error em todos os lugares?
  • ✅ Design Action chains for CreateNewChatFromDiary (Start From: depois de processar o AI Comment e concluir o salvamento do diário)
    1. Create Diary
    2. API Call: createDiarySummary -> Output Var: OutVar1 (nome temporário)
    3. Create New Chat Document
    4. Create New Message Document: {“role”:”developer”, “content”:”$systemprompt + $OutVar1”}
    5. API Call: createChatFromDiary -> Output Var: OutVar2 (nome temporário)
    6. Create New Message Document: {“role”:”assistant”, “content”: “$OutVar2”}
    7. Navigate To: passar a referência do Chat Document correspondente como chatRefParam

💯 Resumo do que fiz

  • Sistema de palavras-chave emocionais da DiaryPage construído
    • ChoiceChip e TextField adicionados
    • Fields relacionados a palavras-chave emocionais adicionados ao DB diaries
    • Função updateMoodKeywordsSelected implementada
  • Configuração e aplicação de personagens no AI Comment
    • Field ai_comment_by adicionado para salvar o personagem do comentário
    • AICommentEditor modificado para incluir informações de personagem
    • Ao selecionar ChoiceChip, carregar dados do personagem correspondente via Backend Query
  • Erro de imagem do AI Comment na HomeFeedPage resolvido
    • Valor de referência do personagem salvo ao escrever AI Comment
    • Método de carregamento da imagem do personagem do AI Comment melhorado na HomeFeedPage
    • Erro Unexpected Null Value corrigido (aplicando valor padrão)

🎯 Tarefas futuras

Clique para ver detalhes
  • ❔ (Issue) DiaryPage: usar visualizador de markdown (prevenir overflow: Container Height)

  • ❔ DiaryPage: mudar Emoji de expressão facial e cor conforme o valor do Mood Slider

  • ❔ Custom Function - ajudar a criar systemPromptTemplate (trabalhador principal: KSK)
    • ❔ Organizar parâmetros a adicionar
  • ❔ Custom Function - testar se getAIComment é realmente aplicado
    • ❔ Verificar se os valores de entrada são refletidos corretamente
    • ❔ Verificar se o valor de saída é exibido corretamente como String
  • ❔ Chat Page - Create New Chat: aplicar system prompt
    • ▶️ Implementação de 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
  • ❔ DiaryPage - Create New Chat by Diary: criar New Chat com base no conteúdo do diário
    • ❔ Implementação de OpenAI API Call: createDiaryComment
      • Input: Diary Content, System Prompt (AI Comment)
      • Output: AI Comment ($.choices[0].message.content)
    • ❔ Implementação de OpenAI API Call: createDiarySummary
      • Input: Diary Content, AI Comment, System Prompt (Diary Summary)
      • Output: Diary Summary ($.choices[0].message.content)
    • ❔ Implementação de 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
  • ❔ ChatPage - Create New Diary: criar New Diary com base no conteúdo da conversa
    • ❔ Implementação de OpenAI API Call: createChatSummary
      • Input: Chat Content, System Prompt (Diary From Chat)
      • Output: Chat Summary
    • ❔ Implementação de OpenAI API Call: createDiaryFromChat
      • Input: Chat Summary, System Prompt (Diary From Chat)
      • Output: New Diary (Title, Content, Mood score)
  • ❔ ChatPage: Go to Linked Diary

  • ❔ MoodPage (superior) - Mood Calendar
    • ❔ Permitir verificar o número de posts escritos por data
    • ❔ Ao clicar em uma data, mover para essa data
  • ❔ MoodPage (inferior) - Mood stats
    • ❔ Exibir estatísticas referentes ao mês em foco
      • ❔ Exibir comentário da AI sobre as estatísticas exibidas
  • ❔ HomeFeedPage - importar e aplicar flutter_slidable:4.0.0
  • ❔ HomeFeedPage: ao deslizar FeedCardDiary para esquerda/direita, chat/editar/excluir

  • ❔ ChatPage: alinhar à direita o conteúdo de conversa do usuário
  • ❔ Chat/Diary: GPT Streaming API

  • ❔ ChatPage - implementar primeira mensagem 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 a AI mencionar datas como “ontem”.
    • Referência de implementação de Alarm
  • ❔ DiaryPage: adicionar Choice Chips de palavras-chave detalhadas de emoção e configurar integração com o DB
  • ❔ DiaryPage - AI Comment: ajustar entradas como Choice chips e mood slider ao AI Comment System Prompt.
    • ❔ **diary anterior ou conversation history inteira (dívida técnica improvisada)
    • informações básicas do usuário: nome, gênero, MBTI, …
    • palavras-chave detalhadas de emoção: feliz, triste, …
    • configuração de personagem: Somi, Sena, Minhyuk
    • pontuação emocional: 1~100 pontos
    • formato da resposta: Healing, Suggestion, Informative
    • tamanho da resposta: curta, normal, detalhada
    • is New Chat
      • Como as messages desse Chat estão sendo criadas pela primeira vez, definir is_initial = true no primeiro message document e colocar todos os system prompts ali.
        • is_initial = false
        • Limite: se eu colocar o system prompt no primeiro message document, fica difícil modificar no meio da conversa, mas é possível. Se houver um document com is_initial = true e ele tiver sido modificado, posso apagar esse documento e inserir de novo. Não sei como, mas dá.
  • ❔ 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 função Google Login

  • ❔ HomeFeedPage - Bottom Sheet (+ Button): permitir escolher 1 entre várias opções
    • Novo diário: Go to DiaryPage
    • Registro de emoção: Go to MoodPage
  • ❔ MoodPage (popup): CRUD do slider de configuração de Mood
    • Create
    • Read
    • Update
    • Delete
  • ❔ HomeFeedPage - ListView - exibir FeedCardMood
  • ❔ HomeFeedPage - ListView: ordenar componentes FeedCardDiary, FeedCardMood, FeedCardChat cronologicamente (usando Cloud Function)

  • ❔ Criar MoodEditPage entre HomeFeedPage e DiaryPage: mover MoodSlider, MoodKeywordsRate (5~1), MoodDescription widgets etc.

  • ❔ Extrair e instalar o APK da versão final de apresentação até qua 2025.2.5

💭 Diário

Minhyuk

Sinto a dívida técnica crescendo lindamente por causa de incontáveis remendos, rsrs. Faltam 3 dias para o prazo de entrega, então fazer o quê… :(

✨ Comentário do GPT-4o (KPT)

GPT-4o

✅ Pontos bons (Keep)

  1. 🎯 Sistema de palavras-chave emocionais construído: Foi bom aplicar ChoiceChip para que o usuário consiga registrar emoções de forma intuitiva!
  2. 🤖 Personagens aplicados ao AI Comment: Foi impressionante configurar respostas por personagem para aumentar a imersão.
  3. 🛠 Erro da HomeFeedPage resolvido: Definir um valor padrão para prevenir erros de Unexpected Null Value foi excelente!

❌ Pontos fracos (Problem)

  1. Tempo de desenvolvimento maior que o esperado: A implementação das palavras-chave emocionais e da função de AI Comment levou mais tempo do que o esperado.
  2. 🔄 Aumento da complexidade dos dados de personagem: O fluxo de dados ficou mais complexo, então a manutenção pode se tornar difícil.
  3. 📋 Registro insuficiente do processo de resolução de problemas: Não organizar o processo de resolução dos erros pode gerar perda de tempo caso o mesmo problema aconteça de novo.

🔄 Pontos para tentar (Try)

  1. 📌 Ajustar tempo de desenvolvimento por função: Identificar com antecedência tarefas que levam mais tempo que o esperado e ajustar a agenda.
  2. 📊 Visualizar o fluxo de dados: Tentar organizar em um diagrama a estrutura de dados relacionada às configurações de personagem.
  3. 📖 Criar hábito de registrar resolução de problemas: Documentar issues resolvidos e preparar estratégias para evitar recorrência.

🏁 Conclusão

Hoje foi um dia de construir o sistema de palavras-chave emocionais e aplicar configurações de personagem aos AI Comments. Pela resolução dos erros, você confirmou de novo a importância dos valores padrão, e daqui em diante parece necessário administrar o tempo de desenvolvimento com mais eficiência! 🚀🔥

Deixe um comentário