[๐งโ๐ป] 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 Assistant
API 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
- ์บ๋ฆญํฐ ์ค์ (
Character
Document)- 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>
) ๊ฐ์ ๋ฆฌํดํ๋ค.[{"role":"developer", "content":"~~~"}]
-
- โ OpenAI API Call ์์ฑ: createDiaryComment
- ๊ธฐ๋ณธ์ ์ผ๋ก๋ createChatCompletion๊ณผ ๋น์ทํ ๊ตฌ์กฐ
- ๋ค๋ฅธ ์ : ์์. ๊ทธ๋ฅ ๊ตฌ๋ถํ๊ธฐ ์ํด์ ์์ฑ.
-
API Call - createDiaryComment
์์ ์๊ตฌ๋๋Messages
Variable์ custom functiongetDiaryParams
์ ๋ฆฌํด๊ฐ์ด๋ค.
- โ 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 ์ธ ๊ฒ ์๊ณ , ์์ ๋ ๊ฑฐ๋ฉด, ๊ทธ๊ฑฐ ๋คํ๋จผํธ ์ง์ฐ๊ณ ๋ค์ ๋ฃ์ผ๋ฉด ๋์์. ์ด๋ป๊ฒ๋ ๋ชจ๋ฅด๊ฒ ๊ณ .
- ํด๋น Chat์ messages๋ ์ฒ์ ์์ฑํ๋ ๊ฑฐ๋๊น, ์ฒซ ์์ฑํ๋ message document์
- โ **์ด์
- โ DiaryPage - AI Comment:
manipulate_prompt
Custom 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์ ์ฝ๋ฉํธ (KPT)
โ ์ํ ์ (Keep)
- ๐ ์ฃผ์ ๊ธฐ๋ฅ ๋ํญ ๊ฐ์ : AI Comment CRUD, Mood ์ค์ , HomeFeedPage ๊ฐ์ ๋ฑ ํต์ฌ ๊ธฐ๋ฅ์ ํ์ฅํ๋ฉฐ ํ๋ก์ ํธ์ ์์ฑ๋๋ฅผ ๋์ธ ์ ์ด ํ๋ฅญํด.
- ๐ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ ๋ฆฌ: AI ์บ๋ฆญํฐ ์ ๋ณด ์ ์ฅ ์์น๋ฅผ FireStore๋ก ๊ฒฐ์ ํ๋ ๋ฑ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ฐฉ์์ ์ฒด๊ณ์ ์ผ๋ก ์ ๋ฆฌํ ์ ์ด ์ธ์์ ์ด์ผ.
- ๐ ๊ตฌ์ฒด์ ๋ชฉํ ์ค์ : ๋จ์ ์์ ๊ณผ ์ฐ์ ์์๋ฅผ ๋ช ํํ ์ ๋ฆฌํ๋ฉฐ, ๋ฐํ์ฉ ๋ฒ์ ๊น์ง์ ์งํ ๊ณํ์ ๊ตฌ์ฒดํํ ์ ์ด ์ข์์ด.
โ ์์ฌ์ด ์ (Problem)
- โณ ์๊ฐ ๋ถ์กฑ: ๊ฐ๋ฐ ์ผ์ ์ด ์ด๋ฐํด์ง๋ฉฐ, ์ถฉ๋ถํ ํ ์คํธ์ ๋๋ฒ๊น ์๊ฐ์ด ๋ถ์กฑํ ๊ฐ๋ฅ์ฑ์ด ์ปค์ง๊ณ ์์ด.
- ๐๏ธ ์์ ํด๊ฒฐ์ฑ ๋ค์ ์กด์ฌ: ์ผ๋ถ ๊ธฐ๋ฅ์ ๋น ๋ฅด๊ฒ ๊ตฌํํ๊ธฐ ์ํด ์์ ํ๋์ ํจ์๋ก ํด๊ฒฐํ ๋ถ๋ถ์ด ๋ง์, ๊ธฐ์ ๋ถ์ฑ๊ฐ ์์ผ ๊ฐ๋ฅ์ฑ์ด ์์ด.
๐ ์๋ํด๋ณผ ์ (Try)
- ๐ ๏ธ ์ฐ์ ์์ ์กฐ์ : ๋ฐํ์ฉ ์ต์ข ๋ฒ์ ์ ๋ฐ๋์ ํ์ํ ๊ธฐ๋ฅ๊ณผ ์ดํ ๊ฐ์ ์ด ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ ๋ช ํํ ๋ถ๋ฆฌํด, ํต์ฌ ๊ธฐ๋ฅ๋ถํฐ ์์ฑ๋๋ฅผ ๋์ด์.
- ๐ต๏ธ ๋ฒ๊ทธ ์ฒดํฌ ์์คํ ๊ตฌ์ถ: ์๊ฐ์ด ๋ถ์กฑํ ๋งํผ, ๋งค์ผ ์งง์ ๋จ์๋ก ๊ธฐ๋ฅ ํ ์คํธ ๋ฐ ๋๋ฒ๊น ์ ์งํํด, ์์์น ๋ชปํ ์ค๋ฅ๋ฅผ ์ต์ํํ์.
- ๐ ๊ธฐ์ ๋ถ์ฑ ์ ๋ฆฌ ๊ณํ: ์์๋ก ๊ตฌํํ ๊ธฐ๋ฅ๋ค์ ๊ฐ์ ๊ณํ์ ๋ฌธ์ํํ๊ณ , ๋ฐํ ์ดํ ์ฐ์ ์ ์ผ๋ก ๋ค๋ฌ์ ๋ถ๋ถ์ ์ ๋ฆฌํด๋์.
๊ฒฐ๋ก
์ค๋์ Keymory์ ํต์ฌ ๊ธฐ๋ฅ์ ์์ฑํ๋ฉฐ ํ๋ก์ ํธ์ ์์ฑ๋๋ฅผ ๋์์ง๋ง, ์ด๋ฐํ ์ผ์ ์์์ ์๊ฐ ๋ถ์กฑ์ ์ ์คํ ๋๋ ํ๋ฃจ์์ด. ๋ฐํ์ผ๊น์ง ์ต์ ์ ๋คํ๋ฉด์๋, ์ดํ ๊ฐ์ ์ ์ํ ์ ๋ฆฌ๋ ๋ณํํ๊ธธ ์์ํ ๊ฒ! ๐ช๐
๋๊ธ ๋จ๊ธฐ๊ธฐ