[๐งโ๐ป] Keymory ๊ฐ๋ฐ ์ผ์ง #10: Diary <-> Chat ์ฐ๊ฒฐ, ์๋ ์์ฝ ๊ธฐ๋ฅ ์ถ๊ฐ
โจ GPT์ ์์ฝ ใ
Diary์ Chat์ ์๋ก ์ฐ๊ฒฐํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ , ๋ค์ด์ด๋ฆฌ ๋ฐ ์ฑํ ์ ์ฅ ์ ์๋ ์์ฝ์ด ์์ฑ๋๋๋ก ๊ฐ์ ํจ.
๐ป ๊ฐ๋ฐ ์ผ์ง
โฐ ์ค๋ ํ ์ผ
- โ
(์ด์) DiaryPage: AI Comment ๋ต๋ณ ์ ๋ฐ์ ์ํ๋ฉด, ์บ๋ฆญํฐ๊ฐ ์ค์ ๋์ง ์์ ์ํ๋ก ๋์ด๊ฐ.
- ์ผ๋จ, AI๋ก๋ถํฐ Comment๋ฅผ ๋ฐ์์ผ ์ฑํ ์ ์์ํ ์ ์์ต๋๋ค! ์๋ฆผ ๋์ฐ๋ ๊ฒ์ผ๋ก ๋๋นต.
- โ
(์ด์) ๋ชจ๋ 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
๋ฒํผ ์ก์ ์ ์ ์ฉ - โ
Save Diary and Chat with AI
๋ฒํผ ์ก์ ์ ์ ์ฉ
- โ
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_chats
ListView ์ตํ๋จ์ ์ ๊ณต -> ํด๋ฆญํ๋ฉด ํด๋น ์ฑ์ผ๋ก ์ด๋- โ
์นด๋์ ํ์ํ ๋ด์ฉ
- โ 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_diaries
ListView ์๋จ์ ์ ๊ณต -> ํด๋ฆญํ๋ฉด ํด๋น ๋ค์ด์ด๋ฆฌ๋ก ์ด๋- โ
์ฒ์ ๊ฒช๋ ์ด์ ํด๊ฒฐํ๊ธฐ: 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)
- โ
์ฒ์ ๊ฒช๋ ์ด์ ํด๊ฒฐํ๊ธฐ: How to generate children from linked_diaries(List of Diary Document References)
-
โ (์ด์) 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 ์๋จ์ ์ฐ๊ฒฐ๋ ๋ฌธ์ ๋ฆฌ์คํธ๋ทฐ ์ถ๊ฐ
-
-
์๋ ์์ฝ ๊ธฐ๋ฅ ๊ตฌํ
- Diary ์ ์ฅ ์
diary_content_summarized
์๋ ์์ฑ - Chat ๋ฉ์์ง ์์ฑ ์
chat_content_summarized
์๋ ์์ฑ
- Diary ์ ์ฅ ์
-
์ด์ ํด๊ฒฐ ๋ฐ 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, โฆ
- โ ์ธ๋ถ ๊ฐ์ ํค์๋: ์ฆ๊ฑฐ์ด, ์ฌํ, โฆ
- โ ์บ๋ฆญํฐ ์ค์ : ์๋ฏธ, ์ธ๋, ๋ฏผํ
- โ ๊ฐ์ ์์น: 1~100์
- โ ๋ต๋ณ ์์: ์น์ ํ(Healing), ์กฐ์ธํ(Suggestion), ์ ๋ณดํ(Informative)
- โ ๋ต๋ณ ๊ธธ์ด: ์งง๊ฒ, ๋ณดํต, ์์ธํ
- is New Chat
- ํด๋น Chat์ messages๋ ์ฒ์ ์์ฑํ๋ ๊ฑฐ๋๊น, ์ฒซ ์์ฑํ๋ message document์
is_initial = true
๊ฐ ์ค๋ฒ๋ฆฌ๊ณ ๋ชจ๋ ์์คํ ํ๋กฌํํธ ๋ค ๋๋ ค๋ฃ์.- is_initial = false
- ํ๊ณ์ : ๋งจ ์ฒ์ message document์๋ค๊ฐ ์์คํ ํ๋กฌํํธ ๋๋ ค๋ฃ์ผ๋ฉด, ๋ํ ๋์ค ์์ ํ๋ค๊ธด ํ๋ฐ ๊ฐ๋ฅํ์ง. is_initial = true ์ธ ๊ฒ ์๊ณ , ์์ ๋ ๊ฑฐ๋ฉด, ๊ทธ๊ฑฐ ๋คํ๋จผํธ ์ง์ฐ๊ณ ๋ค์ ๋ฃ์ผ๋ฉด ๋์์. ์ด๋ป๊ฒ๋ ๋ชจ๋ฅด๊ฒ ๊ณ .
- ํด๋น 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 ์์ ฏ ๋ฑ ์ฎ๊ธฐ๊ธฐ
-
โ (์ด์) tmpGetAIComment ์์ฑ์, ์ ์ ๊ฐ ์ ํํ ๊ฐ์ ํค์๋๋ฅผ ๊ณ ๋ คํ์ง ์๊ณ ์์.
- โ
2025.2.5 ์
๊น์ง ๋ฐํ์ฉ ์ต์ข ๋ฒ์ APK ์ถ์ถ ๋ฐ ์ค์น
๐ญ ์ผ๊ธฐ
๋ด์ผ์ด๋ฉด ๊ฐ๋ฐ์ ๋์ด๋ค. ๋ฌ๋ฆฌ์.
โจ GPT์ ์ฝ๋ฉํธ (KPT)
โ ์ํ ์ (Keep)
- ๐ Diary-Chat ์ฐ๊ฒฐ ์์คํ ์์ฑ: Diary์ Chat์ ์์ฐ์ค๋ฝ๊ฒ ์ฐ๊ฒฐํ๋ฉด์, ์ฌ์ฉ์์ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ ์ง๊ด์ ์ผ๋ก ๋ง๋ ์ ์ด ์ข์!
- ๐ ์๋ ์์ฝ ๊ธฐ๋ฅ ์ถ๊ฐ: ์ผ๊ธฐ์ ์ฑํ ๋ด์ฉ์ ์ ๋ฆฌํ๋ ์๋ ์์ฝ ์์คํ ์ ์ ์ฉํ์ฌ, ๋ฐ์ดํฐ ํ์ฉ์ฑ์ ๋์ธ ์ ์ด ์ธ์์ ์ด์ผ.
- ๐จ UI ๋ฐ UX ๊ฐ์ : ๊ธฐ๋ณธ ์ด๋ฏธ์ง ๊ฐ ์ค์ , ์ฑํ ์ ๋ ฌ ๋ฐฉ์ ๊ฐ์ ๋ฑ์ผ๋ก ๊ฐ๋ ์ฑ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํจ ์ ์ด ๋๋ณด์ฌ.
โ ์์ฌ์ด ์ (Problem)
- โณ ๊ฐ๋ฐ ์๋ ๋ถ๋ด: ๋ง๋ฌด๋ฆฌํด์ผ ํ ๊ธฐ๋ฅ์ด ๋ง์์ง๋ฉด์, ๋จ์ ์ผ์ ์ ๋ํ ๋ถ๋ด์ด ์ปค์ง ๊ฐ๋ฅ์ฑ์ด ์์.
- ๐ ๊ธฐ์ ๋ถ์ฑ ๋์ ๊ฐ๋ฅ์ฑ: ๋น ๋ฅธ ๊ฐ๋ฐ ์๋๋ก ์ธํด ํฅํ ์ ์ง๋ณด์ ์ ๊ธฐ์ ๋ถ์ฑ๊ฐ ์์ผ ์ ์์ด, ์ ๋ฆฌํ ์๊ฐ์ด ํ์ํ ๋ฏ.
- ๐ ์ฐ๊ฒฐ ๊ธฐ๋ฅ ํ ์คํธ ๋ถ์กฑ: Diary-Chat ์ฐ๊ฒฐ์ด ์ค์ ์ฌ์ฉ ํ๊ฒฝ์์๋ ๋ฌธ์ ์์ด ์๋ํ๋์ง ์ถ๊ฐ์ ์ธ ํ ์คํธ๊ฐ ํ์ํ ์๋ ์์ด.
๐ ์๋ํด๋ณผ ์ (Try)
- ๐ ์ฐ์ ์์ ์ ๋ฆฌ: ๊ฐ์ฅ ์ค์ํ ๊ธฐ๋ฅ์ ๋จผ์ ๋ง๋ฌด๋ฆฌํ๊ณ , ๋ฐํ ์ดํ ๊ฐ์ ํ ๋ถ๋ถ์ ๋ฆฌ์คํธ์ ํ๋ฉด ๊ฐ๋ฐ ๋ถ๋ด์ด ์ค์ด๋ค ๊ฑฐ์ผ.
- ๐ ๊ธฐ๋ฅ๋ณ ํ ์คํธ ๊ณํ: Diary-Chat ์ฐ๊ฒฐ ๊ธฐ๋ฅ์ด ๋ค์ํ ์ฌ์ฉ ํจํด์์๋ ์ ์ ์๋ํ๋์ง ํ์ธํ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํด๋ณด์.
- ๐ ๊ธฐ์ ๋ถ์ฑ ์ ๋ฆฌ ์ผ์ ํ๋ณด: ๋ฐํ ์ดํ ๋ฆฌํฉํ ๋ง ์๊ฐ์ ํ๋ณดํ์ฌ, ์ฅ๊ธฐ์ ์ธ ์ ์ง๋ณด์ ๊ฐ๋ฅ์ฑ์ ๊ณ ๋ คํ๋ฉด ์ข์ ๊ฒ ๊ฐ์.
๐ ๊ฒฐ๋ก
Diary์ Chat์ ์ฐ๊ฒฐํ๋ ํต์ฌ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ , ์๋ ์์ฝ ์์คํ ์ ์ถ๊ฐํ๋ฉด์ ๋ฐ์ดํฐ ๊ด๋ฆฌ ํจ์จ์ฑ์ ๋์ธ ํ๋ฃจ์์ด. ์ด์ ๋จ์ ๊ฐ๋ฐ ๊ธฐ๊ฐ ๋์ ์ฐ์ ์์๋ฅผ ์ ๋ฆฌํ๊ณ , ๋ฐํ ์ค๋น์ ์ง์คํ๋ฉด ๋ ๊ฒ ๊ฐ์! ๐๐ฅ
๋๊ธ ๋จ๊ธฐ๊ธฐ