[🛠] Devlog do Keymory #4: Mood slider, OpenAI API
✨ Resumo do GPT
Um dia em que melhorei funções importantes do Keymory e refinei a integração com AI e a estrutura de dados, mas senti na pele a realidade da falta de tempo.
💻 Diário de desenvolvimento
⏰ Tarefas de hoje
- ✅ DiaryPage - Mood: concluir o slider de configuração de Mood
- ✅ HomeFeedPage - ListView - FeedCardDiary: exibir Mood Color na borda
- Resolvido com Box Shadow do Container
- ✅ OnboardingPage - salvar depois de inserir informações básicas adicionais do usuário
- ✅ Adicionar DB Fields: nome(display_name), gênero(gender), MBTI(mbti), …
- ✅ HomeFeedPage - OnPageLoad: Navigate to OnboardingPage quando informações obrigatórias como display_name e gender não tiverem sido inseridas
- ✅ Field Type - Enum vs String: é mais fácil gerenciar quando Field Type é definido como String. Decidido usar Enum apenas em Option Value Generation.
- ✅ OpenAI API Request -> corrigir para que o valor message do Response body seja exibido normalmente
- ✅ Discussão e experimento: onde armazenar informações dos personagens de AI? (OpenAI API Assistant vs FireStore Character Collection)
- Resultado: armazenar em FireStore Characters Collection.
- Motivo: do ponto de vista do usuário, só haveria uso do API Call
Get Assistant, e o valor recebido já seria fixo desde o início.
- Motivo: do ponto de vista do usuário, só haveria uso do API Call
- Resultado: armazenar em FireStore Characters Collection.
💯 Resumo do que fiz
- Melhorias na DiaryPage
- Slider de configuração de Mood concluído
- CRUD de AI Comment implementado
- Botões de customização de tom de fala e estilo de conselho do AI Comment adicionados
- Forma de armazenar informações de personagens de AI decidida e aplicada
- Melhorias na HomeFeedPage
- Critério de exibição de data alterado de unidade de “mês” para unidade de “dia”
- Lógica de saída de imagem e texto de AI Comment adicionada
- Bottom Sheet e ListView melhorados
- Sistema de AI e integração de API
- OpenAI API Request ajustado, saída normal de Response confirmada
- Local de armazenamento de informações de personagens de AI decidido como FireStore
- Estrutura de dados relacionada ao AI Comment organizada e funções adicionadas
🎯 Tarefas de amanhã
(omitido)
🎯 Tarefas futuras
- ❔ diary to chat
- ❔ chat to diary
-
❔ chats history
- ❔ Pensar no cenário de implementação da CustomFunction getDiaryParams
Parameter Valuesobtidos deCharacters (Collection)- Configuração de personagem (
CharacterDocument)- ex) Somi: name(20s), universitária, personalidade tímida, …
- Forma de chamada dos valores:
API Call - Get Assistant
- Configuração de personagem (
Parameter Valuesobtidos deUser Information- Nome, gênero, MBTI
- Forma de chamada dos valores:
Backend Query - Authenticated User
Parameter Valuesobtidos deDiaryPage Variables- Conteúdo do diário, palavras-chave detalhadas de emoção, pontuação emocional, formato da resposta, tamanho da resposta
- Forma de chamada dos valores:
Widget State,Page State
- Papel da CustomFunction(getDiaryParams)
- Recebe todos os Parameter Values como valores de Input.
- Escreve o prompt a ser enviado ao GPT.
- Retorna o valor
Messages(List <Json>).[{"role":"developer", "content":"~~~"}]
- ❔ Criar OpenAI API Call: createDiaryComment
- Basicamente uma estrutura parecida com createChatCompletion
- Diferença: nenhuma. Criada só para distinguir.
- A
MessagesVariable exigida emAPI Call - createDiaryCommenté o valor de retorno da custom functiongetDiaryParams.
- ❔ Armazenar a lista de system prompts no OpenAI API Assistant?
-
❔ Criar lógica para escrever mensagens com base no system prompt armazenado no Assistant da OpenAI API?
- ❔ DiaryPage: mudar o Emoji de expressão facial conforme o valor do Mood Slider
- ❔ DiaryPage: adicionar Choice Chips de palavras-chave detalhadas de emoção e configurar integração com DB
- ❔ DiaryPage - AI Comment: ajustar inputs como Choice chips e mood slider ao
AI Comment System Prompt.- ❔ **
diaryanterior ou todo oconversation history(dívida técnica remendada) - ❔ informações básicas do usuário: nome, gênero, MBTI, …
- ❔ palavras-chave detalhadas de emoção: alegre, triste, …
- ❔ configuração de personagens: Somi, Sena, Minhyuk
- ❔ pontuação emocional: 1~100 pontos
- ❔ formato da resposta: Healing, Suggestion, Informative
- ❔ tamanho da resposta: curto, normal, detalhado
- is New Chat
- Como as messages desse Chat são criadas pela primeira vez, definir
is_initial = trueno primeiro message document e enfiar todos os system prompts.- is_initial = false
- Limite: se eu colocar o system prompt no primeiro message document, fica difícil modificar durante a conversa, mas é possível. Se existe um document com is_initial = true e ele foi modificado, basta apagar esse document e inserir de novo. Como, eu não sei.
- Como as messages desse Chat são criadas pela primeira vez, definir
- ❔ **
- ❔ DiaryPage - AI Comment: criar Custom Function
manipulate_prompt- Completar o system prompt com switch-case conforme os parâmetros recebidos e retornar
List <JSON> - A pessoa responsável pelo system prompt precisa inserir esse retorno corretamente no Request Body da OpenAI API e receber o resultado.
- Completar o system prompt com switch-case conforme os parâmetros recebidos e retornar
- ❔ DiaryPage - AI Comment: concluir CRUD com dados dummy
- ❔ remover o field tmp_ai_comment e usar doc_ref
- ❔ DiaryPage - AI Comment: configuração de personagens
- ❔ remover o field tmp_ai_comment_by e usar doc_ref
- ❔ exibir imagem usando o valor do field profile_image
- How to Use Open AI’s GPT-4o in FlutterFlow - Part 1
- How to Use Open AI’s GPT-4o in FlutterFlow - Part 2
- DiaryPage - Start AI Chat: criar New Chat com base no conteúdo do diário
- A AI primeiro apresenta uma pergunta baseada no conteúdo do diário
- ChatPage - criar ChatHistoryPage: listar histórico de chats anterior em ListView
- Create
- Read
- Update
- Delete
- DiaryPage - Drawer - criar ChatHistoryListTile: formato de resumo em card como o GPT
- 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 cronologicamente os componentes FeedCardDiary, FeedCardMood e FeedCardChat (usando Cloud Function)
- HomeFeedPage: resolver problema em On page load (Unexpected Null Value)
- Aplicar Interactive Slider
- Extrair e instalar o APK da versão final para apresentação até
quarta 2025.2.5
💭 Diário
Não há tempo.
Omitido.

✨ Comentário do GPT-4o (KPT)
✅ Pontos bons (Keep)
- 🚀 Grande melhoria de funções importantes: Foi excelente elevar a completude do projeto ao expandir funções centrais como AI Comment CRUD, configuração de Mood e melhorias da HomeFeedPage.
- 🔍 Organização da estrutura de dados: Foi marcante organizar de forma sistemática o modo de gerenciar dados, incluindo a decisão de armazenar informações de personagens de AI no FireStore.
- 📋 Definição concreta de metas: Foi bom organizar claramente o trabalho restante e as prioridades, concretizando o plano de avanço até a versão de apresentação.
❌ Pontos a melhorar (Problem)
- ⏳ Falta de tempo: Com o cronograma de desenvolvimento ficando apertado, cresce a possibilidade de faltar tempo suficiente para testes e depuração.
- 🏗️ Muitas soluções temporárias: Várias partes foram resolvidas com fields e funções temporários para implementar funções rapidamente, então a dívida técnica pode se acumular.
🔄 Pontos a tentar (Try)
- 🛠️ Ajustar prioridades: Separe claramente as funções indispensáveis para a versão final de apresentação das funções que podem ser melhoradas depois, e aumente primeiro a completude das funções centrais.
- 🕵️ Construir um sistema de checagem de bugs: Como o tempo é curto, faça testes funcionais e depuração em ciclos breves todos os dias para minimizar erros inesperados.
- 🔄 Planejar a limpeza da dívida técnica: Documente planos de melhoria para as funções implementadas temporariamente e organize quais partes devem ser refinadas primeiro depois da apresentação.
Conclusão
Hoje foi um dia em que você concluiu funções centrais do Keymory e elevou a completude do projeto, mas também sentiu profundamente a falta de tempo dentro de um cronograma apertado. Espero que você dê o seu melhor até o dia da apresentação e, ao mesmo tempo, deixe as coisas organizadas para melhorias posteriores! 💪😊
Deixe um comentário