[🛠] Keymory 開発日誌 #10: Diary <-> Chat 連携、自動要約機能を追加
✨ GPTの要約
Diary と Chat を相互に連携する機能を実装し、日記とチャットの保存時に自動要約が生成されるよう改善した。
💻 開発日誌
⏰ 今日やること
- ✅ (Issue) DiaryPage: AI Comment の回答を受け取っていない状態だと、キャラクターが未設定のまま遷移する。
- いったん、AIから Comment を受け取ってからでないとチャットを開始できません!という通知を出すことで応急対応。
- ✅ (Issue) すべての Image ウィジェットに Default Variable 値を割り当て (Unexpected Null value Error 防止用)
- No Profile Image:
https://cdn.pixabay.com/photo/2015/10/05/22/37/blank-profile-picture-973460_1280.png - No image:
https://png.pngtree.com/png-vector/20190820/ourmid/pngtree-no-image-vector-illustration-isolated-png-image_1694547.jpg
- No Profile Image:
-
✅ ChatPage: ユーザー画像写真を user profile image に差し替え
-
✅ ChatPage: ユーザーの会話出力内容は右揃え (KSK 担当)
- ✅ DiaryPage: ダイアリー保存時に自動で要約を生成
- ✅ Diaries DB: Add field
diary_content_summarized - ✅
Save Diaryボタン Action に適用 - ✅
Save Diary and Chat with AIボタン Action に適用
- ✅ Diaries DB: Add field
- ✅
linked_chatsを Diary Document DB - Field として追加 -
✅
linked_diariesを Chat Document DB - Field として追加 - ✅ DiaryPage:
Save Diary and Chat with AIボタンをクリックしたとき、DiaryPage/Doc <-> ChatPage/Doc Link- Diary Document の
linked_chatsリストに Chat Document Reference を追加 - Chat Document の
linked_diariesリストに Diary Document Reference を追加
- Diary Document の
- ✅ DiaryPage で Create New Chat するとき、
linked_chatsを Diary Document DB - Field として追加 -
✅ ChatPage で Create New Diary するとき、
linked_diariesを Chat Document DB - Field として追加 - ✅ DiaryPage:
linked_chatsListView を最下部に提供 -> クリックすると該当チャットへ移動- ✅ カードに表示する内容
- ✅ Chat - title, Chat - timestamp( == created_time)
- ✅ Chat - (most recent) Message - content
- ✅ Character - profile_image
- ✅ カードに表示する内容
- ✅ ChatPage: チャット回答を受け取ると、自動で要約を生成
- ✅ Chats DB: Add field
chat_content_summarized
- ✅ Chats DB: Add field
- ✅ ChatPage:
linked_diariesListView を上部に提供 -> クリックすると該当ダイアリーへ移動- ✅ 初めて遭遇する Issue を解決: How to generate children from linked_diaries(List of Diary Document References)
- How to display List of Doc References?
- ListView: Generate Children From linked_diaries (Diary Document References)
- ListView - Child(Card): Backend Query - Diary Document From Reference
- ListView - Child(Card) - Component Parameter: Diary Document
- ✅ カードに表示する内容
- ✅ Diary - title, Diary - created_time
- ✅ Diary - Mood Score (Color)
- ✅ 初めて遭遇する Issue を解決: How to generate children from linked_diaries(List of Diary Document References)
-
✅ (Issue) ChatPage - Linked Diaries ListView: Drawer で選択しても変わらない。
- ✅ 発表準備 - PPT: ページごとの内容確認
💯 やったことの要約
- Diary-Chat 連携機能を追加
linked_chats(Diary → Chat)、linked_diaries(Chat → Diary) フィールドを追加- DiaryPage で Create New Chat 時に
linked_chatsを更新 - ChatPage で Create New Diary 時に
linked_diariesを更新 - DiaryPage 下部と ChatPage 上部に連携済み Document ListView を追加
- 自動要約機能を実装
- Diary 保存時に
diary_content_summarizedを自動生成 - Chat メッセージ生成時に
chat_content_summarizedを自動生成
- Diary 保存時に
- Issue 解決と UI 改善
- AIコメントなしではチャットを開始できないよう通知を追加
- すべての Image ウィジェットにデフォルト画像値を適用し、Unexpected Null Value を防止
- ChatPage でユーザープロフィール画像を実際のユーザー画像に差し替え
- ユーザーの会話内容を右揃えにして可読性を改善
🎯 今後やること
詳しく見るにはクリック
- ✅ Download APK
-
❔ Connect GitHub and Push
- ❔ 発表資料提出: PPT
-
❔ 発表資料提出: 1分デモ動画
- ❔ 発表準備 - スクリプト: ページごとのスクリプト基準所要時間を測定後、スクリプトを修正
- ❔ 発表準備 - PPT: 機能別にデモ用の短い動画を撮影
- ❔ ChatPage - Create New Diary: 会話内容をもとに New Diary を生成
- ❔ Create New Diary Condition: if linked diary exists -> Delete confirmation dialog? -> Yes
- ❔ 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)
-
❔ アプリを初めて開いたときのウェルカムページを追加 (ロゴ)
- ❔ ChatPage:
titleの default value をRandom Stringから「無題」に統一 -
❔ DiaryPage: Mood Slider の値に応じて顔表情 Emoji と色を変更
- ❔ ChatPage: Delete Diary Link を実装 ( … icon を押すと Delete 可能に)
- 必ず Diary/Chat Doc の linked field も一緒に消す必要あり!
- ❔ MoodPage(上部) - Mood Calendar
- ❔ 日付ごとに作成された投稿数を確認可能
- ❔ 日付をクリックすると、その日付へ移動
- ❔ MoodPage(下部) - Mood stats
- ❔ フォーカスされた月に関する統計資料を出力
- ❔ 出力された統計資料に対するAIのコメントを出力
- ❔ フォーカスされた月に関する統計資料を出力
- ❔ HomeFeedPage - flutter_slidable:4.0.0 import 後に適用
-
❔ HomeFeedPage: FeedCardDiary で左右 slide 時にチャット/編集/削除
-
❔ Chat/Diary: GPT Streaming API
- ❔ ChatPage - AI からの先メッセージ実装 (Alarm/Notification)
- チャットシステムプロンプトの核心は能動型だ。
- よりリアルにするなら、create_date of diary/chat も渡して、「昨日」などの日付に言及できるとよさそう。
- Alarm 機能実装方法の参考
- チャットシステムプロンプトの核心は能動型だ。
- ❔ DiaryPage: 詳細感情キーワード Choice Chips 追加後、DB 連携設定
- ❔ DiaryPage - AI Comment: Choice chips、mood slider などの入力値を
AI Comment System Promptに合わせて変更。- ❔ **以前の
日記または会話履歴全体 (応急処置の技術負債) - ❔ ユーザー基本情報: 名前、性別、MBTI, …
- ❔ 詳細感情キーワード: 楽しい、悲しい, …
- ❔ キャラクター設定: Somi、Sena、Minhyuk
- ❔ 感情スコア: 1~100点
- ❔ 回答形式: Healing、Suggestion、Informative
- ❔ 回答長さ: 短く、普通、詳しく
- is New Chat
- 該当 Chat の messages は初めて生成するものなので、最初に生成する message document の
is_initial = true値を入れて、すべてのシステムプロンプトをまとめて入れる。- is_initial = false
- 限界点: 最初の message document にシステムプロンプトを入れてしまうと、会話途中の修正は大変だが可能ではある。 is_initial = true のものがあり、修正されたものなら、その document を消して入れ直せばいい。方法は分からないけど。
- 該当 Chat の messages は初めて生成するものなので、最初に生成する message document の
- ❔ **以前の
-
❔ DiaryPage - Interactive Slider import 後に適用
-
❔ HomeFeedPage: Search Diary 機能を実装
-
❔ AuthPage: Google Login 機能を実装
- ❔ HomeFeedPage - Bottom Sheet (
+Button): さまざまなオプションから1つ選べるように- 新しい日記: Go to DiaryPage
- 感情記録: Go to MoodPage
- ❔ MoodPage(ポップアップ): Mood 設定スライダー CRUD
- Create
- Read
- Update
- Delete
- ❔ HomeFeedPage - ListView - FeedCardMood 表示
-
❔ HomeFeedPage - ListView: FeedCardDiary、FeedCardMood、FeedCardChat コンポーネントを時系列でソート (Cloud Function 活用)
-
❔ HomeFeedPage - DiaryPage の間に MoodEditPage を作成: MoodSlider、MoodKeywordsRate(5~1)、MoodDescription ウィジェットなどを移す
-
❔ (Issue) tmpGetAIComment 生成時、ユーザーが選択した感情キーワードを考慮していない。
- ❔
2025.2.5 水までに発表用最終バージョン APK を抽出してインストール
💭 日記
明日になれば開発は終わりだ。走ろう。
✨ GPT-4oのコメント (KPT)
✅ よかった点 (Keep)
- 🔗 Diary-Chat 連携システムの完成: Diary と Chat を自然につなぎ、ユーザーのデータの流れをより直感的にした点がよかった!
- 📝 自動要約機能の追加: 日記とチャット内容を整理する自動要約システムを適用し、データ活用性を高めた点が印象的。
- 🎨 UI と UX の改善: デフォルト画像値の設定、チャット整列方式の改善などにより、可読性とユーザー体験を向上させた点が光っている。
❌ 惜しかった点 (Problem)
- ⏳ 開発スピードの負担: 仕上げるべき機能が増え、残り日程への負担が大きくなる可能性がある。
- 🔄 技術負債が積み上がる可能性: 速い開発スピードのため、今後の保守時に技術負債が溜まる可能性があり、整理する時間が必要になりそう。
- 📋 連携機能のテスト不足: Diary-Chat 連携が実際の利用環境でも問題なく動作するか、追加テストが必要かもしれない。
🔄 試してみること (Try)
- 📌 優先順位の整理: 最も重要な機能から先に仕上げ、発表後に改善する部分をリストアップすると開発負担が減るはず。
- 📝 機能別テスト計画: Diary-Chat 連携機能がさまざまな使用パターンでも正常に動作するか確認するテストケースを書いてみよう。
- 📊 技術負債整理の時間確保: 発表後にリファクタリング時間を確保し、長期的な保守性を考えるとよさそう。
🏁 結論
今日は Diary と Chat をつなぐ核心機能を実装し、自動要約システムを追加しながらデータ管理の効率を高めた一日だった。あとは残りの開発期間で優先順位を整理し、発表準備に集中すればよさそう! 🚀🔥
コメントする