Community

๊ฐœ๋ฐœ์ž 99% ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ˆ˜๋‹ค ๋–จ์–ด์š”!

โ† Go back

๐Ÿ“š LearnLog โ€” AI๊ฐ€ ์„ค๊ณ„ํ•˜๋Š” ๋‚˜๋งŒ์˜ ํ•™์Šต ๋ฃจํ‹ด ํŠธ๋ž˜์ปค

โ€ข#side-projectsโ€ข
6์ผ ์ „
โ€ข
80
โ€ข
2
โ€ข

๐Ÿ“Œ ํ”„๋กœ์ ํŠธ ์„ค๋ช…

LearnLog๋Š” LangGraph ๊ธฐ๋ฐ˜ ํ•™์Šต ์Šต๊ด€ ํŠธ๋ž˜์ปค ์—์ด์ „ํŠธ์ž…๋‹ˆ๋‹ค.

ํ•™์Šต ๋ชฉํ‘œ๋ฅผ ๋งํ•˜๋ฉด AI๊ฐ€ ๋„๋ฉ”์ธ์„ ๋ถ„์„ํ•˜๊ณ , ์ˆ˜์ค€์— ๋งž๋Š” ์ฃผ์ฐจ๋ณ„ ์ปค๋ฆฌํ˜๋Ÿผ๊ณผ ๊ณต์‹ ํ•™์Šต ์ž๋ฃŒ ๋งํฌ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ๋งค์ผ ์ฒดํฌ์ธํ•  ๋•Œ๋งˆ๋‹ค ์˜ค๋Š˜์˜ ์ฃผ์ œ์™€ ์ž๋ฃŒ๋ฅผ ์ œ์‹œํ•˜๊ณ , ํ€ด์ฆˆ๋กœ ๋ณต์Šต์‹œํ‚ค๊ณ , ํ•˜๋ฃจ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜๋Š” ํ•™์Šต ์ผ๊ธฐ๋ฅผ Notion์— ์ž๋™ ํฌ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค.

โœจ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์„ค๋ช…

1. ๋งž์ถค ์ปค๋ฆฌํ˜๋Ÿผ ์ž๋™ ์ƒ์„ฑ

ํ•™์Šต ๋ชฉํ‘œ(์˜ˆ: "LangGraph", "์˜์–ด ํšŒํ™”")์™€ ํ˜„์žฌ ์ˆ˜์ค€(์ž…๋ฌธ/์ดˆ๊ธ‰/์ค‘๊ธ‰/๊ณ ๊ธ‰)์„ ์ž…๋ ฅํ•˜๋ฉด, GPT-4o-mini๊ฐ€ ๋„๋ฉ”์ธ์„ ๋ถ„์„ํ•˜๊ณ  ์ „์ฒด ์ฃผ์ฐจ๋ณ„ ์ปค๋ฆฌํ˜๋Ÿผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ฃผ์ฐจ๋งˆ๋‹ค ๊ณต์‹ ๋ฌธ์„œยทGitHub ๋“ฑ ํ•™์Šต ์ž๋ฃŒ ๋งํฌ 2~3๊ฐœ๊ฐ€ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

2. ๋™์  AI ํŠœํ„ฐ ํŽ˜๋ฅด์†Œ๋‚˜

์ปค๋ฆฌํ˜๋Ÿผ ์ƒ์„ฑ ์‹œ ๋„๋ฉ”์ธยท์ˆ˜์ค€์— ๋งž๋Š” ํŠœํ„ฐ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. "React ์ค‘๊ธ‰ ํŠœํ„ฐ"์™€ "์˜์–ด ํšŒํ™” ์ž…๋ฌธ ํŠœํ„ฐ"๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ต์œก ๋ฐฉ์‹์œผ๋กœ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

3. ๋งค์ผ ์ฒดํฌ์ธ + ์ŠคํŠธ๋ฆญ

์˜ค๋Š˜์˜ ์ฃผ์ œ์™€ ์ž๋ฃŒ ๋งํฌ๋ฅผ ๋จผ์ € ๋ณด์—ฌ์ฃผ๊ณ , ํ•™์Šต ๋‚ด์šฉ์„ ์ž์œ ๋กญ๊ฒŒ ์ž…๋ ฅํ•˜๋ฉด AI ํŠœํ„ฐ๊ฐ€ ํ•ต์‹ฌ ๊ฐœ๋…์„ ์งš์–ด์ฃผ๋Š” ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์—ฐ์† ๋‹ฌ์„ฑ ์ผ์ˆ˜(์ŠคํŠธ๋ฆญ)๊ฐ€ ๋ˆ„์ ๋˜๋ฉฐ ์ง„๋„์œจ๋„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

4. ์ŠคํŽ˜์ด์Šค๋“œ ๋ฆฌํ”ผํ‹ฐ์…˜ ํ€ด์ฆˆ

