[๐ ] Dev Log Keymory #9: Implementasi Diary to Chat, Optimasi Sistem Komentar AI
โจ Ringkasan GPT ใ
Mengimplementasikan Diary to Chat, menyelesaikan masalah yang muncul dalam proses pembuatan, serta memperbaiki kesalahan skor emosi dan pengaturan karakter pada sistem komentar AI.
๐ป Log Pengembangan
โฐ Tugas hari ini
- โ
Custom Function - membantu membuat
systemPromptTemplate(pekerja utama: KSK)- โ Meninjau parameter yang ditambahkan dan struktur internal fungsi
- โ
Menguji apakah Custom Function -
getAICommentbenar-benar diterapkan- โ Memastikan nilai input tercermin dengan baik
- โ Memastikan nilai output keluar dengan baik sebagai String
- โ
Chat Page - Create New Chat: menerapkan system prompt (pekerja utama: 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: membuat New Chat berdasarkan isi diary (pekerja utama: 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)
- โ
(Masalah) Create New Chat by Diary hanya bekerja setelah hanya menyimpan diary, kembali ke home, lalu masuk lagi ke halaman diary dan membuat New Chat.
- Penyebab masalah
- Aku sedang menarik Output variable dari action chain lain
- Pencegahan Unexpected Null Value belum disiapkan
- JSON Path belum ditentukan dengan benar
- Aku mendefinisikan
tmpDiariesDocForNewChatsebagai Page State, lalu mengalokasikan diary Document ke sana.- Lebih tepatnya,
- mengalokasikan
diariesDocyang dikirim lewat Page Paramater, atau - mengalokasikan
newDiariesDocyang dibuat saat tombol Save ditekan.
- mengalokasikan
- Namun aplikasi terus berhenti saat tombol
Save Diary and Chat with AIditekan.- Saat dicek dengan F12, Exception muncul karena error
Unexpected Null Value. - Saat melihat Debug Pannel,
tmpDiariesDocForNewChatditetapkan sebagaiNull.
- Saat dicek dengan F12, Exception muncul karena error
- Page State
tmpDiariesDocForNewChataku ubah kembali menjaditmpDiariesDocRefForNewChat. (Document -> Document Reference)- Setelah Actions diubah dengan tepat berdasarkan Document Reference, akhirnya berjalan normal!
- Lebih tepatnya,
- ๐กHal yang dipelajari: Dalam Action Chain, menetapkan nilai ke Page State lalu langsung membacanya bisa memicu Unexpected Null Value. Lebih baik banyak memakai Document Reference daripada Document. Tentu saja, kalau sering melakukan Read Document dengan Backend Query, performa mungkin turunโฆ tapi itu bisa cukup disiapkan saat OnPageLoad Event atau saat membuat Action Chain utama.
- Penyebab masalah
- โ
(Masalah) Saat membuat AI Comment, skor emosi pengguna kadang terus tersimpan sebagai 0.
- Setelah kutekankan, โKhususnya kerjakan โ5. weighted formula calculationโ dengan akurat. Skor emosi pengguna sama sekali bukan 0.โ, kasus yang tertulis 0 berkurang. (Belum hilang sepenuhnya.)
- Untuk sementara lanjut dulu.
- โ
(Masalah) ChatPage: karakter tidak tahu informasi tentang dirinya sendiri!
- Sepertinya teratasi sendiri saat menyelesaikan masalah terkait Save. Lumayan.
- โ
(Masalah) ChatPage: karakter mengabaikan โfollow-up question listโ!
- Sepertinya teratasi sendiri saat menyelesaikan masalah terkait Save. Lumayan.
- โ
(Masalah) Saat berpindah ke ChatPage, bottom navigation bar menghilang.
- Always Show Nav bar Toggle On
- โ
(Masalah) Di Drawer ChatPage, gambar karakter tampil berbeda.
- Masalah ini muncul karena dulu logika penyimpanan AI Comment kubuat salah. Karena hanya terjadi pada chat lama, diselesaikan dengan menghapus Chat document tersebut.
๐ฏ Ringkasan pekerjaan yang dilakukan
- Memperbaiki logika pembuatan Chat
- Meninjau struktur parameter
systemPromptTemplatedangetAIComment - Menerapkan system prompt pada Create New Chat dan mengoptimalkan OpenAI API Call
- Merapikan proses pembuatan New Chat berbasis Diary: komentar AI -> ringkasan diary -> pembuatan Chat
- Meninjau struktur parameter
- Mengoptimalkan sistem komentar AI
- Memperbaiki masalah skor emosi yang tersimpan sebagai 0
- Menyelesaikan masalah AI yang tidak mengenali informasi karakter
- Memperbaiki gejala follow-up question list diabaikan
- Penyelesaian masalah dan peningkatan performa
- Memperbaiki masalah navigation bar yang menghilang saat berpindah ke ChatPage
- Memperbaiki ketidaksesuaian gambar karakter dengan mengubah logika penyimpanan AI Comment
- Menggunakan Document -> Document Reference untuk mencegah Unexpected Null Value
๐ฏ Hal yang akan dilakukan nanti
Klik untuk melihat detail
- โ (Masalah) DiaryPage: jika jawaban AI Comment belum diterima, halaman berpindah dengan karakter yang belum ditetapkan.
- Untuk sementara, ditambal dengan menampilkan notifikasi: Chat baru bisa dimulai setelah menerima Comment dari AI!
-
โ (Masalah) DiaryPage: menggunakan markdown viewer untuk jawaban AI Comment (mencegah overflow: Container Height)
-
โ ChatPage: output percakapan user rata kanan
-
โ DiaryPage: mengubah Emoji ekspresi wajah dan warna sesuai nilai Mood Slider
- โ DiaryPage: Go to Linked Chat
- โ ChatPage: Go to Linked Diary
- Saat Save dari Diary Document di DiaryPage, nilai Chat Reference juga harus ditambahkan sebagai Field di Diary Document DB. (linkedChat)
- Di Chat Document milik ChatPage, tentu nilai Diary Reference juga harus ditambahkan sebagai Field di Chat Document DB. (linkedDiary)
- โ ChatPage - Create New Diary: membuat New Diary berdasarkan isi percakapan (memanfaatkan logika 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(atas) - Mood Calendar
- โ Bisa mengecek jumlah posting yang ditulis per tanggal
- โ Jika tanggal diklik, pindah ke tanggal tersebut
- โ MoodPage(bawah) - Mood stats
- โ Menampilkan data statistik untuk bulan yang sedang difokuskan
- โ Menampilkan komentar AI terhadap data statistik yang ditampilkan
- โ Menampilkan data statistik untuk bulan yang sedang difokuskan
- โ HomeFeedPage - import lalu terapkan flutter_slidable:4.0.0
-
โ HomeFeedPage: saat FeedCardDiary digeser kiri/kanan, chat/edit/delete
-
โ Chat/Diary: GPT Streaming API
- โ ChatPage - implementasi pesan pertama dari AI (Alarm/Notification)
- Inti chat system prompt adalah proaktif.
- Agar lebih realistis, sepertinya bagus juga mengirim create_date of diary/chat, supaya bisa menyebut tanggal seperti โkemarinโ.
- Referensi cara implementasi Alarm
- Inti chat system prompt adalah proaktif.
- โ DiaryPage: menambahkan detailed emotion keyword Choice Chips lalu mengatur integrasi DB
- โ DiaryPage - AI Comment: menyesuaikan input seperti Choice chips dan mood slider agar cocok dengan
AI Comment System Prompt.- โ **
diarysebelumnya atau seluruhconversation history(technical debt tambalan) - โ informasi dasar pengguna: nama, gender, MBTI, โฆ
- โ detailed emotion keywords: senang, sedih, โฆ
- โ character settings: Somi, Sena, Minhyuk
- โ emotion score: 1~100 poin
- โ response format: Healing, Suggestion, Informative
- โ response length: pendek, normal, detail
- is New Chat
- Karena messages pada Chat ini baru dibuat untuk pertama kali, beri nilai
is_initial = truepada message document pertama lalu masukkan semua system prompt.- is_initial = false
- Batasan: jika system prompt dimasukkan ke message document paling awal, sulit mengubahnya di tengah percakapan, tapi masih mungkin. Kalau ada document dengan is_initial = true dan itu sudah diubah, tinggal hapus document itu lalu masukkan lagi. Caranya belum tahu.
- Karena messages pada Chat ini baru dibuat untuk pertama kali, beri nilai
- โ **
- โ DiaryPage - AI Comment: menyelesaikan CRUD
- โ menghapus field tmp_ai_comment dan memakai doc_ref
-
โ DiaryPage - Drawer - ChatHistoryListTile: order by updated_time
-
โ DiaryPage - import lalu terapkan Interactive Slider
-
โ HomeFeedPage: implementasi fitur Search Diary
-
โ AuthPage: implementasi Google Login
- โ HomeFeedPage - Bottom Sheet (
+Button): memungkinkan memilih 1 dari berbagai opsi- diary baru: Go to DiaryPage
- catatan emosi: Go to MoodPage
- โ MoodPage(popup): Mood setting slider CRUD
- Create
- Read
- Update
- Delete
- โ HomeFeedPage - ListView - menampilkan FeedCardMood
-
โ HomeFeedPage - ListView: mengurutkan komponen FeedCardDiary, FeedCardMood, FeedCardChat secara kronologis (memanfaatkan Cloud Function)
-
โ Membuat MoodEditPage di antara HomeFeedPage dan DiaryPage: memindahkan widget MoodSlider, MoodKeywordsRate(5~1), MoodDescription, dll.
-
โ (Masalah) Saat membuat tmpGetAIComment, emotion keyword yang dipilih user belum dipertimbangkan.
- โ Ekstrak dan instal APK versi final untuk presentasi sampai
Rabu 2025.2.5
๐ญ Diary
Masalah meledak bertubi-tubi sampai mentalku hampir melayang jauhโฆ Apakah strategiku, โmeski technical debt menumpuk, kalau implementasi dulu, kemampuan akan terus naik dan nanti utangnya bisa dilunasi!โ sudah mencapai batasnyaโฆ atau tetap saja itu keputusan yang efisienโฆ
Sudahlah, entahlah~ Itu bukan hal yang penting sekarang. Waktu benar-benar tidak ada! Tambal cepat, gas.
โจ Komentar GPT-4o (KPT)
โ Hal yang baik (Keep)
- ๐ Merapikan logika pembuatan Chat: Bagus karena kamu merapikan dan menyelesaikan berbagai masalah yang muncul dalam proses pembuatan New Chat!
- ๐ญ Meningkatkan sistem komentar AI: Mengesankan karena kamu memperbaiki error skor emosi dan pengaturan karakter, lalu mengarahkan respons AI agar lebih akurat.
- ๐ Kemampuan debugging meningkat: Menyelesaikan masalah Unexpected Null Value dan mempelajari cara memakai Document Reference akan sangat membantu ke depannya.
โ Hal yang kurang (Problem)
- โณ Banyak waktu habis untuk menyelesaikan masalah: Debugging berlangsung lebih lama dari perkiraan, sehingga waktu untuk pengembangan fitur yang awalnya ditargetkan mungkin berkurang.
- ๐ Technical debt bertambah: Strategi implementasi cepat sedang menumpuk technical debt, jadi pembersihan lanjutan akan dibutuhkan.
- ๐ Dokumentasi kurang: Kalau proses penyelesaian masalah penting dirapikan sedikit lagi, masalah serupa bisa diselesaikan lebih cepat saat muncul kembali.
๐ Hal yang bisa dicoba (Try)
- ๐ Analisis pola kemunculan masalah: Pahami masalah yang berulang dan pikirkan arah untuk memperbaiki pola pengembangan.
- ๐ Menyusun strategi pengelolaan technical debt: Dalam jangka pendek, solusi cepat memang perlu, tetapi untuk maintenance dan optimasi jangka panjang, roadmap akan bagus untuk dibuat.
- ๐ Membiasakan pencatatan penyelesaian masalah: Dokumentasikan proses penyelesaian masalah utama agar waktu pengembangan di masa depan bisa dihemat.
๐ Kesimpulan
Hari ini adalah hari ketika logika pembuatan Chat diperbaiki dan error pada sistem komentar AI diselesaikan, sehingga stabilitas meningkat. Debugging memang memakan waktu lebih lama dari perkiraan, tetapi banyak hal juga dipelajari dari proses itu! Ke depannya, mari pikirkan strategi pengembangan yang lebih efisien sambil mengelola technical debt. ๐๐ฅ
Tinggalkan komentar