[🛠] Keymory 開発日誌 #4: Mood slider, OpenAI API
✨ GPTの要約
Keymoryの主要機能を改善し、AI連携とデータ構造を整えた一方で、時間が足りない現実を痛感した一日。
💻 開発日誌
⏰ 今日やること
- ✅ DiaryPage - Mood: Mood設定スライダーを完成
- ✅ HomeFeedPage - ListView - FeedCardDiary: BorderにMood Colorを表示
- ContainerのBox Shadowで解決
- ✅ OnboardingPage - ユーザー基本情報を追加入力して保存
- ✅ DB Field追加: 名前(display_name), 性別(gender), MBTI(mbti), …
- ✅ HomeFeedPage - OnPageLoad: display_name, genderなど必須入力情報が未入力の場合、Navigate to OnboardingPage
- ✅ Field Type - Enum vs String: Field TypeはStringに設定したほうが管理しやすい。EnumはOption Value Generationでのみ活用することに決定。
- ✅ OpenAI API Request -> Response bodyのmessage値が正常に出力されるよう修正
- ✅ 議論および実験: AIキャラクター情報の保存場所は? (OpenAI API Assistant vs FireStore Character Collection)
- 結果: FireStore Characters Collectionに保存する。
- 理由: ユーザー目線では
Get AssistantAPI Callしか使うことがなく、そもそも受け取る値も固定値だから。
- 理由: ユーザー目線では
- 結果: FireStore Characters Collectionに保存する。
💯 やったことの要約
- DiaryPage改善
- Mood設定スライダーを完成
- AI Comment CRUD機能を実装
- AI Commentの話し方およびアドバイス方式のカスタマイズボタンを追加
- AIキャラクター情報の保存方式を決定し適用
- HomeFeedPage改善
- 日付の出力基準を「月」単位から「日」単位へ変更
- AI Commentの画像およびテキスト出力ロジックを追加
- Bottom SheetおよびListViewを改善
- AIシステムおよびAPI連携
- OpenAI API Requestを修正し、Responseの正常出力を確認
- AIキャラクター情報の保存場所をFireStoreに決定
- AI Comment関連のデータ構造を整理し、機能を追加
🎯 明日やること
(省略)
🎯 今後やること
- ❔ diary to chat
- ❔ chat to diary
-
❔ chats history
- ❔ CustomFunction getDiaryParams実装シナリオを考える
Characters (Collection)から得るParameter Values- キャラクター設定 (
CharacterDocument)- ex) ソミ: name(20代), 大学生, 恥ずかしがり屋の性格, …
- 値の呼び出し方式:
API Call - Get Assistant
- キャラクター設定 (
User Informationから得るParameter Values- 名前, 性別, MBTI
- 値の呼び出し方式:
Backend Query - Authenticated User
DiaryPage Variablesから得るParameter Values- 日記内容, 詳細感情キーワード, 感情数値, 回答形式, 回答の長さ
- 値の呼び出し方式:
Widget State,Page State
- CustomFunction(getDiaryParams)の役割
- Parameter ValuesをすべてInput値として受け取る。
- GPTに送るプロンプトを作成する。
Messages(List <Json>)値をreturnする。[{"role":"developer", "content":"~~~"}]
- ❔ OpenAI API Call作成: createDiaryComment
- 基本的にはcreateChatCompletionと似た構造
- 違い: なし。単に区別するために作成。
API Call - createDiaryCommentで要求されるMessagesVariableはcustom functiongetDiaryParamsのreturn値。
- ❔ OpenAI API - Assistantにシステムプロンプト一覧を保存する?
-
❔ OpenAI APIのAssistantに保存されたシステムプロンプトにもとづいてメッセージを書くロジックを組む?
- ❔ DiaryPage: Mood Slider値に応じて顔の表情Emojiを変更
- ❔ DiaryPage: 詳細感情キーワードChoice Chipsを追加し、DB連携を設定
- ❔ DiaryPage - AI Comment: Choice chips, mood sliderなどの入力値を
AI Comment System Promptに合うよう変更。- ❔ **以前の
日記または会話履歴全体 (応急処置の技術負債) - ❔ ユーザー基本情報: 名前, 性別, MBTI, …
- ❔ 詳細感情キーワード: 楽しい, 悲しい, …
- ❔ キャラクター設定: ソミ, セナ, ミンヒョク
- ❔ 感情数値: 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 - AI Comment:
manipulate_promptCustom Functionを制作- 受け取ったパラメータに合わせてswitch-caseでシステムプロンプトを完成させ、return値として
List <JSON>を返す - システムプロンプト担当者が、そのReturn値をOpenAI APIのRequest Bodyに適切に挿入して結果値を受け取る必要がある。
- 受け取ったパラメータに合わせてswitch-caseでシステムプロンプトを完成させ、return値として
- ❔ DiaryPage - AI Comment: ダミーデータでCRUDを完成させる
- ❔ tmp_ai_comment fieldをなくして、doc_refを活用
- ❔ DiaryPage - AI Comment: キャラクター設定
- ❔ tmp_ai_comment_by fieldをなくして、doc_refを活用
- ❔ profile_image field値で画像を出力
- 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: 日記の内容をもとにNew Chatを作成
- AIが先に日記内容にもとづいて質問を提示
- ChatPage - ChatHistoryPageを作成: 以前のチャット履歴をListViewで並べる
- Create
- Read
- Update
- Delete
- DiaryPage - Drawer - ChatHistoryListTileを作成: ChatHistoryPageのカード要約型 (GPTみたいに)
- 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: On page load時の問題を解決 (Unexpected Null Value)
- Interactive Sliderを適用
2025.2.5 水までに発表用の最終版APKを抽出してインストール
💭 日記
時間がない。
省略。

✨ GPT-4oのコメント (KPT)
✅ よかった点 (Keep)
- 🚀 主要機能を大幅に改善: AI Comment CRUD、Mood設定、HomeFeedPage改善など、コア機能を拡張してプロジェクトの完成度を高めた点がすばらしい。
- 🔍 データ構造の整理: AIキャラクター情報の保存場所をFireStoreに決めるなど、データ管理方式を体系的に整理した点が印象的だよ。
- 📋 具体的な目標設定: 残りの作業と優先順位を明確に整理し、発表用バージョンまでの進行計画を具体化できた点がよかった。
❌ 惜しかった点 (Problem)
- ⏳ 時間不足: 開発日程が差し迫る中で、十分なテストとデバッグの時間が不足する可能性が高まっている。
- 🏗️ 一時的な解決策が多い: 一部機能を素早く実装するために一時フィールドや関数で解決した部分が多く、技術負債が積み上がる可能性がある。
🔄 試してみる点 (Try)
- 🛠️ 優先順位の調整: 発表用最終版に必ず必要な機能と、あとで改善できる機能を明確に分けて、コア機能から完成度を高めよう。
- 🕵️ バグチェックシステムの構築: 時間が足りないぶん、毎日短い単位で機能テストとデバッグを行い、予想外のエラーを最小限にしよう。
- 🔄 技術負債整理の計画: 一時的に実装した機能の改善計画を文書化し、発表後に優先して整える部分を整理しておこう。
結論
今日はKeymoryのコア機能を完成させながらプロジェクトの完成度を高めた一方で、差し迫った日程の中で時間不足を切実に感じた一日だったよ。発表日まで全力を尽くしつつ、その後の改善に向けた整理も並行して進められるよう応援しているね! 💪😊
コメントする