์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ ๊ธฐ๋ฐ˜ ํ€ด์ฆˆ 3๋ฌธ์ œ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ€ด์ฆˆ ํžˆ์Šคํ† ๋ฆฌ์—์„œ "์•ฝ์  ํ† ํ”ฝ"์ด๋‚˜ "3์ผ ์ด์ƒ ์ง€๋‚œ ํ† ํ”ฝ"์„ ๊ฐ์ง€ํ•ด ๋ณต์Šต ๋ฌธ์ œ๋ฅผ ์ž๋™์œผ๋กœ ํฌํ•จ์‹œํ‚ต๋‹ˆ๋‹ค.

5. Notion ํ•™์Šต ์ผ๊ธฐ ์ž๋™ ํฌ์ŠคํŒ…

์„ธ์…˜์ด ๋๋‚˜๋ฉด ์˜ค๋Š˜์˜ ๊ธฐ๋ถ„ยท๋ชฉํ‘œยท์„ฑ์ทจยทํšŒ๊ณ ยท๋‚ด์ผ ๊ณ„ํš์ด ๋‹ด๊ธด ํ•™์Šต ์ผ๊ธฐ๋ฅผ ์ž๋™์œผ๋กœ Notion ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“ธ ๊ด€๋ จ ์Šคํฌ๋ฆฐ์ƒท

โ‘  ๋ชฉํ‘œ ์„ค์ • ์‹œ์ž‘ โ€” ์‚ฌ์ด๋“œ๋ฐ”์— ์˜ค๋Š˜์˜ ์ฃผ์ œ ํ•˜์ด๋ผ์ดํŠธ

ํ•™์Šต ๋ชฉํ‘œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์‚ฌ์ด๋“œ๋ฐ”์— ์ง„๋„์œจยท์˜ค๋Š˜์˜ ์ฃผ์ œ(ํŒŒ๋ž€ ๋ฐ•์Šค)ยทํ•™์Šต ์ž๋ฃŒ ๋งํฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.

โ‘ก AI๊ฐ€ ์ƒ์„ฑํ•œ 4์ฃผ ์ปค๋ฆฌํ˜๋Ÿผ + ์ฃผ์ฐจ๋ณ„ ํ•™์Šต ์ž๋ฃŒ

GPT-4o-mini๊ฐ€ ๋„๋ฉ”์ธ์„ ๋ถ„์„ํ•˜๊ณ  ์ „์ฒด ์ฃผ์ฐจ ์ปค๋ฆฌํ˜๋Ÿผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ฃผ์ฐจ์— ํ•™์Šต์ž๋ฃŒ ๋งํฌ๊ฐ€ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

โ‘ข ์ฒดํฌ์ธ ์™„๋ฃŒ ํ›„ ์•ก์…˜ ์„ ํƒ (ํ€ด์ฆˆ / ๊ฒ€์ƒ‰ / ์ผ๊ธฐ)

์˜ค๋Š˜ ํ•™์Šต ๋‚ด์šฉ์„ ์ž…๋ ฅํ•˜๋ฉด AI ํŠœํ„ฐ๊ฐ€ ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ๊ณ , ๋‹ค์Œ ๋‹จ๊ณ„(ํ€ด์ฆˆ/๊ฒ€์ƒ‰/์ผ๊ธฐ)๋ฅผ ๋ฒ„ํŠผ์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ŠคํŠธ๋ฆญ ์นด์šดํ„ฐ๊ฐ€ ์‚ฌ์ด๋“œ๋ฐ”์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

โ‘ฃ ์ŠคํŽ˜์ด์Šค๋“œ ๋ฆฌํ”ผํ‹ฐ์…˜ ํ€ด์ฆˆ

์˜ค๋Š˜ ํ•™์Šต ๋‚ด์šฉ ๊ธฐ๋ฐ˜ ํ€ด์ฆˆ 3๋ฌธ์ œ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ€ด์ฆˆ ํžˆ์Šคํ† ๋ฆฌ์—์„œ ์•ฝ์  ํ† ํ”ฝ์ด๋‚˜ ์˜ค๋ž˜๋œ ๋‚ด์šฉ์„ ๊ฐ์ง€ํ•ด ๋ณต์Šต ๋ฌธ์ œ๋ฅผ ํฌํ•จ์‹œํ‚ต๋‹ˆ๋‹ค.

โ‘ค ํ•™์Šต ์ผ๊ธฐ ์ž๋™ ์ž‘์„ฑ + Notion ํฌ์ŠคํŒ… ์™„๋ฃŒ

์„ธ์…˜์ด ๋๋‚˜๋ฉด ๊ธฐ๋ถ„ยท์„ฑ์ทจยทํšŒ๊ณ ยท๋‚ด์ผ ๊ณ„ํš์ด ๋‹ด๊ธด ์ผ๊ธฐ๋ฅผ ์ž๋™ ์ž‘์„ฑํ•˜๊ณ  Notion DB์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”จ๊ฐœ๋ฐœ ๊ธฐ์ˆ /์Šคํƒ

