[đ ] Journal de dĂ©veloppement Keymory #8 : systĂšme de mots-clĂ©s Ă©motionnels sur DiaryPage, paramĂštres de personnage pour AI Comment
âš RĂ©sumĂ© de GPT ă
Jâai ajoutĂ© une fonction de sĂ©lection de mots-clĂ©s Ă©motionnels dans DiaryPage et appliquĂ© des paramĂštres de personnage aux commentaires IA afin dâobtenir des rĂ©ponses plus naturelles.
đ» Journal de dĂ©veloppement
â° TĂąches du jour
- â
DiaryPage : ajout dâun ChoiceChip et dâun TextField pour les
mots-clĂ©s Ă©motionnels- â CrĂ©er les widgets
- â
Ajouter les Fields dans diaries DB : mood_keywords (
List <String>), mood_keywords_description (String) - â
Ajouter le Page State dans diaries : moodKeywordsSelected (
List <String>) - â
OnPageLoad : transmettre les variables ajoutées
- â
ChoiceChipRate (5~1) : transmettre les valeurs de diariesDoc.mood_keywords aux ChoiceChip correspondants.
- DĂ©finir MoodKeywordRate5Options, âŠ, MoodKeywordRate1Options
List <String>comme valeurs App Constant- Enum ne prend en charge que lâanglais, donc il faudrait une fonction de traduction. Trop compliquĂ©, donc rejetĂ©.
- Define Options Var : AppConstant.moodKeywordRate5Options (
List <String>) - Initially Selected : updateChoiceChipSelected
- DĂ©finir MoodKeywordRate5Options, âŠ, MoodKeywordRate1Options
- â
Créer la CustomFunction
updateMoodKeywordsSelected- On Page Load : Select all matching items in RateOptions List
List<String> updateChoiceChipSelected( List<String> moodKeywordsSelected, // current selected keyword list List<String> moodKeywordRateOptions, // selectable options for the current Rate ) { // Create a new list to maintain immutability return List<String>.from( moodKeywordsSelected.where((item) => moodKeywordRateOptions.contains(item)) ); }
- â
ChoiceChipRate (5~1) : transmettre les valeurs de diariesDoc.mood_keywords aux ChoiceChip correspondants.
- â
On ChoiceChip Selected : Update Page State
moodKeywordsSelected-> Set Value toReturn of Func updateMoodKeywordsSelected- â
Créer la 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, ) { // Copy the existing list to maintain immutability List<String> updatedList = List.from(moodKeywordsSelected); // 1ïžâŁ Remove values from the existing selection that belong to this Rate updatedList.removeWhere((item) => moodKeywordRateOptions.contains(item)); // 2ïžâŁ Add the currently selected ChoiceChip values updatedList.addAll(choiceChipSelected); return updatedList; }
- â
Créer la CustomFunction
- â
(Issue) DiaryPage - AI Comment : paramĂštres de personnage
- Ajouter un Field dans diaries DB : ai_comment_by (Doc Ref: Character)
- DiaryPage - AICommentEditor Component - Return
ai_comment_content+ai_comment_by- How? -> créer le DataType
aiCommentPageReturnObject
- How? -> créer le DataType
- On ChoiceChipChar Selected : Backend Query Character Doc with same Official_name value.
- â
(Issue) HomeFeedPage - FeedCardDiary : appliquer correctement lâimage du personnage de lâAI Comment
- â DiaryPage - AI Comment : lors de la sauvegarde, enregistrer aussi dans Diary la Ref du personnage qui a rĂ©digĂ© le commentaire.
- â HomeFeedPage - FeedCardDiary - AI Image : charger le Character Doc avec Backend Query et dĂ©finir lâImage Path.
- â
(Issue) HomeFeedPage - FeedCardDiary : Unexpected Null Value Error
- Cela arrive quand on met seulement une valeur Path dans lâImage WidgetâŠ
- Ah !!! CâĂ©tait parce que je nâavais pas mis de Default Variable Value. Je ne lâai compris quâaprĂšs avoir galĂ©rĂ© Ă fond.
- đĄ Ce que jâai appris
- Toujours prendre lâhabitude de mettre une Default Value. Combien de fois vais-je encore voir Unexpected Null Value Error partout ?
- Cela arrive quand on met seulement une valeur Path dans lâImage WidgetâŠ
- â
Design Action chains for
CreateNewChatFromDiary(Start From : une fois le traitement de lâAI Comment et lâenregistrement du journal terminĂ©s)- Create Diary
- API Call : createDiarySummary -> Output Var : OutVar1 (nom provisoire)
- Create New Chat Document
- Create New Message Document : {âroleâ:âdeveloperâ, âcontentâ:â$systemprompt + $OutVar1â}
- API Call : createChatFromDiary -> Output Var : OutVar2 (nom provisoire)
- Create New Message Document : {âroleâ:âassistantâ, âcontentâ: â$OutVar2â}
- Navigate To : transmettre la référence du Chat Document concerné via chatRefParam
đŻ RĂ©sumĂ© de ce que jâai fait
- Construction du systÚme de mots-clés émotionnels de DiaryPage
- Ajout de ChoiceChip et TextField
- Ajout de champs liés aux mots-clés émotionnels dans diaries DB
- Implémentation de la fonction
updateMoodKeywordsSelected
- ParamĂštres et application du personnage pour AI Comment
- Ajout du champ
ai_comment_bypour enregistrer le personnage du commentaire - Modification de AICommentEditor pour inclure les informations de personnage
- Chargement des donnĂ©es du personnage concernĂ© avec Backend Query lors de la sĂ©lection dâun ChoiceChip
- Ajout du champ
- RĂ©solution de lâerreur dâimage AI Comment dans HomeFeedPage
- Enregistrement de la valeur de rĂ©fĂ©rence du personnage lors de la rĂ©daction dâun AI Comment
- AmĂ©lioration de la mĂ©thode de chargement de lâimage du personnage dâAI Comment dans HomeFeedPage
- Correction de lâerreur Unexpected Null Value (avec une valeur par dĂ©faut)
đŻ Ă faire ensuite
Cliquer pour voir les détails
-
â (Issue) DiaryPage : utiliser un lecteur Markdown (prĂ©venir le dĂ©bordement : Container Height)
-
â DiaryPage : changer lâEmoji dâexpression du visage et la couleur selon la valeur du Mood Slider
- â Custom Function - aider Ă crĂ©er
systemPromptTemplate(travailleur principal : KSK)- â Organiser les paramĂštres Ă ajouter
- â Custom Function - tester si
getAICommentsâapplique rĂ©ellement- â VĂ©rifier que les valeurs dâentrĂ©e sont bien reflĂ©tĂ©es
- â VĂ©rifier que la valeur de sortie sâaffiche bien en String
- â Chat Page - Create New Chat : appliquer le system prompt
- â¶ïž ImplĂ©mentation 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
- â¶ïž ImplĂ©mentation OpenAI API Call : createChatCompletion
- â DiaryPage - Create New Chat by Diary : crĂ©er un New Chat Ă partir du contenu du journal
- â ImplĂ©mentation OpenAI API Call : createDiaryComment
- Input : Diary Content, System Prompt (AI Comment)
- Output : AI Comment ($.choices[0].message.content)
- â ImplĂ©mentation OpenAI API Call : createDiarySummary
- Input : Diary Content, AI Comment, System Prompt (Diary Summary)
- Output : Diary Summary ($.choices[0].message.content)
- â ImplĂ©mentation 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
- â ImplĂ©mentation OpenAI API Call : createDiaryComment
- â ChatPage - Create New Diary : crĂ©er un New Diary Ă partir du contenu de la conversation
- â ImplĂ©mentation OpenAI API Call : createChatSummary
- Input : Chat Content, System Prompt (Diary From Chat)
- Output : Chat Summary
- â ImplĂ©mentation OpenAI API Call : createDiaryFromChat
- Input : Chat Summary, System Prompt (Diary From Chat)
- Output : New Diary (Title, Content, Mood score)
- â ImplĂ©mentation OpenAI API Call : createChatSummary
-
â ChatPage : Go to Linked Diary
- â MoodPage (haut) - Mood Calendar
- â Pouvoir vĂ©rifier le nombre de posts Ă©crits par date
- â Se dĂ©placer vers la date sĂ©lectionnĂ©e au clic
- â MoodPage (bas) - Mood stats
- â Afficher les statistiques du mois sĂ©lectionnĂ©
- â Afficher le commentaire de lâIA sur les statistiques affichĂ©es
- â Afficher les statistiques du mois sĂ©lectionnĂ©
- â HomeFeedPage - importer puis appliquer flutter_slidable:4.0.0
-
â HomeFeedPage : dans FeedCardDiary, chat/modifier/supprimer lors dâun slide gauche-droite
- â ChatPage : aligner Ă droite la sortie des conversations utilisateur
-
â Chat/Diary : GPT Streaming API
- â ChatPage - implĂ©menter le premier message proactif de lâIA (Alarm/Notification)
- Le coeur du prompt systÚme du chat est la proactivité.
- Pour le rendre plus rĂ©aliste, il serait utile de transmettre aussi create_date of diary/chat, afin de pouvoir mentionner des dates comme âhierâ.
- RĂ©fĂ©rence dâimplĂ©mentation dâAlarm
- Le coeur du prompt systÚme du chat est la proactivité.
- â DiaryPage : ajouter des Choice Chips de mots-clĂ©s Ă©motionnels dĂ©taillĂ©s et configurer lâintĂ©gration DB
- â DiaryPage - AI Comment : adapter les valeurs saisies comme Choice chips et mood slider au
AI Comment System Prompt.- â **ancien
journalou tout lâhistorique de conversation(dette technique de rustine) - â informations utilisateur de base : nom, genre, MBTI, âŠ
- â mots-clĂ©s Ă©motionnels dĂ©taillĂ©s : joyeux, triste, âŠ
- â paramĂštres de personnage : Somi, Sena, Minhyuk
- â score Ă©motionnel : 1~100
- â format de rĂ©ponse : Healing, Suggestion, Informative
- â longueur de rĂ©ponse : courte, normale, dĂ©taillĂ©e
- is New Chat
- Comme les messages de ce Chat sont créés pour la premiÚre fois, mettre
is_initial = truesur le premier message document et y insérer tous les system prompts.- is_initial = false
- Limite : si je mets le system prompt dans le tout premier message document, câest difficile Ă modifier pendant une conversation, mais possible. Sâil existe un document is_initial = true et quâil a Ă©tĂ© modifiĂ©, je peux supprimer ce document et le remettre. Je ne sais pas encore comment, mais bon.
- Comme les messages de ce Chat sont créés pour la premiÚre fois, mettre
- â **ancien
- â DiaryPage - AI Comment : terminer le CRUD
- â supprimer le champ tmp_ai_comment et utiliser doc_ref
-
â DiaryPage - Drawer - ChatHistoryListTile : order by updated_time
-
â DiaryPage - importer puis appliquer Interactive Slider
-
â HomeFeedPage : implĂ©menter la fonctionnalitĂ© Search Diary
-
â AuthPage : implĂ©menter Google Login
- â HomeFeedPage - Bottom Sheet (
+Button) : permettre de choisir une option parmi plusieurs- Nouveau journal : Go to DiaryPage
- Enregistrement dâĂ©motion : Go to MoodPage
- â MoodPage (popup) : CRUD du slider de rĂ©glage Mood
- Create
- Read
- Update
- Delete
- â HomeFeedPage - ListView - afficher FeedCardMood
-
â HomeFeedPage - ListView : trier chronologiquement les composants FeedCardDiary, FeedCardMood, FeedCardChat (avec Cloud Function)
-
â CrĂ©er MoodEditPage entre HomeFeedPage et DiaryPage : dĂ©placer MoodSlider, MoodKeywordsRate (5~1), MoodDescription widgets, etc.
- â Extraire et installer la version APK finale de prĂ©sentation avant
mer. 2025.2.5
đ Journal
Je sens la dette technique pousser joyeusement Ă cause de toutes ces rustinesă ă Comme la deadline de soumission est dans 3 jours, bonâŠă
âš Commentaire de GPT-4o (KPT)
â Points rĂ©ussis (Keep)
- đŻ Construction du systĂšme de mots-clĂ©s Ă©motionnels : appliquer ChoiceChip pour que lâutilisateur puisse enregistrer intuitivement ses Ă©motions Ă©tait une bonne chose !
- đ€ Application des personnages aux AI Comments : dĂ©finir des rĂ©actions par personnage pour renforcer lâimmersion est impressionnant.
- đ RĂ©solution de lâerreur HomeFeedPage : dĂ©finir une valeur par dĂ©faut pour prĂ©venir lâerreur Unexpected Null Value Ă©tait excellent !
â Points regrettables (Problem)
- âł Temps de dĂ©veloppement plus long que prĂ©vu : lâimplĂ©mentation des mots-clĂ©s Ă©motionnels et des fonctionnalitĂ©s AI Comment a pris plus de temps que prĂ©vu.
- đ ComplexitĂ© accrue des donnĂ©es de personnage : le flux de donnĂ©es est devenu plus complexe, donc la maintenance pourrait devenir difficile.
- đ Journal de rĂ©solution insuffisant : ne pas organiser le processus de rĂ©solution dâerreur peut faire perdre du temps si le mĂȘme problĂšme revient.
đ Pistes Ă essayer (Try)
- đ Ajuster le temps de dĂ©veloppement par fonctionnalitĂ© : identifier Ă lâavance les tĂąches qui prennent plus de temps que prĂ©vu et ajuster le planning.
- đ Visualiser le flux de donnĂ©es : essayer dâorganiser sous forme de diagramme la structure de donnĂ©es liĂ©e aux paramĂštres de personnage.
- đ Prendre lâhabitude de noter les rĂ©solutions de problĂšmes : documenter les issues rĂ©solues et prĂ©parer une stratĂ©gie de prĂ©vention des rĂ©cidives.
đ Conclusion
Aujourdâhui, tu as construit le systĂšme de mots-clĂ©s Ă©motionnels et appliquĂ© des paramĂštres de personnage aux AI Comments. La rĂ©solution dâerreur a encore confirmĂ© lâimportance des valeurs par dĂ©faut, et Ă partir de maintenant il faudra gĂ©rer le temps de dĂ©veloppement plus efficacement ! đđ„
Laisser un commentaire