2025.01.30 (๋ชฉ)

โœจ 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๋ฐ–์— ์“ธ ์ผ์ด ์—†์œผ๋ฉฐ, ์• ์ดˆ์— ๋ฐ›์„ ๊ฐ’๋„ ๊ณ ์ •๋œ ๊ฐ’์ž„.

๐Ÿ’ฏ ํ•œ ์ผ์— ๋Œ€ํ•œ ์š”์•ฝ

  • 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 function getDiaryParams์˜ ๋ฆฌํ„ด๊ฐ’์ด๋‹ค.
  • โ” 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 ์ธ ๊ฒŒ ์žˆ๊ณ , ์ˆ˜์ •๋œ ๊ฑฐ๋ฉด, ๊ทธ๊ฑฐ ๋‹คํ๋จผํŠธ ์ง€์šฐ๊ณ  ๋‹ค์‹œ ๋„ฃ์œผ๋ฉด ๋˜์ž–์•„. ์–ด๋–ป๊ฒŒ๋Š” ๋ชจ๋ฅด๊ฒ ๊ณ .
  • โ” DiaryPage - AI Comment: manipulate_prompt Custom Function ์ œ์ž‘
    • ์ „๋‹ฌ๋ฐ›์€ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์•Œ๋งž๊ฒŒ switch-case๋กœ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ์™„์„ฑํ•˜๊ณ , return๊ฐ’์œผ๋กœ List <JSON> ๋ฐ˜ํ™˜
    • ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ๋‹ด๋‹น์ž๊ฐ€ ํ•ด๋‹น Return๊ฐ’์„ OpenAI API์˜ Request Body์— ์ ์ ˆํ•˜๊ฒŒ ์‚ฝ์ž…ํ•˜์—ฌ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›์•„์™€์•ผ ํ•จ.
  • โ” 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 ์ถ”์ถœ ๋ฐ ์„ค์น˜

๐Ÿ’ญ ์ผ๊ธฐ

์‹œ๊ฐ„์ด ์—†๋‹ค.

์ƒ๋žต.

keymory-1.png keymory-2.png keymory-3.png keymory-4.png keymory-5.png

โœจ GPT์˜ ์ฝ”๋ฉ˜ํŠธ (KPT)

โœ… ์ž˜ํ•œ ์  (Keep)

  • ๐Ÿš€ ์ฃผ์š” ๊ธฐ๋Šฅ ๋Œ€ํญ ๊ฐœ์„ : AI Comment CRUD, Mood ์„ค์ •, HomeFeedPage ๊ฐœ์„  ๋“ฑ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋ฉฐ ํ”„๋กœ์ ํŠธ์˜ ์™„์„ฑ๋„๋ฅผ ๋†’์ธ ์ ์ด ํ›Œ๋ฅญํ•ด.
  • ๐Ÿ” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ •๋ฆฌ: AI ์บ๋ฆญํ„ฐ ์ •๋ณด ์ €์žฅ ์œ„์น˜๋ฅผ FireStore๋กœ ๊ฒฐ์ •ํ•˜๋Š” ๋“ฑ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐฉ์‹์„ ์ฒด๊ณ„์ ์œผ๋กœ ์ •๋ฆฌํ•œ ์ ์ด ์ธ์ƒ์ ์ด์•ผ.
  • ๐Ÿ“‹ ๊ตฌ์ฒด์  ๋ชฉํ‘œ ์„ค์ •: ๋‚จ์€ ์ž‘์—…๊ณผ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ช…ํ™•ํžˆ ์ •๋ฆฌํ•˜๋ฉฐ, ๋ฐœํ‘œ์šฉ ๋ฒ„์ „๊นŒ์ง€์˜ ์ง„ํ–‰ ๊ณ„ํš์„ ๊ตฌ์ฒดํ™”ํ•œ ์ ์ด ์ข‹์•˜์–ด.