์—์ด์ „ํŠธ ํ”„๋ ˆ์ž„์›Œํฌ : LangGraph (๋ฉ€ํ‹ฐ ๋…ธ๋“œ, interrupt, ์ฒดํฌํฌ์ธํŠธ)
LLM : GPT-4o-mini
๊ฒ€์ƒ‰ : Tavily Search API
UI : Streamlit
์™ธ๋ถ€ ์—ฐ๋™ : Notion API
์ƒํƒœ ์ €์žฅ : SQLite (LangGraph SqliteSaver)


๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ ์š”์•ฝ (14๊ฐœ ๋…ธ๋“œ):

START โ†’ mood_check โ†’ goal_check
  โ””โ”€(์ƒˆ ๋ชฉํ‘œ)โ†’ goal_detail โ†’ domain_analysis โ†’ curriculum_build โ†’ persona_build
                                                                         โ†“
checkin โ†’ checkin_response โ†’ checkin_action
  โ”œโ”€ ํ€ด์ฆˆ โ†’ quiz_generate โ†’ quiz โ†’ diary_writer โ†’ notion_post โ†’ END
  โ”œโ”€ ๊ฒ€์ƒ‰ โ†’ resource_search โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ†—
  โ””โ”€ ์ผ๊ธฐ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ†—

๐Ÿ’ฌ ์—”์ง€๋‹ˆ์–ด ํด๋Ÿฝ์„ ์ง„ํ–‰ํ•˜๋ฉฐ ๋А๋‚€ ์ ๊ณผ ๋ฉค๋ฒ„๋“ค์„ ์œ„ํ•œ ํŒ

๋А๋‚€ ์ 

6์ฃผ๊ฐ„์˜ ์—”์ง€๋‹ˆ์–ด ํด๋Ÿฝ์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ 1์ฐจ ๋ชฉํ‘œ์˜€๋˜ ๊ฐ•์˜๋ฅผ ๋๊นŒ์ง€ ๋“ค์„ ์ˆ˜ ์žˆ์—ˆ์–ด์š”. ๋งค์ฃผ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ์‚ฌ์ดํด์ด ์ƒ๊ฐ๋ณด๋‹ค ๋น ๋“ฏํ–ˆ๋Š”๋ฐ, ์ง€๊ธˆ ๋Œ์•„๋ณด๋ฉด ์ฃผ๋ง์— ๋‹ค์Œ ์ฃผ ๊ฐ•์˜๋ฅผ ๋ฏธ๋ฆฌ ๋“ฃ๊ณ  ๊ณผ์ œ๋ฅผ ์—ฌ์œ  ์žˆ๊ฒŒ ์ง„ํ–‰ํ–ˆ๋‹ค๋ฉด ํ›จ์”ฌ ๊นŠ์ด ์žˆ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ์„ ๊ฒƒ ๊ฐ™์•„ ์•„์‰ฌ์›€์ด ๋‚จ์Šต๋‹ˆ๋‹ค.

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

๋‹ค๋ฅธ ๋ฉค๋ฒ„๋“ค์„ ์œ„ํ•œ ํŒ

1. ์ตœ์ข… ๊ณผ์ œ๋Š” ์ผ์ฐ ์‹œ์ž‘ํ•˜์„ธ์š”
๊ณผ์ œ ์ฃผ์ œ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ์‹œ๊ฐ„์ด ๊ฑธ๋ ค์š”. ๋ฌด์—‡์„ ๋งŒ๋“ค์ง€ ๋ฐฉํ–ฅ์ด ์ •ํ•ด์ ธ์•ผ ๊ฐ•์˜๊ฐ€ ์ œ๋Œ€๋กœ ํก์ˆ˜๋ฉ๋‹ˆ๋‹ค. 3์ฃผ์ฐจ ์ „ํ›„๋กœ ์ฃผ์ œ๋ฅผ ์žก๊ณ  ๊ธฐํš์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฑธ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

2. ๋…ธ๋“œ ํ•˜๋‚˜์— interrupt ํ•˜๋‚˜
ํ•˜๋‚˜์˜ ๋…ธ๋“œ์—์„œ interrupt()๋ฅผ ๋‘ ๋ฒˆ ์“ฐ๋ฉด LangGraph ์ฒดํฌํฌ์ธํŠธ๊ฐ€ ๋ถˆ์•ˆ์ •ํ•ด์ง‘๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด ๋‘ ๋ฒˆ ํ•„์š”ํ•˜๋‹ค๋ฉด ๋…ธ๋“œ๋ฅผ ๋ฐ˜๋“œ์‹œ ๋ถ„๋ฆฌํ•˜์„ธ์š”.

3. interrupt ์•ž์—์„œ๋Š” LLM ๊ธˆ์ง€
interrupt() ํ˜ธ์ถœ ์ „์— LLM์„ ์“ฐ๋ฉด resume ์‹œ ํ•ด๋‹น LLM์ด ์žฌํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. LLM ๊ฒฐ๊ณผ๊ฐ€ ํ•„์š”ํ•˜๋ฉด ์ด์ „ ๋…ธ๋“œ์—์„œ state์— ์ €์žฅํ•œ ๋’ค interrupt ๋…ธ๋“œ์—์„œ ์ฝ์–ด์•ผ ํ•ด์š”.

2 comments