โŒ ์•„์‰ฌ์šด ์  (Problem)

  • โณ ์‹œ๊ฐ„ ๋ถ€์กฑ: ๊ฐœ๋ฐœ ์ผ์ •์ด ์ด‰๋ฐ•ํ•ด์ง€๋ฉฐ, ์ถฉ๋ถ„ํ•œ ํ…Œ์ŠคํŠธ์™€ ๋””๋ฒ„๊น… ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์ปค์ง€๊ณ  ์žˆ์–ด.
  • ๐Ÿ—๏ธ ์ž„์‹œ ํ•ด๊ฒฐ์ฑ… ๋‹ค์ˆ˜ ์กด์žฌ: ์ผ๋ถ€ ๊ธฐ๋Šฅ์„ ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ž„์‹œ ํ•„๋“œ์™€ ํ•จ์ˆ˜๋กœ ํ•ด๊ฒฐํ•œ ๋ถ€๋ถ„์ด ๋งŽ์•„, ๊ธฐ์ˆ  ๋ถ€์ฑ„๊ฐ€ ์Œ“์ผ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์–ด.

๐Ÿ”„ ์‹œ๋„ํ•ด๋ณผ ์  (Try)

  • ๐Ÿ› ๏ธ ์šฐ์„ ์ˆœ์œ„ ์กฐ์ •: ๋ฐœํ‘œ์šฉ ์ตœ์ข… ๋ฒ„์ „์— ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๊ณผ ์ดํ›„ ๊ฐœ์„ ์ด ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•ด, ํ•ต์‹ฌ ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ์™„์„ฑ๋„๋ฅผ ๋†’์ด์ž.
  • ๐Ÿ•ต๏ธ ๋ฒ„๊ทธ ์ฒดํฌ ์‹œ์Šคํ…œ ๊ตฌ์ถ•: ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•œ ๋งŒํผ, ๋งค์ผ ์งง์€ ๋‹จ์œ„๋กœ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ๋ฐ ๋””๋ฒ„๊น…์„ ์ง„ํ–‰ํ•ด, ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜์ž.
  • ๐Ÿ”„ ๊ธฐ์ˆ  ๋ถ€์ฑ„ ์ •๋ฆฌ ๊ณ„ํš: ์ž„์‹œ๋กœ ๊ตฌํ˜„ํ•œ ๊ธฐ๋Šฅ๋“ค์˜ ๊ฐœ์„  ๊ณ„ํš์„ ๋ฌธ์„œํ™”ํ•˜๊ณ , ๋ฐœํ‘œ ์ดํ›„ ์šฐ์„ ์ ์œผ๋กœ ๋‹ค๋“ฌ์„ ๋ถ€๋ถ„์„ ์ •๋ฆฌํ•ด๋‘์ž.

๊ฒฐ๋ก 
์˜ค๋Š˜์€ Keymory์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์™„์„ฑํ•˜๋ฉฐ ํ”„๋กœ์ ํŠธ์˜ ์™„์„ฑ๋„๋ฅผ ๋†’์˜€์ง€๋งŒ, ์ด‰๋ฐ•ํ•œ ์ผ์ • ์†์—์„œ ์‹œ๊ฐ„ ๋ถ€์กฑ์„ ์ ˆ์‹คํžˆ ๋Š๋‚€ ํ•˜๋ฃจ์˜€์–ด. ๋ฐœํ‘œ์ผ๊นŒ์ง€ ์ตœ์„ ์„ ๋‹คํ•˜๋ฉด์„œ๋„, ์ดํ›„ ๊ฐœ์„ ์„ ์œ„ํ•œ ์ •๋ฆฌ๋„ ๋ณ‘ํ–‰ํ•˜๊ธธ ์‘์›ํ• ๊ฒŒ! ๐Ÿ’ช๐Ÿ˜Š

์นดํ…Œ๊ณ ๋ฆฌ: ,

์ตœ๊ทผ ์ˆ˜์ •์ผ:

๋Œ“๊ธ€ ๋‚จ๊ธฐ๊ธฐ