DataFlow๐Ÿ“œ: ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ AI๋ฅผ ์œ„ํ•œ, LLM ๊ธฐ๋ฐ˜ ํ†ตํ•ฉ ๋ฐ์ดํ„ฐ ์ค€๋น„ ๋ฐ ์›Œํฌํ”Œ๋กœ์šฐ ์ž๋™ํ™” ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ์ˆ  ๋ฌธ์„œ ๋ฆฌ๋ทฐ

DataFlow ์†Œ๊ฐœ

๋ฐ์ดํ„ฐ ์ค‘์‹ฌ AI๋กœ์˜ ํŒจ๋Ÿฌ๋‹ค์ž„ ์ „ํ™˜๊ณผ ํ˜„์‹ค์ ์ธ ๋ฌธ์ œ์ 

์ธ๊ณต์ง€๋Šฅ ์—ฐ๊ตฌ์˜ ํ๋ฆ„์€ ๋ชจ๋ธ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” '๋ชจ๋ธ ์ค‘์‹ฌ(Model-Centric)' ์ ‘๊ทผ ๋ฐฉ์‹์—์„œ, ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๋Š” ๋ฐ์ดํ„ฐ์˜ ํ’ˆ์งˆ์„ ๋†’์ด๋Š” '๋ฐ์ดํ„ฐ ์ค‘์‹ฌ(Data-Centric)' ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ ๊ธ‰๊ฒฉํ•˜๊ฒŒ ์ด๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. GPT ์‹œ๋ฆฌ์ฆˆ์˜ ์„ฑ๊ณต ์ดํ›„ ํ™•๋ฆฝ๋œ ์Šค์ผ€์ผ๋ง ๋ฒ•์น™(Scaling Law)์€ ๋ฐ์ดํ„ฐ์˜ ์–‘๊ณผ ์งˆ์ด ๋ชจ๋ธ ์„ฑ๋Šฅ์˜ ์ƒํ•œ์„ ์„ ๊ฒฐ์ •ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ˆ˜ํ•™์ , ๊ฒฝํ—˜์ ์œผ๋กœ ์ฆ๋ช…ํ•ด ๋ƒˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ์ตœ๊ทผ์˜ LLM ๊ฐœ๋ฐœ์€ ์ˆ˜ ์กฐ ํ† ํฐ์— ๋‹ฌํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ์ฝ”ํผ์Šค๋ฅผ ๋‹ค๋ฃจ๋ฉฐ, ๋‹จ์ˆœํ•œ ํ…์ŠคํŠธ ์ˆ˜์ง‘์„ ๋„˜์–ด ํ•ฉ์„ฑ(Synthetic), ์ •์ œ(Refinement), ํ•„ํ„ฐ๋ง(Filtering), ๊ทธ๋ฆฌ๊ณ  ๋„๋ฉ”์ธ ํŠนํ™” ๋ณ€ํ™˜๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ๋‹ค๋‹จ๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ์„ ์š”๊ตฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์ค‘์š”์„ฑ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์‹ค์ œ ํ˜„์—…์—์„œ์˜ ๋ฐ์ดํ„ฐ ์ค€๋น„ ๊ณผ์ •์€ ๋†€๋ผ์šธ ์ •๋„๋กœ ํŒŒํŽธํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์—ฐ๊ตฌ์ž์™€ ์—”์ง€๋‹ˆ์–ด๋“ค์€ ์—ฌ์ „ํžˆ ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ์ผํšŒ์„ฑ ์Šคํฌ๋ฆฝํŠธ(Ad-hoc scripts)๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๋ช…ํ™•ํ•œ ์ถ”์ƒํ™”๋‚˜ ํ‘œ์ค€ํ™”๋œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๋ถ€์žฌ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฃผ๋จน๊ตฌ๊ตฌ์‹ ๋ฐฉ์‹์€ ์žฌํ˜„์„ฑ์„ ์ €ํ•ดํ•˜๊ณ , ํŒŒ์ดํ”„๋ผ์ธ์˜ ํ™•์žฅ์„ ์–ด๋ ต๊ฒŒ ํ•˜๋ฉฐ, ๋ชจ๋ธ์ด ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ๊ณผ์ •์— ๊ฐœ์ž…ํ•˜๋Š” Model-in-the-loop ๋ฐฉ์‹์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ํฐ ๊ฑธ๋ฆผ๋Œ์ด ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ธ์ŠคํŠธ๋Ÿญ์…˜ ํŠœ๋‹(Instruction Tuning)์ด๋‚˜ ์‚ฌ๊ณ  ์‚ฌ์Šฌ(Chain-of-Thought) ์ƒ์„ฑ๊ณผ ๊ฐ™์ด ๋ฏธ์„ธํ•œ ์˜๋ฏธ๋ก ์  ์ •ํ™•์„ฑ์ด ์š”๊ตฌ๋˜๋Š” ์ž‘์—…์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋น„ํ‘œ์ค€ํ™”๋œ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์น˜๋ช…์ ์ธ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด ์‹œ์Šคํ…œ์˜ ํ•œ๊ณ„์™€ DataFlow์˜ ์ฐจ๋ณ„์ 

๋ฌผ๋ก  ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด NeMo Curator๋‚˜ Data-Juicer์™€ ๊ฐ™์€ ์‹œ์Šคํ…œ๋“ค์ด ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋“ค์€ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์˜ ์ถ”์ถœ, ์ค‘๋ณต ์ œ๊ฑฐ, ๋ถ„๋ฅ˜ ์ž‘์—… ๋“ฑ์—์„œ ํ›Œ๋ฅญํ•œ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์˜ ํšจ์œจ์„ฑ์„ ํฌ๊ฒŒ ๋†’์˜€์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋“ค ์‹œ์Šคํ…œ์€ ๊ทผ๋ณธ์ ์œผ๋กœ '์ถ”์ถœ(Extraction)'๊ณผ 'ํ•„ํ„ฐ๋ง(Filtering)'์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ์—์„œ ๋‚˜์œ ๊ฒƒ์„ ๊ฑธ๋Ÿฌ๋‚ด๋Š” ๋ฐ์—๋Š” ์œ ์šฉํ•˜์ง€๋งŒ, ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธ๋ก ์ ์œผ๋กœ ๋ณ€ํ˜•ํ•˜๋Š” ๋ฐ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ์˜ ์—ฐ๊ตฌ ํŠธ๋ Œ๋“œ๋Š” LLM์ด ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ๋น„ํ•˜๋Š” ์ฃผ์ฒด๋ฅผ ๋„˜์–ด, ๊ณ ํ’ˆ์งˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์‚ฐํ•˜๋Š” ์ฃผ์ฒด๋กœ ํ™œ์šฉ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ธ๊ฐ„์— ์˜ํ•œ ๋ฐ์ดํ„ฐ ๋ผ๋ฒจ๋ง์€ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค๊ณ  ํ™•์žฅ์„ฑ์ด ๋‚ฎ๊ธฐ ๋•Œ๋ฌธ์—, LLM์„ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ ํ•ฉ์„ฑ(Data Synthesis)์ด ํ•„์ˆ˜์ ์ธ ์š”์†Œ๋กœ ์ž๋ฆฌ ์žก์•˜์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด DataFlow๋Š” LLM ์ฃผ๋„ ๋ฐ์ดํ„ฐ ํ•ฉ์„ฑ์„ ์ตœ์šฐ์„  ์ˆœ์œ„๋กœ ๋‘๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐํ”Œ๋กœ์šฐ ์ถ”์ƒํ™”(Programmable Dataflow Abstraction)๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. DataFlow๋Š” ๋ฏธ์„ธํ•œ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•œ ์—ฐ์‚ฐ์ž(Operator)๋ฅผ ์ œ๊ณตํ•˜๊ณ , ๋ช…์‹œ์ ์ด๊ณ  ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ ํŒŒ์ดํ”„๋ผ์ธ ์ •์˜๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ๋‹ค์–‘ํ•œ LLM ๋ฐฑ์—”๋“œ์™€ ์Šคํ† ๋ฆฌ์ง€์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š” ์œ ์—ฐ์„ฑ์„ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ ์ค€๋น„ ๊ณผ์ •์„ ๋‹จ์ˆœํ•œ ์ „์ฒ˜๋ฆฌ๊ฐ€ ์•„๋‹Œ, ๊ณ ํ’ˆ์งˆ์˜ ํ•ฉ์„ฑ ์ฝ”ํผ์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ํ•ต์‹ฌ ์—”์ง€๋‹ˆ์–ด๋ง ๋‹จ๊ณ„๋กœ ๊ฒฉ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

DataFlow ๊ฐœ์š” ๋ฐ ๊ตฌ์กฐ

DataFlow๋Š” ๋‹จ์ˆœํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ, ๋ฐ์ดํ„ฐ ์ค€๋น„์˜ ์ „์ฒด ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ž๋™ํ™”ํ•˜๋Š” ํฌ๊ด„์ ์ธ ์‹œ์Šคํ…œ์œผ๋กœ, ๋‹ค์Œ ์—ฌ์„ฏ๊ฐ€์ง€ ํ•ต์‹ฌ ์ฒ ํ•™์„ ๋ฐ”ํƒ•์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค:

  • ์‚ฌ์šฉ ํŽธ์˜์„ฑ(Ease of Use): PyTorch์—์„œ ์˜๊ฐ์„ ๋ฐ›์€ IDE ์นœํ™”์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜์—ฌ, ์‚ฌ์šฉ์ž๊ฐ€ ์ตœ์†Œํ•œ์˜ ์ƒ์šฉ๊ตฌ(boilerplate) ์ฝ”๋“œ๋งŒ์œผ๋กœ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

  • ํ™•์žฅ์„ฑ(Extensibility): torch.nn.Module ๊ณผ ์œ ์‚ฌํ•œ ๋ชจ๋“ˆํ˜• ์ถ”์ƒํ™”๋ฅผ ๋”ฐ๋ฅด๋ฉฐ, ์ƒˆ๋กœ์šด ์—ฐ์‚ฐ์ž๋‚˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ 'ํ”Œ๋Ÿฌ๊ทธ ์•ค ํ”Œ๋ ˆ์ด(plug-and-play)' ์ปดํฌ๋„ŒํŠธ์ฒ˜๋Ÿผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ธฐ์กด ์›Œํฌํ”Œ๋กœ์šฐ์™€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ†ตํ•ฉ๋œ ํŒจ๋Ÿฌ๋‹ค์ž„(Unified Paradigm): ์ด์งˆ์ ์ธ ๋ฐ์ดํ„ฐ ์ค€๋น„ ์›Œํฌํ”Œ๋กœ์šฐ๋“ค์„ ํ‘œ์ค€ํ™”๋œ ์ถ”์ƒํ™” ๊ณ„์ธต์œผ๋กœ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๊ด€์„ฑ๊ณผ ์žฌํ˜„์„ฑ์„ ๋ณด์žฅํ•˜๋Š” 'ํ‘œ์ค€ํ™”'์™€ ๋„๋ฉ”์ธ๋ณ„๋กœ ํ•„์š”ํ•œ '์ปค์Šคํ„ฐ๋งˆ์ด์ง•' ์‚ฌ์ด์˜ ๊ท ํ˜•์„ ๋งž์ถฐ, ํŒŒ์ดํ”„๋ผ์ธ์„ ํšจ์œจ์ ์œผ๋กœ ์žฌ์‚ฌ์šฉํ•˜๊ณ  ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

  • ํšจ์œจ์„ฑ(Performance Efficiency): DataFlow์˜ ๊ณต์‹ ํŒŒ์ดํ”„๋ผ์ธ๋“ค์€ ์ตœ์‹ (SOTA) ๋ฐ์ดํ„ฐ ์ค€๋น„ ๋ฐฉ๋ฒ•๋“ค๊ณผ ๋Œ€๋“ฑํ•˜๊ฑฐ๋‚˜ ๊ทธ ์ด์ƒ์˜ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•˜๋ฉฐ, ์ด๋Ÿฌํ•œ ์‹œ์Šคํ…œ ํ†ตํ•ฉ์ด ์‹ค์งˆ์ ์ธ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š์Œ์„ ์ž…์ฆํ•ฉ๋‹ˆ๋‹ค.

  • ์ง€๋Šฅํ˜• ์ž๋™ํ™”(Intelligent Automation): ๊ฒฝ๋Ÿ‰ํ™”๋œ ์—์ด์ „ํŠธ ์„œ๋ธŒ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•ด ์ž์—ฐ์–ด๋กœ ๋œ ์‚ฌ์šฉ์ž ์˜๋„๋ฅผ ํ•ด์„ํ•˜๊ณ , ์—ฐ์‚ฐ์ž์™€ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ฑฐ๋‚˜ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ดํ•‘์„ ์ง€์›ํ•˜๊ณ  ์ˆ˜๋™ ์—”์ง€๋‹ˆ์–ด๋ง ์ž‘์—…์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค.

  • ์˜คํ”ˆ์†Œ์Šค ์ƒํƒœ๊ณ„ ๊ตฌ์ถ•(Open Source Paradigm): DataFlow๋Š” LLM ๋ฐ์ดํ„ฐ ์ค€๋น„๋ฅผ ์œ„ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ‘œ์ค€์ด ๋˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ํ†ตํ•ฉ๋œ ์ถ”์ƒํ™”๋ฅผ ํ†ตํ•ด ํŒŒ์ดํ”„๋ผ์ธ์„ ์žฌํ˜„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๊ณต์œ ํ•˜๊ณ , LLM ๋ฐฑ์—”๋“œ๋ฅผ ํˆฌ๋ช…ํ•˜๊ฒŒ ๊ต์ฒดํ•˜๋ฉฐ, ํ†ต์ œ๋œ ์‹คํ—˜์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

DataFlow์˜ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

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

๋จผ์ €, DataFlow-Core(ํ•ต์‹ฌ ์—”์ง„) ๊ณ„์ธต์ด ์žˆ์Šต๋‹ˆ๋‹ค. DataFlow-Core ๊ณ„์ธต์€ ์‹œ์Šคํ…œ์˜ ์‹คํ–‰ ๊ธฐํŒ ์—ญํ• ์„ ํ•˜๋ฉฐ, ์Šคํ† ๋ฆฌ์ง€ ์ถ”์ƒํ™”, LLM ์„œ๋น™, ์—ฐ์‚ฐ์ž(Operator), ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ(Prompt Template)์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด๋“ค์€ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜์ด ์‹คํ–‰๋˜๋Š” ๋ฌผ๋ฆฌ์ , ๋…ผ๋ฆฌ์  ๊ธฐ๋ฐ˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ LLM ์„œ๋น™ ๊ณ„์ธต์€ vLLM์ด๋‚˜ SGLang ๊ฐ™์€ ๋กœ์ปฌ ๊ณ ์† ์ถ”๋ก  ์—”์ง„๊ณผ Gemini, ChatGPT ๊ฐ™์€ ์›๊ฒฉ API๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ, ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐฑ์—”๋“œ ์ธํ”„๋ผ์˜ ์ฐจ์ด๋ฅผ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ  ๋™์ผํ•œ ์ฝ”๋“œ๋กœ ๋ชจ๋ธ์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ๋Š” Pipeline Zoo(ํŒŒ์ดํ”„๋ผ์ธ ์ €์žฅ์†Œ) ๊ณ„์ธต์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. Pipeline Zoo์—์„œ๋Š” ํ…์ŠคํŠธ ์ฒ˜๋ฆฌ, ์ˆ˜ํ•™์  ์ถ”๋ก , ์ฝ”๋“œ ์ƒ์„ฑ, Text-to-SQL, ์—์ด์ „ํŠธ RAG ๋“ฑ ๋‹ค์–‘ํ•œ ๋„๋ฉ”์ธ์— ๋Œ€ํ•ด ๋ฏธ๋ฆฌ ์ •์˜๋œ ์ตœ์ฒจ๋‹จ(SOTA) ํŒŒ์ดํ”„๋ผ์ธ๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋“ค์€ ์ด ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ž์‹ ์˜ ๋ชฉ์ ์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•˜์—ฌ ์ฆ‰์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ธ๋ฒˆ์งธ๋Š” Control Layer(์ œ์–ด ๊ณ„์ธต) ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์Šคํ…œ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์ ‘์ ์œผ๋กœ, DataFlow-CLI(Command-Line Interface) ๋ฐ DataFlow-Agent๊ฐ€ ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. DataFlow-CLI๋Š” ๋ช…์‹œ์ ์ธ ๋ช…๋ น์„ ํ†ตํ•ด ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹คํ–‰ํ•˜๊ณ  ํ™•์žฅ ํŒจํ‚ค์ง€์˜ ๋ผˆ๋Œ€(Scaffolding)๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, DataFlow-Agent๋Š” ์ž์—ฐ์–ด ๋ช…๋ น์„ ํ•ด์„ํ•˜์—ฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ๋Š” DataFlow-Ecosystem(ํ™•์žฅ ์ƒํƒœ๊ณ„) ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๊ฐœ๋ฐœํ•œ ์—ฐ์‚ฐ์ž๋‚˜ ํŒŒ์ดํ”„๋ผ์ธ์„ Python ํŒจํ‚ค์ง€ ํ˜•ํƒœ๋กœ ๋ฐฐํฌํ•˜๊ณ  ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด DataFlow๋Š” ์ •์ฒด๋œ ์‹œ์Šคํ…œ์ด ์•„๋‹ˆ๋ผ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ํ•จ๊ป˜ ์ง„ํ™”ํ•˜๋Š” ํ”Œ๋žซํผ์ด ๋ฉ๋‹ˆ๋‹ค.

์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค

DataFlow์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํ๋ฆ„์€ ์ž…๋ ฅ์—์„œ ์ถœ๋ ฅ๊นŒ์ง€ ์ผ๊ด€๋œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์€ JSON, Parquet, SQL ๋กœ๊ทธ, ์ฝ”๋“œ ์ €์žฅ์†Œ, PDF ๋“ฑ ๋‹ค์–‘ํ•œ ํ˜•์‹์˜ ์›์ฒœ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ ๋‚ด๋ถ€์ ์œผ๋กœ ํ†ต์ผ๋œ ํ‘œ(Tabular) ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ์—์ด์ „ํŠธ๊ฐ€ ์ƒ์„ฑํ•œ ํŒŒ์ดํ”„๋ผ์ธ์— ๋”ฐ๋ผ ์—ฐ์‚ฐ์ž๋“ค์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์—ฐ์‚ฐ์ž๋Š” ๊ณต์œ  ์Šคํ† ๋ฆฌ์ง€์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์™€ ๋ณ€ํ™˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์Šคํ† ๋ฆฌ์ง€์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ LLM์˜ ์ถ”๋ก ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ†ตํ•ฉ ์„œ๋น™ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋ชจ๋ธ์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ข…์ ์œผ๋กœ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ์…‹์€ ๊ณ ํ’ˆ์งˆ์˜ ํ•™์Šต ๋ฐ์ดํ„ฐ๋กœ์„œ ๋‹ค์šด์ŠคํŠธ๋ฆผ LLM ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ฆ‰์‹œ ํˆฌ์ž…๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DataFlow ํ”„๋ ˆ์ž„์›Œํฌ ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„ ์ƒ์„ธ

DataFlow๊ฐ€ ๊ธฐ์กด ์‹œ์Šคํ…œ๊ณผ ๊ฐ€์žฅ ์ฐจ๋ณ„ํ™”๋˜๋Š” ์ง€์ ์€ ๋ฐ”๋กœ ์ถ”์ƒํ™”(Abstraction)์™€ ๋ชจ๋“ˆํ™”(Modularity)์˜ ๊นŠ์ด์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” DataFlow์˜ ๊ธฐ์ˆ ์  ์„ค๊ณ„๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋„ค ๊ฐ€์ง€ ๊ธฐ๋‘ฅ(Architectural Pillars)์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค:

  • ์ „์—ญ ์Šคํ† ๋ฆฌ์ง€ ์ถ”์ƒํ™” (Global Storage Abstraction): ๋ฐ์ดํ„ฐ์…‹์˜ ํ‘œ์ค€์ ์ธ ํ‘œ(tabular) ํ˜•์‹์„ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์‹œ์Šคํ…œ ๋‚ด์—์„œ ์ด๋ฃจ์–ด์ง€๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์„ ์ค‘์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์™€ ์—ฐ์‚ฐ์ž ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ผ๊ด€๋œ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

  • ๊ณ„์ธต์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค (Hierarchical Programming Interfaces): LLM ์„œ๋น™(Serving), ์—ฐ์‚ฐ์ž(Operators), ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ, ๊ทธ๋ฆฌ๊ณ  ํŒŒ์ดํ”„๋ผ์ธ์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ จ์˜ ๊ณ„์ธตํ™”๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ์ฒด๊ณ„์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ค€๋น„ ๋กœ์ง์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์›์น™์— ๊ธฐ๋ฐ˜ํ•œ ์—ฐ์‚ฐ์ž ๋ถ„๋ฅ˜ ์ฒด๊ณ„ (Principled Operator Categorization Scheme): ๋ฌดํ•œํžˆ ํ™•์žฅ๋  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋„๋ฉ”์ธ์˜ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์†Œ์ˆ˜์˜ ํ•ต์‹ฌ ๋ณ€ํ™˜ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ(primitives) ์‚ฌ์ด์˜ ๊ท ํ˜•์„ ๋งž์ถ”๊ธฐ ์œ„ํ•œ ์ฒด๊ณ„์ ์ธ ๋ถ„๋ฅ˜ ๋ฐฉ์‹์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ํ™•์žฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜ (Extension Mechanism): ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๊ฐœ๋ฐœํ•œ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ํ†ตํ•ด ์ƒํƒœ๊ณ„๊ฐ€ ์ง€์†์ ์œผ๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ํ™•์žฅ ๊ตฌ์กฐ๋ฅผ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธ€๋กœ๋ฒŒ ์Šคํ† ๋ฆฌ์ง€ ์ถ”์ƒํ™” (Global Storage Abstraction)

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

DataFlowStorage๋Š” ๋ฌผ๋ฆฌ์ ์ธ ์ €์žฅ ๋ฐฉ์‹(ํŒŒ์ผ ์‹œ์Šคํ…œ, ์˜ค๋ธŒ์ ํŠธ ์Šคํ† ๋ฆฌ์ง€, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ)๊ณผ ์—ฐ์‚ฐ์ž์˜ ๋กœ์ง์„ ์ฒ ์ €ํžˆ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์—ฐ์‚ฐ์ž๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์‹ค์ œ๋กœ ์–ด๋””์— ์ €์žฅ๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ, ์˜ค์ง read() ์™€ write() ๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์™€ ์ƒํ˜ธ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. read()๋Š” ํ˜„์žฌ ๋ฐ์ดํ„ฐ์…‹์„ ์—ฐ์‚ฐ์ž๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๊ฐ€์ ธ์˜ค๊ณ , write()๋Š” ์ฒ˜๋ฆฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ๋ฐ์ดํ„ฐ์…‹์— ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋ชจ๋“  ์—ฐ์‚ฐ์ž๋Š” read-transform-write ํŒจํ„ด์„ ๋”ฐ๋ฅด๊ฒŒ ๋˜๋ฉฐ, ๋•๋ถ„์— ๊ฐœ๋ฐœ์ž๋Š” ์Šคํ† ๋ฆฌ์ง€ ๋ฐฑ์—”๋“œ๋ฅผ Pandas DataFrame์—์„œ ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋ณ€๊ฒฝํ•˜๋”๋ผ๋„ ์—ฐ์‚ฐ์ž ์ฝ”๋“œ๋ฅผ ์ „ํ˜€ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ณ„์ธต์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค (Hierarchical Programming Interfaces)

DataFlow๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ต์ˆ™ํ•˜๊ณ  ์ง๊ด€์ ์ธ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด PyTorch์™€ ์œ ์‚ฌํ•œ ๊ณ„์ธต์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ฑ„ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํฌ๊ฒŒ LLM ์„œ๋น™, ์—ฐ์‚ฐ์ž, ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ, ํŒŒ์ดํ”„๋ผ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

LLM ์„œ๋น™(LLM Serving API): ๋‹ค์–‘ํ•œ LLM์„ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์€ ๋ณต์žกํ•œ ์ผ์ž…๋‹ˆ๋‹ค. ๊ฐ๊ธฐ ๋‹ค๋ฅธ API ์—”๋“œํฌ์ธํŠธ, ์š”์ฒญ ํ˜•์‹, ์†๋„ ์ œํ•œ ๋“ฑ์„ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. DataFlow๋Š” ์ด๋ฅผ generate_from_input(user_inputs, system_prompt, json_schema) ๋ผ๋Š” ๋‹จ์ผ ํ•จ์ˆ˜๋กœ ์ถ”์ƒํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด generate_from_input() ํ•จ์ˆ˜๋Š” ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ, ์žฌ์‹œ๋„ ์ „๋žต, ์š”์ฒญ ๋ผ์šฐํŒ…๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ๋กœ์ง์„ ๋‚ด๋ถ€์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋‹จ์ˆœํžˆ ์ž…๋ ฅ ํ…์ŠคํŠธ์™€ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ๋งŒ ์ œ๊ณตํ•˜๋ฉด ๋˜๋ฉฐ, ๋กœ์ปฌ GPU์—์„œ ์‹คํ–‰๋˜๋Š” vLLM๊ณผ ๊ฐ™์€ ๋กœ์ปฌ ์ถ”๋ก  ์—”์ง„(Local Inference Engine)์„ ์‚ฌ์šฉํ•˜๋“ , ์›๊ฒฉ์˜ GPT-4 API์™€ ๊ฐ™์€ API ๊ธฐ๋ฐ˜์˜ ์„œ๋น„์Šค(Online API-based Service)๋ฅผ ์‚ฌ์šฉํ•˜๋“  ์ฝ”๋“œ๋Š” ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‹คํ—˜ ํ™˜๊ฒฝ๊ณผ ๋ฐฐํฌ ํ™˜๊ฒฝ ๊ฐ„์˜ ๊ฐ„๊ทน์„ ์ค„์—ฌ์ฃผ๋Š” ํ•ต์‹ฌ์ ์ธ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

์—ฐ์‚ฐ์ž ์ธํ„ฐํŽ˜์ด์Šค(Operator Programming Interface): ์—ฐ์‚ฐ์ž(Operator)๋Š” DataFlow์˜ ๊ธฐ๋ณธ ์ฒ˜๋ฆฌ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์—ฐ์‚ฐ์ž๋Š” ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„(__init__ )์™€ ์‹คํ–‰ ๋‹จ๊ณ„(run )๋กœ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์—์„œ๋Š” ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •, LLM ์„œ๋น™ ๊ฐ์ฒด ์—ฐ๊ฒฐ, ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ ๋กœ๋”ฉ๊ณผ ๊ฐ™์€ ์ •์ ์ธ ๊ตฌ์„ฑ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, ์‹คํ–‰ ๋‹จ๊ณ„์—์„œ๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ๋กœ์ง๋งŒ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์—ฐ์‚ฐ์ž ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ํŠนํžˆ ์ฃผ๋ชฉํ•  ๋งŒํ•œ ์ ์€ ์—ฐ์‚ฐ์ž์˜ ์œ ์—ฐํ•œ ์ž…์ถœ๋ ฅ ๋ฐ”์ธ๋”ฉ(Key-Binding) ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์—ฐ์‚ฐ์ž์˜ run() ๋ฉ”์„œ๋“œ๋Š” ์ „์ฒด ๋ฐ์ดํ„ฐ์…‹๊ณผ ํ•จ๊ป˜ input_key ์™€ output_key ๋งคํ•‘ ์ •๋ณด๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ์…‹์—๋Š” "question"์ด๋ผ๋Š” ์ปฌ๋Ÿผ์ด ์žˆ๊ณ , ์—ฐ์‚ฐ์ž๋Š” "prompt"๋ผ๋Š” ์ž…๋ ฅ์„ ๊ธฐ๋Œ€ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. ๊ธฐ์กด ๋ฐฉ์‹์ด๋ผ๋ฉด ๋ฐ์ดํ„ฐ์…‹์˜ ์ปฌ๋Ÿผ๋ช…์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ–ˆ๊ฒ ์ง€๋งŒ, DataFlow์—์„œ๋Š” ์‹คํ–‰ ์‹œ์ ์— input_key={"prompt": "question"}์ด๋ผ๊ณ  ์ง€์ •ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์—ฐ์‚ฐ์ž์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ณ , ์„œ๋กœ ๋‹ค๋ฅธ ์Šคํ‚ค๋งˆ๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ์…‹๋“ค์„ ์œ ์—ฐํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ(Prompt Template Interface): ๋งŽ์€ LLM ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋กœ์ง๊ณผ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋’ค์„ž์—ฌ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. DataFlow๋Š” ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ์„ ๋ณ„๋„์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. PromptTemplate ํด๋ž˜์Šค๋Š” build_prompt() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์™€ ์Šคํ‚ค๋งˆ ์ •๋ณด๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์ตœ์ข… ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• ์„ ์ „๋‹ดํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ถ„๋ฆฌ๋Š” ์—„์ฒญ๋‚œ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Text-to-SQL ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” SQLGenerator ์—ฐ์‚ฐ์ž๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ฉ์‹œ๋‹ค. MySQL์„ ์œ„ํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ์™€ SQLite๋ฅผ ์œ„ํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, ์—ฐ์‚ฐ์ž์˜ ๋‚ด๋ถ€ ๋กœ์ง(๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ , ๋ชจ๋ธ์„ ํ˜ธ์ถœํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณผ์ •)์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ฐจ์ด๋Š” ์˜ค์ง ํ”„๋กฌํ”„ํŠธ ๋‚ด์šฉ๋ฟ์ž…๋‹ˆ๋‹ค. DataFlow์—์„œ๋Š” ์—ฐ์‚ฐ์ž ์ฝ”๋“œ๋Š” ๊ทธ๋Œ€๋กœ ๋‘๊ณ , ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ ๊ฐ์ฒด๋งŒ ๊ต์ฒดํ•จ์œผ๋กœ์จ ์ด๋ฅผ ์†์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ดํ”„๋ผ์ธ ์ธํ„ฐํŽ˜์ด์Šค(Pipeline Composition Interface): ํŒŒ์ดํ”„๋ผ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์—ฐ์‚ฐ์ž๋“ค์„ ์กฐ๋ฆฝํ•˜์—ฌ ์ „์ฒด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. PyTorch์˜ nn.Module ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ, Pipeline ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ __init__ ์—์„œ ํ•„์š”ํ•œ ์—ฐ์‚ฐ์ž๋“ค์„ ์„ ์–ธํ•˜๊ณ , forward() ๋ฉ”์„œ๋“œ์—์„œ ์ด๋“ค์˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ดํ”„๋ผ์ธ์€ ๋‹จ์ˆœํžˆ ์ˆœ์ฐจ์ ์ธ ์‹คํ–‰๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, compile() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•œ ์ •์  ๋ถ„์„ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ๋Š” ์—ฐ์‚ฐ์ž ๊ฐ„์˜ ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„(DAG)๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ปฌ๋Ÿผ์ด ์ด์ „ ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€, ํƒ€์ž…์€ ๋งž๋Š”์ง€ ๋“ฑ์„ ์‹คํ–‰ ์ „์— ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, '์ง€์—ฐ๋œ ์‹คํ–‰ ๊ณ„ํš(Deferred Execution Plan)'์„ ์ƒ์„ฑํ•˜์—ฌ, ๊ธด ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ž‘์—… ์ค‘๊ฐ„์— ์ฒดํฌํฌ์ธํŠธ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์ง€์ ๋ถ€ํ„ฐ ์žฌ๊ฐœ(Resume)ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ํ•„์ˆ˜์ ์ธ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

์—ฐ์‚ฐ์ž์˜ ์ฒด๊ณ„์  ๋ถ„๋ฅ˜(Operator Categorization)

DataFlow๋Š” ์•ฝ 200๊ฐœ์— ๋‹ฌํ•˜๋Š” ๋ฐฉ๋Œ€ํ•œ ์—ฐ์‚ฐ์ž ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด, DataFlow๋Š” ๋‹ค์ฐจ์›์ ์ธ ๋ถ„๋ฅ˜ ์ฒด๊ณ„๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์ฐจ์›์€ ๋ชจ๋‹ฌ๋ฆฌํ‹ฐ(Modality) ์ž…๋‹ˆ๋‹ค. ํ…์ŠคํŠธ, ์ด๋ฏธ์ง€, ๋ฌธ์„œ ๋“ฑ ๋ฐ์ดํ„ฐ์˜ ์œ ํ˜•์— ๋”ฐ๋ผ ์—ฐ์‚ฐ์ž๋ฅผ ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ฐ์‚ฐ์ž๊ฐ€ ์ž˜๋ชป ์—ฐ๊ฒฐ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ฐจ์›์€ ๋„๋ฉ”์ธ(Core vs Domain) ์ž…๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์˜ ๊ธฐ๋ณธ ์ฒ ํ•™์„ ๊ตฌํ˜„ํ•˜๋Š” ํ•ต์‹ฌ ์—ฐ์‚ฐ์ž(Core)์™€ ํŠน์ • ๋ถ„์•ผ์— ํŠนํ™”๋œ ๋„๋ฉ”์ธ ์—ฐ์‚ฐ์ž(Domain)๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ, ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋™์‹œ์— ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค.

์„ธ ๋ฒˆ์งธ์ด์ž ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ฐจ์›์€ ๊ธฐ๋Šฅ(Functionality) ์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜์ž…๋‹ˆ๋‹ค. ์ด๋Š” DataFlow๊ฐ€ ์ถ”๊ตฌํ•˜๋Š” ์ƒ์„ฑ-ํ‰๊ฐ€-ํ•„ํ„ฐ๋ง-์ •์ œ(Generate-Evaluate-Filter-Refine) ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

DataFlow๊ฐ€ ์ถ”๊ตฌํ•˜๋Š” ์ƒ์„ฑ-ํ‰๊ฐ€-ํ•„ํ„ฐ๋ง-์ •์ œ(Generate-Evaluate-Filter-Refine) ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๊ตฌ์ฒดํ™”ํ•˜๊ธฐ ์œ„ํ•ด, ๊ฐ๊ฐ ๋ช…ํ™•ํ•œ ์˜๋ฏธ๋ก ๊ณผ ๋ช…๋ช… ๊ทœ์น™์„ ๊ฐ€์ง„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„ค ๊ฐ€์ง€ ์—ฐ์‚ฐ์ž ๋ฒ”์ฃผ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค:

  • ์ƒ์„ฑ(Generate): ๋ฐ์ดํ„ฐ์˜ ํ–‰(Row)์ด๋‚˜ ์—ด(Column)์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด AnswerGenerator ๋Š” ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•˜์—ฌ ์—ด์„ ์ถ”๊ฐ€ํ•˜๊ณ , RowGenerator ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฆ๊ฐ•ํ•˜์—ฌ ํ–‰์„ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค.
  • ํ‰๊ฐ€(Evaluate): ๋ฐ์ดํ„ฐ์˜ ํ’ˆ์งˆ, ๋‚œ์ด๋„, ์ •ํ™•์„ฑ ๋“ฑ์„ ์ ์ˆ˜ํ™”ํ•ฉ๋‹ˆ๋‹ค. SampleEvaluator ๋Š” ๊ฐœ๋ณ„ ์ƒ˜ํ”Œ์„ ํ‰๊ฐ€ํ•˜๊ณ , DatasetEvaluator ๋Š” ์ „์ฒด ๋ฐ์ดํ„ฐ์…‹์˜ ํ†ต๊ณ„๋ฅผ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ํ•„ํ„ฐ๋ง(Filter): ํ‰๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ธฐ์ค€์— ๋ฏธ๋‹ฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ์˜ ํ’ˆ์งˆ ๋ฐ€๋„๋ฅผ ๋†’์ด๋Š” ํ•ต์‹ฌ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.
  • ์ •์ œ(Refine): ๋ฐ์ดํ„ฐ์˜ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ํ˜•์‹์„ ๋‹ค๋“ฌ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์ •๋ณด๋ฅผ ๋งˆ์Šคํ‚นํ•˜๊ฑฐ๋‚˜, ํ…์ŠคํŠธ์˜ ํฌ๋งท์„ ํ†ต์ผํ•˜๋Š” ์ž‘์—… ๋“ฑ์ด ์ด์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

์ด์™€ ๊ฐ™์€ ๋ถ„๋ฅ˜ ์ฒด๊ณ„์— ์ต์ˆ™ํ•ด์ง€๋ฉด, ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์˜ ๋ชฉ์ ์— ๋งž๋Š” ์—ฐ์‚ฐ์ž๋ฅผ ์ง๊ด€์ ์œผ๋กœ ์„ ํƒํ•˜๊ณ  ์กฐ๋ฆฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ฌดํ•œํ•œ ํ™•์žฅ์„ ์œ„ํ•œ DataFlow ์ƒํƒœ๊ณ„ (DataFlow-Ecosystem)

ํ†ตํ•ฉ ๋ฐ์ดํ„ฐ ์ค€๋น„ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ํ•„์—ฐ์ ์œผ๋กœ ๋Š์ž„์—†์ด ๋“ฑ์žฅํ•˜๋Š” ์ƒˆ๋กœ์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ˆ˜์šฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ, DataFlow๋Š” ์ด๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด DataFlow-Extension ์ด๋ผ๋Š” ๊ฐœ๋…์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค . ์ด๋Š” ์ถ”๊ฐ€์ ์ธ ์—ฐ์‚ฐ์ž, ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ, ๊ทธ๋ฆฌ๊ณ  ํŒŒ์ดํ”„๋ผ์ธ์„ ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ๋กœ ์บก์Аํ™”ํ•œ Python ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ์ž ๊ธฐ์—ฌ ๊ธฐ๋ฐ˜์˜ ํ™•์žฅ ํŒจํ‚ค์ง€๋“ค์ด ๋ชจ์—ฌ ๊ฑฐ๋Œ€ํ•œ DataFlow-Ecosystem ์„ ํ˜•์„ฑํ•˜๋Š”๋ฐ, ์ด๋Š” ๋งˆ์น˜ Python์˜ ํŒจํ‚ค์ง€ ์ƒํƒœ๊ณ„์™€ ์œ ์‚ฌํ•œ 'ํ”Œ๋Ÿฌ๊ทธ ์•ค ํ”Œ๋ ˆ์ด(Plug-and-Play)' ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์—ฐ๊ตฌ์ž๋“ค์€ ์ž์‹ ์ด ๊ฐœ๋ฐœํ•œ ๋„๋ฉ”์ธ ํŠนํ™” ๊ธฐ๋Šฅ์„ ๋…๋ฆฝ์ ์ธ ํŒจํ‚ค์ง€๋กœ ๋ฐฐํฌํ•˜๊ณ , ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์€ ์ด๋ฅผ pip install ๊ณผ import ๋ฅผ ํ†ตํ•ด ์ž์‹ ์˜ ํ™˜๊ฒฝ์— ์ฆ‰์‹œ ์ ์šฉํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ƒํƒœ๊ณ„ ํ™•์žฅ์„ ๊ธฐ์ˆ ์ ์œผ๋กœ ์ง€์›ํ•˜๊ณ  ๊ฐœ๋ฐœ ์žฅ๋ฒฝ์„ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด, DataFlow๋Š” CLI(Command-Line Interface) ๋„๊ตฌ๋ฅผ ํ†ตํ•œ ๊ฐ•๋ ฅํ•œ ์ž๋™ํ™” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ช‡ ๊ฐ€์ง€ ์ƒ์œ„ ์ˆ˜์ค€์˜ ๋ช…์„ธ๋งŒ ์ž…๋ ฅํ•˜๋ฉด, CLI๊ฐ€ ์ž๋™์œผ๋กœ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ์˜ ์ „์ฒด ์ €์žฅ์†Œ ๊ตฌ์กฐ(Scaffolding)๋ฅผ ์ƒ์„ฑํ•ด ์ค๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์—ฐ์‚ฐ์ž ์Šคํ…(Stub), ํ…œํ”Œ๋ฆฟ, ํŒŒ์ดํ”„๋ผ์ธ ์ฝ”๋“œ ๋“ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด, ๊ฐœ๋ฐœ์ž๋Š” ๋ฒˆ๊ฑฐ๋กœ์šด ์ดˆ๊ธฐ ์„ค์ • ์—†์ด ํ•ต์‹ฌ ๋กœ์ง ๊ตฌํ˜„์—๋งŒ ์ง‘์ค‘ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค . ๋” ๋‚˜์•„๊ฐ€, ์•ž์„œ ์„ค๋ช…ํ•œ DataFlow-Agent ๋Š” ์ž์—ฐ์–ด ์˜๋„๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์ด๋Ÿฌํ•œ ํ™•์žฅ ํŒจํ‚ค์ง€์— ๋“ค์–ด๊ฐˆ ์—ฐ์‚ฐ์ž๋‚˜ ํŒŒ์ดํ”„๋ผ์ธ ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ํ•ฉ์„ฑํ•˜๊ณ  ๋””๋ฒ„๊น…๊นŒ์ง€ ์ˆ˜ํ–‰ํ•ด ์คŒ์œผ๋กœ์จ, ๊ณ ํ’ˆ์งˆ ํ™•์žฅ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ๋“œ๋Š” ๋น„์šฉ์„ ํš๊ธฐ์ ์œผ๋กœ ์ ˆ๊ฐ์‹œํ‚ต๋‹ˆ๋‹ค . ๊ฒฐ๋ก ์ ์œผ๋กœ DataFlow๋Š” ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋“ค์„ ํ†ตํ•ด ํ‘œ์ค€ํ™”๋œ ์—ฐ์‚ฐ์ž์™€ ํŒŒ์ดํ”„๋ผ์ธ ๋ ˆ์‹œํ”ผ๊ฐ€ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋‚ด์—์„œ ๊ณต์œ ๋˜๊ณ , ๋ณต์ œ๋˜๋ฉฐ, ์ง€์†์ ์œผ๋กœ ๊ฐœ์„ ๋˜๋Š” ์„ ์ˆœํ™˜ ๊ตฌ์กฐ์˜ ์˜คํ”ˆ์†Œ์Šค ์ƒํƒœ๊ณ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

DataFlow-Agent: ์ž์—ฐ์–ด๋กœ ๋งŒ๋“œ๋Š” ํŒŒ์ดํ”„๋ผ์ธ

DataFlow์˜ ํ˜์‹ ์ ์ธ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋Š” DataFlow-Agent์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ฝ”๋”ฉ ์ง€์‹์ด ๋ถ€์กฑํ•œ ์‚ฌ์šฉ์ž๋‚˜ ๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ดํ•‘์„ ์›ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด, ์ž์—ฐ์–ด ๋ช…๋ น๋งŒ์œผ๋กœ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์ง€๋Šฅํ˜• ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๊ณ„์ธต์ž…๋‹ˆ๋‹ค.

DataFlow-Agent์˜ ์—์ด์ „ํŠธ ๊ตฌ์„ฑ

DataFlow-Agent๋Š” LangGraph๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋ฉฐ, ์•„๋ž˜์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ ์ „๋ฌธ ์—์ด์ „ํŠธ๋“ค ๊ฐ„์˜ ์ •๊ตํ•œ ํ˜‘์—… ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค:

  1. ์˜๋„ ๋ถ„์„ ์—์ด์ „ํŠธ(Intent Analysis Agent): ์‚ฌ์šฉ์ž์˜ ์ถ”์ƒ์ ์ด๊ณ  ๋ชจํ˜ธํ•œ ์ž์—ฐ์–ด ์š”์ฒญ์„ ๋ถ„์„ํ•˜์—ฌ, ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ตฌ์ฒด์ ์ธ ํ•˜์œ„ ์˜๋„(Sub-intent)๋“ค์˜ ์‹œํ€€์Šค๋กœ ๋ถ„ํ•ดํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "์ˆ˜ํ•™ ๋ฌธ์ œ ๋ฐ์ดํ„ฐ์…‹์„ ๋งŒ๋“ค์–ด์ค˜"๋ผ๋Š” ์š”์ฒญ์„ "๋ฌธ์ œ ์ƒ์„ฑ -> ๋‚œ์ด๋„ ํ‰๊ฐ€ -> ์ €ํ’ˆ์งˆ ํ•„ํ„ฐ๋ง"์ด๋ผ๋Š” ๋‹จ๊ณ„๋กœ ๊ตฌ์ฒดํ™”ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋ฐ์ดํ„ฐ ๋ผ์šฐํŒ… ์—์ด์ „ํŠธ(Data Routing Agent): ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ์˜ ํŠน์„ฑ์„ ๋ถ„์„ํ•˜์—ฌ ์ ์ ˆํ•œ ์ฒ˜๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ํŒŒ์ดํ”„๋ผ์ธ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๊ฐ€์ƒ์˜ ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ(Mock Data)๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋“œ๋ผ์ด-๋Ÿฐ(Dry-run)์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

  3. ์—ฐ์‚ฐ์ž ๊ฒ€์ƒ‰ ์—์ด์ „ํŠธ(Operator Retrieval Agent): ๋ถ„ํ•ด๋œ ํ•˜์œ„ ์˜๋„๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด DataFlow์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์—ฐ์‚ฐ์ž๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

  4. ์—ฐ์‚ฐ์ž ํ•ฉ์„ฑ ์—์ด์ „ํŠธ(Operator Synthesis Agent ): ์ด ๋ถ€๋ถ„์ด DataFlow-Agent์˜ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ฐ์‚ฐ์ž๊ฐ€ ์—†๋‹ค๋ฉด, ์ด ์—์ด์ „ํŠธ๋Š” RAG(Retrieval-Augmented Generation)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ์—ฐ์‚ฐ์ž ์ฝ”๋“œ๋ฅผ ์ฆ‰์„์—์„œ ์ž‘์„ฑ(Coding) ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ์ž๋™์œผ๋กœ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์™€ ๋””๋ฒ„๊น… ๊ณผ์ •์„ ๊ฑฐ์ณ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

  5. ์—ฐ์‚ฐ์ž ์žฌ์‚ฌ์šฉ ์—์ด์ „ํŠธ(Operator Reuse Agent): ํ•ฉ์„ฑ๋œ ์—ฐ์‚ฐ์ž ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ, ์ด๋ฅผ ํ–ฅํ›„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  6. ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• ์—์ด์ „ํŠธ(Pipeline Construction Agent): ๊ฒ€์ƒ‰๋˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ์—ฐ์‚ฐ์ž๋“ค์„ ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐฉํ–ฅ์„ฑ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„(DAG) ํ˜•ํƒœ์˜ ํŒŒ์ดํ”„๋ผ์ธ์„ ์กฐ๋ฆฝํ•ฉ๋‹ˆ๋‹ค.

  7. ํŒŒ์ดํ”„๋ผ์ธ ๊ฒ€์ฆ ์—์ด์ „ํŠธ(Pipeline Verification Agent): ์กฐ๋ฆฝ๋œ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ƒŒ๋“œ๋ฐ•์Šค ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•ด ๋ด…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ํƒ€์ž… ๋ถˆ์ผ์น˜๋‚˜ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ์Šค์Šค๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์กฐ์ •ํ•˜๊ฑฐ๋‚˜ ์—ฐ๊ฒฐ์„ ์ˆ˜์ •ํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ž๋™ํ™”๋œ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด, ์‚ฌ์šฉ์ž๋Š” ๋ณต์žกํ•œ Python ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„๋„ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ๊ณ ๋„ํ™”๋œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ธฐ์กด์˜ ์‹œ์Šคํ…œ๋“ค์ด ๋‹จ์ˆœํžˆ ๋ฏธ๋ฆฌ ์ •์˜๋œ ์—ฐ์‚ฐ์ž์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋งŒ ์กฐ์ •ํ•ด ์ฃผ๋˜ ๊ฒƒ๊ณผ๋Š” ์ฐจ์›์ด ๋‹ค๋ฅธ ์œ ์—ฐ์„ฑ๊ณผ ์ž์œจ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ง€๋Šฅํ˜• ํŒŒ์ดํ”„๋ผ์ธ ์ถ”์ฒœ

DataFlow-Agent์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋Š” LangGraph๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ž˜ํ”„ ๊ธฐ๋ฐ˜์˜ ์ƒํƒœ ์ €์žฅ ์›Œํฌํ”Œ๋กœ์šฐ(Stateful Workflow) ๋‚ด์—์„œ ์ผ๋ จ์˜ ์ „๋ฌธํ™”๋œ ์—์ด์ „ํŠธ๋“ค์„ ์กฐ์œจํ•˜์—ฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ถ”์ฒœํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์•ž์„œ ์„ค๋ช…ํ•œ ์—์ด์ „ํŠธ๋“ค์˜ ๋™์ž‘์€ ๋‹ค์Œ์˜ ๋„ค ๊ฐ€์ง€ ์ฃผ์š” ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

์˜๋„ ๋ถ„ํ•ด (Intent Decomposition) ๋‹จ๊ณ„: ๋จผ์ €, ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ์‹œ์Šคํ…œ์ด ์‚ฌ์šฉ์ž์˜ ์ž์—ฐ์–ด ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์•ž์„œ ์„ค๋ช…ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ด ์ด ๋‹จ๊ณ„์—์„œ๋Š” ์˜๋„ ๋ถ„์„ ์—์ด์ „ํŠธ (Intent Analysis Agent) ๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์ถ”์ƒ์ ์ธ ๊ณ ์ˆ˜์ค€ ๋ชฉํ‘œ๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ผ๋ จ์˜ ๊ฐœ๋ณ„์ ์ธ ํ•˜์œ„ ์˜๋„(sub-intents)๋กœ ๋ถ„ํ•ดํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ๋ฐ์ดํ„ฐ ๋ผ์šฐํŒ… ์—์ด์ „ํŠธ (Data Routing Agent) ๊ฐ€ ๋™์‹œ์— ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์…‹์„ ํ‰๊ฐ€ํ•˜์—ฌ ๋‹ค์šด์ŠคํŠธ๋ฆผ ๋ผ์šฐํŒ…์„ ์œ„ํ•œ ํƒœ์Šคํฌ ๋ฒ”์ฃผ๋ฅผ ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ์…‹์ด ์ œ๊ณต๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์ด ์—์ด์ „ํŠธ๋Š” ์ „์ฒด ๋“œ๋ผ์ด ๋Ÿฐ(dry-run) ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ฐ€์ƒ์˜ ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ(placeholder)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค .

์—ฐ์‚ฐ์ž ํ•ฉ์„ฑ (Operator Synthesis) ๋‹จ๊ณ„: ๋‹ค์Œ์œผ๋กœ๋Š” ๋ถ„ํ•ด๋œ ํ•˜์œ„ ์˜๋„๋“ค์„ ์ถฉ์กฑ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ ์ ˆํ•œ ์—ฐ์‚ฐ์ž๋ฅผ ์ฐพ๊ฑฐ๋‚˜ ๋งŒ๋“ค์–ด๋ƒ…๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ๋Š” ์—ฐ์‚ฐ์ž ๊ฒ€์ƒ‰ ์—์ด์ „ํŠธ (Operator Retrieval Agent) ๊ฐ€ DataFlow ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๊ด€๋ จ๋œ ๊ธฐ์กด ์—ฐ์‚ฐ์ž๋“ค์„ ์ฐพ์•„๋‚ด๊ณ , ์ด๋ ‡๊ฒŒ ๊ฒ€์ƒ‰๋œ ์—ฐ์‚ฐ์ž๋“ค์˜ ํ˜ธํ™˜์„ฑ์„ ์—ฐ์‚ฐ์ž ์‹œํ€€์‹ฑ ์—์ด์ „ํŠธ (Operator Sequencing Agent) ๊ฐ€ ํ‰๊ฐ€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์—†๋Š” ๊ฒฝ์šฐ, ์—ฐ์‚ฐ์ž ์žฌ์‚ฌ์šฉ ์—์ด์ „ํŠธ(Operator Reuse Agent) ๊ฐ€ ๋จผ์ € ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ(prompt_template)์„ ํ†ตํ•ด ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์žฌ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ, ์—ฐ์‚ฐ์ž ํ•ฉ์„ฑ ์—์ด์ „ํŠธ(Operator Synthesis Agent) ๊ฐ€ RAG(๊ฒ€์ƒ‰ ์ฆ๊ฐ• ์ƒ์„ฑ) ๊ธฐ๋ฐ˜์˜ ํ“จ์ƒท ๋Ÿฌ๋‹(few-shot learning)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋Š” ์•ˆ์ •์ ์ธ ์‹คํ–‰์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ž๋™์œผ๋กœ ๋””๋ฒ„๊น…๋ฉ๋‹ˆ๋‹ค .

ํŒŒ์ดํ”„๋ผ์ธ ์กฐ๋ฆฝ (Pipeline Assembly) ๋‹จ๊ณ„: ์ด๋ ‡๊ฒŒ ๊ฒ€์ƒ‰๋˜๊ฑฐ๋‚˜ ํ•ฉ์„ฑ๋œ ๋ชจ๋“  ์—ฐ์‚ฐ์ž๊ฐ€ ๊ฒ€์ฆ๋˜๋ฉด, ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• ์—์ด์ „ํŠธ(Pipeline Construction Agent) ๊ฐ€ ์ด๋“ค์„ ํ•˜๋‚˜์˜ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ์กฐ๋ฆฝํ•ฉ๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ๋Š” ํŒŒ์ดํ”„๋ผ์ธ์„ ๋ฐฉํ–ฅ์„ฑ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„(DAG)๋กœ ํ‘œํ˜„ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๊ฐ€ ์†Œ์Šค(Source)์—์„œ ์‹ฑํฌ(Sink)๋กœ ํ๋ฅผ ์ˆ˜ ์žˆ๋„๋ก ์ดˆ๊ธฐ ์—ฐ๊ฒฐ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค .

๊ฒ€์ฆ (Verification) ๋‹จ๊ณ„: ์ด์ œ DataFlow ์‹œ์Šคํ…œ์€ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ํŒŒ์ดํ”„๋ผ์ธ์˜ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ๋Š” ํŒŒ์ดํ”„๋ผ์ธ ๊ฒ€์ฆ ์—์ด์ „ํŠธ (Pipeline Verification Agent) ๊ฐ€ ์ƒŒ๋“œ๋ฐ•์Šค ํ™˜๊ฒฝ์—์„œ ๋ฐ์ดํ„ฐ ์ƒ˜ํ”Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹คํ–‰ํ•˜๊ณ , ์—ฐ๊ฒฐ ์ƒํƒœ์™€ ๋Ÿฐํƒ€์ž„ ๋™์ž‘์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํŒŒ๋ผ๋ฏธํ„ฐ๋‚˜ ์—ฐ๊ฒฐ์„ ์กฐ์ •ํ•˜์—ฌ ์Šค์Šค๋กœ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ดํ”„๋ผ์ธ์ด ๊ฒ€์ฆ์„ ํ†ต๊ณผํ•˜๋ฉด, ๊ฒฐ๊ณผ ๋ณด๊ณ  ์—์ด์ „ํŠธ(Result Reporting Agent) ๊ฐ€ ์ตœ์ข… ๋ฆฌํฌํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ดํ”„๋ผ์ธ ์ •์˜๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

Text-to-SQL ์‚ฌ์šฉ ์‚ฌ๋ก€ ๋ฐ ํŒŒ์ดํ”„๋ผ์ธ

DataFlow ํŒ€์€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋ฒ”์šฉ์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ์ž…์ฆํ•˜๊ธฐ ์œ„ํ•ด, ํ˜„์žฌ LLM ์—ฐ๊ตฌ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•˜๊ฒŒ ๋‹ค๋ค„์ง€๋Š” ๋ช‡ ๊ฐ€์ง€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋“ค์— ๋Œ€ํ•œ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์—ฌ ์‹คํ—˜์„ ์ˆ˜ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด ์„น์…˜ ๋ฐ ๋‹ค์Œ ์‹คํ—˜ ๊ฒฐ๊ณผ ์„น์…˜์˜ ๊ฐ ์‚ฌ๋ก€๋“ค์€ ํ•ด๋‹น ๋„๋ฉ”์ธ์˜ ํŠน์„ฑ์— ๋งž์ถฐ ์ •๊ตํ•˜๊ฒŒ ์„ค๊ณ„๋œ ์—ฐ์‚ฐ์ž๋“ค์˜ ์กฐํ•ฉ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

DataFlow ์‚ฌ์šฉ๊ณผ ๊ด€๋ จํ•œ ๋” ์ƒ์„ธํ•œ ํŠœํ† ๋ฆฌ์–ผ์ด๋‚˜ ํŒŒ์ดํ”„๋ผ์ธ ์˜ˆ์‹œ, ์—ฐ์‚ฐ์ž ์ˆ˜์ค€์˜ ๋ฌธ์„œ๋Š” DataFlow ํ™ˆํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”:

์‚ฌ์šฉ ์‚ฌ๋ก€. Text-to-SQL ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ (Text-to-SQL Data Pipeline)

์ž์—ฐ์–ด ์งˆ๋ฌธ์„ ์ •ํ™•ํ•œ SQL ์ฟผ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” Text-to-SQL ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋งค์šฐ ์ •๊ตํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. DataFlow๋Š” ์ด๋ฅผ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ํ™œ์šฉํ•œ ํ•ฉ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ดํ”„๋ผ์ธ์˜ ํ•ต์‹ฌ ์—ฐ์‚ฐ์ž๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • SQL Generator: ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ(ํ…Œ์ด๋ธ” ๊ตฌ์กฐ, ์ปฌ๋Ÿผ ๋“ฑ)๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ, '๋‹จ์ˆœํ•จ'๋ถ€ํ„ฐ '๋งค์šฐ ๋ณต์žกํ•จ'๊นŒ์ง€ 4๋‹จ๊ณ„ ๋‚œ์ด๋„์˜ SQL ์ฟผ๋ฆฌ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ํŒจํ„ด์˜ ์ฟผ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค.

  • SQL Augmentor: ๊ธฐ์กด์˜ ์‹œ๋“œ(Seed) SQL ์ฟผ๋ฆฌ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„, ์ด๋ฅผ ๋ณ€ํ˜•ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๋‹ค์–‘์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ๊ตฌ์กฐ ๋ณ€๊ฒฝ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ณ€๊ฒฝ, ๋ณต์žก๋„ ์ฆ๊ฐ€ ๋“ฑ 6๊ฐ€์ง€ ์ฆ๊ฐ• ์ „๋žต์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ํ’๋ถ€ํ•จ์„ ๋”ํ•ฉ๋‹ˆ๋‹ค.

  • Execution Filter: ์ƒ์„ฑ๋œ SQL์ด ๋ฌธ๋ฒ•์ ์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ์ง€๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ์ง€๋ฅผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ฟผ๋ฆฌ๋Š” ๊ณผ๊ฐํžˆ ํ•„ํ„ฐ๋งํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ํ’ˆ์งˆ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

  • Question Generator: ์ƒ์„ฑ๋œ SQL ์ฟผ๋ฆฌ์˜ ์˜๋ฏธ๋ฅผ ์ •ํ™•ํžˆ ๋ฐ˜์˜ํ•˜๋Š” ์ž์—ฐ์–ด ์งˆ๋ฌธ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ, ์งˆ๋ฌธ์˜ ์Šคํƒ€์ผ(๊ฒฉ์‹์ฒด, ๊ตฌ์–ด์ฒด, ๋ชจํ˜ธํ•œ ์งˆ๋ฌธ ๋“ฑ)์„ ๋‹ค์–‘ํ•˜๊ฒŒ ์กฐ์ ˆํ•˜์—ฌ ๋ชจ๋ธ์˜ ๋Œ€์‘ ๋Šฅ๋ ฅ์„ ๋†’์ž…๋‹ˆ๋‹ค.

  • CoT Generator: ๋‹จ์ˆœํžˆ ์งˆ๋ฌธ๊ณผ ์ •๋‹ต SQL๋งŒ ์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์–ด๋–ค ๋…ผ๋ฆฌ์  ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ํ•ด๋‹น SQL์ด ๋„์ถœ๋˜์—ˆ๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•˜๋Š” '์‚ฌ๊ณ  ์‚ฌ์Šฌ(Chain-of-Thought)'์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋ธ์˜ ์ถ”๋ก  ๋Šฅ๋ ฅ์„ ํš๊ธฐ์ ์œผ๋กœ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์—ฐ์‚ฐ์ž๋“ค์€ SQL ์ƒ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ(SQL Generation Pipeline) ๋ฐ SQL ์ •์ œ ํŒŒ์ดํ”„๋ผ์ธ(SQL Refinement Pipeline) ์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. SQL ์ƒ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ์€ ์Šคํ‚ค๋งˆ ์ •๋ณด๋งŒ์œผ๋กœ ์ œ๋กœ ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ˜๋ฉด, SQL ์ •์ œ ํŒŒ์ดํ”„๋ผ์ธ์€ ๊ธฐ์กด์˜ ์‹œ๋“œ ๋ฐ์ดํ„ฐ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ์ฆ๊ฐ• ๋ฐ ์ •์ œ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค๋Š” ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ํŒŒ์ดํ”„๋ผ์ธ ๋ชจ๋‘ ์ƒ์„ฑ-ํ‰๊ฐ€-ํ•„ํ„ฐ๋ง-์ •์ œ์˜ ์ˆœํ™˜ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅด๋ฉฐ, ์ตœ์ข…์ ์œผ๋กœ๋Š” SQL Component Classifier ๋ฐ SQL Execution Classifier ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ๋‚œ์ด๋„๋ฅผ ๋ผ๋ฒจ๋งํ•จ์œผ๋กœ์จ ํ•™์Šต ๋ฐ์ดํ„ฐ๋กœ์„œ์˜ ๊ฐ€์น˜๋ฅผ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.


๋˜ํ•œ, ์ด๋Ÿฌํ•œ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์ด ์•ˆ์ •์ ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฒฌ๊ณ ํ•œ ์ธํ”„๋ผ๊ฐ€ ๋’ท๋ฐ›์นจ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. DataFlow๋Š” ์ด๋ฅผ ์œ„ํ•ด Database Manager ๋ชจ๋“ˆ์„ ๋„์ž…ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒํ˜ธ์ž‘์šฉ์˜ ๋ณต์žก์„ฑ์„ ์ถ”์ƒํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“ˆ์€ connect_db (์—ฐ๊ฒฐ), execute_sql (์‹คํ–‰), get_schema (๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ถ”์ถœ)์™€ ๊ฐ™์€ ํ‘œ์ค€ํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•œ DatabaseConnector ์ถ”์ƒ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” MySQL, SQLite, PostgreSQL ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์— ๋งž์ถฐ ์ด ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด, ์ƒ์œ„ ์—ฐ์‚ฐ์ž ๋กœ์ง์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ๋‹ค์–‘ํ•œ DB ๋ฐฑ์—”๋“œ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๊ต์ฒดํ•˜๋ฉฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์‹œ์Šคํ…œ์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋†’์ด๊ณ  ๋†’์€ ๋™์‹œ์„ฑ ๋ถ€ํ•˜์—์„œ๋„ ์•ˆ์ •์ ์ธ ์‹คํ–‰์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

์ด ์™ธ์—๋„ DataFlow๋Š” Prompt Template ๋ชจ๋“ˆ์„ ํ†ตํ•ด ํ”„๋กฌํ”„ํŠธ ์—”์ง€๋‹ˆ์–ด๋ง์˜ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. Text-to-SQL ์ž‘์—…๋งŒ ํ•˜๋”๋ผ๋„ ๊ธฐ๋ณธ CRUD ์ฟผ๋ฆฌ ์ƒ์„ฑ, ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์šฉ SQL ์ƒ์„ฑ, ๋‚œ์ด๋„๋ณ„ ์ƒ์„ฑ ๋“ฑ ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ๊ฐ ์‹œ๋‚˜๋ฆฌ์˜ค๋งˆ๋‹ค ์ตœ์ ํ™”๋œ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. DataFlow๋Š” ์—ฐ์‚ฐ์ž ๋กœ์ง๊ณผ ํ”„๋กฌํ”„ํŠธ ๊ตฌ์„ฑ์„ ๋ถ„๋ฆฌํ•˜์—ฌ, Prompt ํด๋ž˜์Šค๋งŒ ๊ต์ฒดํ•˜๋ฉด ๋™์ผํ•œ SQL Generator ์—ฐ์‚ฐ์ž๋ฅผ ์ „ํ˜€ ๋‹ค๋ฅธ ๋ชฉ์ ์˜ ์ž‘์—…์— ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์ƒˆ๋กœ์šด Prompt ํด๋ž˜์Šค ๋‚ด์— build_prompt ๋ฉ”์„œ๋“œ๋งŒ ์žฌ์ •์˜ํ•˜๋ฉด ๋˜๋ฏ€๋กœ, ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์ด๊ณ  ํŒŒ์ดํ”„๋ผ์ธ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํฌ๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„ค๊ณ„๋Š” DataFlow๊ฐ€ ๋‹จ์ˆœํ•œ ๋„๊ตฌ ๋ชจ์Œ์ด ์•„๋‹ˆ๋ผ, ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ ๋ ˆ๋ฒจ์˜ ํ”„๋ ˆ์ž„์›Œํฌ์ž„์„ ์ฆ๋ช…ํ•ฉ๋‹ˆ๋‹ค.

DataFlow ์„ฑ๋Šฅ ์‹คํ—˜

์—ฐ๊ตฌ์ง„๋“ค์€ ํ…์ŠคํŠธ, ์ˆ˜ํ•™, ์ฝ”๋“œ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ๋ถ€ํ„ฐ DataFlow๋ฅผ ํ™œ์šฉํ•ด ๊ตฌ์ถ•ํ•œ Text-to-SQL ๋ฐ AgenticRAG ์›Œํฌํ”Œ๋กœ์šฐ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ํฌ๊ด„์ ์ธ ์‹คํ—˜์„ ์ˆ˜ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค. Recall ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ํ•™์Šตํ•œ AgenticRAG ์‹คํ—˜์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์‹คํ—˜์€ LLaMA-Factory ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•ด ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‹ค์–‘ํ•œ ์ž‘์—… ์ „๋ฐ˜์— ๊ฑธ์นœ ๋ชจ๋ธ์˜ ์ผ๋ฐ˜์ ์ธ ์ง€์‹œ๋ฌธ ํŠœ๋‹ ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ๋ชจ๋‹ฌ๋ฆฌํ‹ฐ๋ฅผ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์‹คํ—˜1. ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ค€๋น„(Text Data Preparation)

DataFlow ์—ฐ๊ตฌ์ง„์€ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ค€๋น„๊ฐ€ ๋ชจ๋ธ ์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด, ์‚ฌ์ „ ํ•™์Šต(PT, Pre-Training)๊ณผ ๋ฏธ์„ธ ์กฐ์ •(SFT) ๋‘ ๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๊ด‘๋ฒ”์œ„ํ•œ ์‹คํ—˜์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค:

์‚ฌ์ „ ํ•™์Šต ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง (Pre-training Data Filtering): ์—ฐ๊ตฌ์ง„์€ ๋จผ์ € 627B ํ† ํฐ ๊ทœ๋ชจ์˜ SlimPajama ์ฝ”ํผ์Šค์—์„œ 100B ํ† ํฐ์„ ์ถ”์ถœํ•œ ๋’ค, DataFlow์˜ ํ…์ŠคํŠธ ํ•„ํ„ฐ๋ง ํŒŒ์ดํ”„๋ผ์ธ(dataflow/operators/text_pt/filter)์„ ์ ์šฉํ•˜์—ฌ 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ƒ์œ„ 30%์— ํ•ด๋‹นํ•˜๋Š” ์•ฝ 30B ๊ทœ๋ชจ์˜ ํ† ํฐ์„ ์„ ๋ณ„ํ•˜์˜€์Šต๋‹ˆ๋‹ค:

  • Random-30B: ๋ฌด์ž‘์œ„ ์ƒ˜ํ”Œ๋ง์„ ์ˆ˜ํ–‰
  • FineWeb-Edu-30B: FineWeb-Edu์—์„œ ๊ต์œก์  ํ•„ํ„ฐ๋ง(Educational Filtering)์„ ์ˆ˜ํ–‰
  • Qurating-30B: Qurating Filter๋ฅผ ์ ์šฉ(educational_value โ‰ฅ 7.5, facts_and_trivia โ‰ฅ 4.0, required_expertise โ‰ฅ 5.0, writing_style โ‰ฅ 1.0)
  • DataFlow-30B: DataFlow PT ํ•„ํ„ฐ๋ฅผ ๊ต์ฐจ ์ ์šฉํ•œ ์œ„ ์ƒ์œ„ 30%๋ฅผ ์„ ํƒ

์ด๋ ‡๊ฒŒ ์„ ๋ณ„ํ•œ 4์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ์…‹์„ ๊ฐ€์ง€๊ณ  Qwen2.5-0.5B ๋ชจ๋ธ์„ ์‚ฌ์ „ํ•™์Šต์„ ํ–ˆ์„ ๋•Œ์˜ ๋ฒค์น˜๋งˆํฌ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค:

DataFlow์˜ ํ•„ํ„ฐ๋ฅผ ํ†ต๊ณผํ•œ ๋ฐ์ดํ„ฐ(DataFlow-30B)๋กœ ํ•™์Šตํ•œ ๋ชจ๋ธ์ด ARC, MMLU, HellaSwag ๋“ฑ 6๊ฐœ ์ผ๋ฐ˜ ๋ฒค์น˜๋งˆํฌ ํ‰๊ท ์—์„œ 35.69์ ์„ ๊ธฐ๋กํ•˜์—ฌ ๊ฐ€์žฅ ๋†’์€ ์„ฑ๋Šฅ์„ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ์ด๋Š” FineWeb-Edu(35.57์ )๋‚˜ Qurating(35.02์ )๋ณด๋‹ค ๋†’์€ ์ˆ˜์น˜๋กœ, DataFlow์˜ ๋‹ค์ค‘ ํ•„ํ„ฐ ๊ต์ฐจ ์ ์šฉ ๋ฐฉ์‹์ด ์˜๋ฏธ๋ก ์ ์œผ๋กœ ๋” ์ผ๊ด€๋˜๊ณ  ๊นจ๋—ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ๋ณ„ํ•จ์„ ์ž…์ฆํ•˜์˜€์Šต๋‹ˆ๋‹ค.

SFT ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง ๋ฐ ํ•ฉ์„ฑ (SFT Data Filtering & Synthesis): ์†Œ๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹์„ ํ™œ์šฉํ•œ SFT(Supervised Fine-Tuning) ๋‹จ๊ณ„์—์„œ๋„ DataFlow์˜ ํšจ๊ณผ๋Š” ๋šœ๋ ทํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ตฌ์ง„์€ WizardLM๊ณผ Alpaca ๋ฐ์ดํ„ฐ์…‹์—์„œ ๋ฌด์ž‘์œ„๋กœ ์ถ”์ถœํ•œ 5,000๊ฐœ(5K) ์ƒ˜ํ”Œ๊ณผ, DataFlow ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ํ•„ํ„ฐ๋งํ•œ 5K ์ƒ˜ํ”Œ์„ ๋น„๊ตํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฐ๊ตฌ์ง„์€ DataFlow์˜ 'Condor Generator'์™€ 'Condor Refiner' ํŒŒ์ดํ”„๋ผ์ธ์„ ์‚ฌ์šฉํ•ด 15,000๊ฐœ(15K)์˜ ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ(DataFlow-SFT-15K)๋ฅผ ์ž์ฒด ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ํฅ๋ฏธ๋กœ์šด ์ ์€ ์ด ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ๋Š” ๋ณ„๋„์˜ ํ•„ํ„ฐ๋ง ์—†์ด๋„ ์ด๋ฏธ Alpaca๋‚˜ WizardLM์˜ ํ•„ํ„ฐ๋ง๋œ ๋ฒ„์ „๋ณด๋‹ค ์ˆ˜ํ•™ ์„ฑ๋Šฅ(49.3์  vs 39.8~44.8์ )์ด ์›”๋“ฑํžˆ ๋†’์•˜๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ž˜ ์„ค๊ณ„๋œ ํ•ฉ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ์ด ๊ธฐ์กด์˜ ์ธ๊ฐ„ ์ˆ˜์ง‘ ๋ฐ์ดํ„ฐ๋ณด๋‹ค ๋” ๊ณ ํ’ˆ์งˆ์˜ ํ•™์Šต ์‹ ํ˜ธ๋ฅผ ์ œ๊ณตํ•จ์„ ์‹œ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋Œ€ํ™” ๋„๋ฉ”์ธ ํ•ฉ์„ฑ (Conversation-Domain Synthesis): ์ฑ—๋ด‡์˜ ๋Œ€ํ™” ๋Šฅ๋ ฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์‹คํ—˜๋„ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ตฌ์ง„์€ ๋Œ€ํ™” ์ƒ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด DataFlow-Chat-15K ๋ฐ์ดํ„ฐ์…‹์„ ๊ตฌ์ถ•ํ•˜๊ณ  Qwen2.5-7B-Base ๋ชจ๋ธ์„ ํŠœ๋‹ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๋น„๊ตํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ShareGPT-15K๋‚˜ UltraChat-15K ๋ฐ์ดํ„ฐ์…‹๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ, DataFlow ๋ฐ์ดํ„ฐ๋กœ ํ•™์Šตํ•œ ๋ชจ๋ธ์€ ์ผ๋ฐ˜ ๋ฒค์น˜๋งˆํฌ ํ‰๊ท  ์ ์ˆ˜๋ฅผ 26.36์ ์—์„œ 28.21์ ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ์ง€์‹œ(instruction) ์ดํ–‰ ๋Šฅ๋ ฅ์„ ํ‰๊ฐ€ํ•˜๋Š” AlpacaEval ์ง€ํ‘œ์—์„œ๋Š” 7.05์ ์—์„œ 10.11์ ์œผ๋กœ ๋น„์•ฝ์ ์ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๊ธฐ๋กํ•˜๋ฉฐ, DataFlow์˜ ์ •์ œ ๋ฐ ํ•„ํ„ฐ๋ง ์Šคํƒ์ด ๋Œ€ํ™”ํ˜• ๋ชจ๋ธ ๊ตฌ์ถ•์—๋„ ๋งค์šฐ ํšจ๊ณผ์ ์ž„์„ ์ฆ๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹คํ—˜2. ์ˆ˜ํ•™ ์ถ”๋ก  ๋ฐ์ดํ„ฐ ์ค€๋น„(Math Reasoning Data Preparation)

DataFlow ์—ฐ๊ตฌ์ง„์€ LLM์˜ ์ˆ˜ํ•™์  ๋ฌธ์ œ ํ•ด๊ฒฐ ๋Šฅ๋ ฅ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด, 'DataFlow Reasoning Pipeline'์„ ๊ตฌ์ถ•ํ•˜๊ณ  ์ด๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ๊ณ ํ’ˆ์งˆ ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ์˜ ํšจ๊ณผ๋ฅผ ๊ฒ€์ฆํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ์ดํ”„๋ผ์ธ์€ ๋‹จ์ˆœํžˆ ๋ฌธ์ œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด, ๋ฌธ์ œ ํ•ฉ์„ฑ(Problem Synthesis) โ†’ ํ’ˆ์งˆ ๊ฒ€์ฆ(Quality Verification) โ†’ ์‚ฌ๊ณ  ์‚ฌ์Šฌ ์ƒ์„ฑ(CoT Generation) ์˜ 3๋‹จ๊ณ„ ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

์—ฐ๊ตฌ์ง„์€ NuminaMath ๋ฅผ ์‹œ๋“œ ๋ฐ์ดํ„ฐ๋กœ ํ™œ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ํ•ฉ์„ฑํ•˜๊ณ , MathQ-Verify ๋ชจ๋“ˆ์„ ํ†ตํ•ด ๋ชจํ˜ธํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ์—„๊ฒฉํžˆ ํ•„ํ„ฐ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์ดํ›„ ๊ฒ€์ฆ๋œ ๋ฌธ์ œ์— ๋Œ€ํ•ด DeepSeek-R1 ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ๊ณ„๋ณ„ ์ถ”๋ก  ๊ณผ์ •(CoT)์„ ์ƒ์„ฑํ•จ์œผ๋กœ์จ DataFlow-Reasoning-10K ๋ฐ์ดํ„ฐ์…‹์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋น„๊ต ์‹คํ—˜์„ ์œ„ํ•ด Open-R1 ๊ณผ Synthetic-1 ๋ฐ์ดํ„ฐ์…‹์—์„œ ๋ฌด์ž‘์œ„๋กœ ์ถ”์ถœํ•œ 10k ์ƒ˜ํ”Œ๊ณผ ์„ฑ๋Šฅ์„ ๋น„๊ตํ•˜์˜€์œผ๋ฉฐ, Qwen2.5-32B-Instruct ๋ชจ๋ธ์„ 1 epoch ๋ฐ 2 epoch ๋™์•ˆ ํŠœ๋‹ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์‹คํ—˜ ๊ฒฐ๊ณผ, Synthetic-1์ด๋‚˜ Open-R1์˜ ๋ฌด์ž‘์œ„ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ๋ณด๋‹ค DataFlow๋กœ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ์…‹์ด ๋” ์šฐ์ˆ˜ํ•œ ์„ฑ๋Šฅ์„ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ํŠนํžˆ 2 epoch ํ•™์Šต ์‹œ DataFlow-Reasoning-10K๋Š” ํ‰๊ท  ์ ์ˆ˜ 55.7์  ์„ ๊ธฐ๋กํ•˜์—ฌ Open-R1(54.2์ )๊ณผ Synthetic-1(54.0์ )์„ ๋ชจ๋‘ ์•ž์งˆ๋ €์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‹จ์ˆœํžˆ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค, MathQ-Verify ์™€ ๊ฐ™์€ ๊ฒ€์ฆ ๋ชจ๋“ˆ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์„ ํ™•๋ณดํ•˜๊ณ  ๊ณ ํ’ˆ์งˆ์˜ CoT๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋ชจ๋ธ์˜ ์ถ”๋ก  ๋Šฅ๋ ฅ ํ–ฅ์ƒ์— ๊ฒฐ์ •์ ์ž„์„ ์‹œ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์‹คํ—˜3. ์ฝ”๋“œ ๋ฐ์ดํ„ฐ ์ค€๋น„(Code Data Preparation)

์ฝ”๋“œ ์ƒ์„ฑ ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ์—ฐ๊ตฌ์ง„์€ Ling-Coder-SFT ๋ฐ์ดํ„ฐ์…‹์„ ์‹œ๋“œ๋กœ ํ™œ์šฉํ•˜์—ฌ DataFlow์˜ CodeGenDataset_APIPipeline์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์žฅํ–ˆ์Šต๋‹ˆ๋‹ค . ์ด ํŒŒ์ดํ”„๋ผ์ธ์˜ ํ•ต์‹ฌ์€ ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋งŒ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹ค์ œ ์‹คํ–‰(Execution)์„ ํ†ตํ•ด ๊ฒ€์ฆํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

์—ฐ๊ตฌ์ง„์€ ์ด๋ ‡๊ฒŒ ๊ตฌ์ถ•๋œ DataFlow-Code-1K/5K/10K ๋ฐ์ดํ„ฐ์…‹๊ณผ ๊ธฐ์กด์˜ ์˜คํ”ˆ์†Œ์Šค ๋ฐ์ดํ„ฐ์…‹์ธ Code Alpaca, Self-OSS-Instruct-SC2-Exec-Filter๋ฅผ ๋น„๊ตํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ณต์ •ํ•œ ๋น„๊ต๋ฅผ ์œ„ํ•ด ๋ฒ ์ด์Šค๋ผ์ธ ๋ฐ์ดํ„ฐ์…‹๋“ค๋„ 1k ๊ทœ๋ชจ๋กœ ์„œ๋ธŒ์ƒ˜ํ”Œ๋งํ•˜์—ฌ Qwen2.5-7B/14B-Instruct ๋ชจ๋ธ์„ ํŠœ๋‹ํ–ˆ์Šต๋‹ˆ๋‹ค .

์œ„ ๊ฒฐ๊ณผ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด, DataFlow๋กœ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ์…‹์€ ๋ชจ๋“  ๊ทœ๋ชจ(1k~10k)์—์„œ ๋ฒ ์ด์Šค๋ผ์ธ์„ ์••๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ DATAFLOW-CODE-10K๋กœ ํ•™์Šตํ•œ Qwen2.5-7B ๋ชจ๋ธ์€ ํ‰๊ท  46.2์ ์„ ๊ธฐ๋กํ•˜์—ฌ Code Alpaca(42.1์ ) ๋Œ€๋น„ ํฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ๋”์šฑ ์ฃผ๋ชฉํ•  ์ ์€ ์‹คํ–‰ ์ •ํ™•๋„๋ฅผ ์—„๊ฒฉํžˆ ํ‰๊ฐ€ํ•˜๋Š” LiveCodeBench์—์„œ์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ž…๋‹ˆ๋‹ค. 14B ๋ชจ๋ธ์˜ ๊ฒฝ์šฐ, ๋ฒ ์ด์Šค๋ผ์ธ ๋ฐ์ดํ„ฐ์…‹๋“ค์€ ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ค๊ธฐ๋„ ํ–ˆ์œผ๋‚˜(Code Alpaca: 28.2), DataFlow ๋ฐ์ดํ„ฐ๋Š” ์›๋ณธ ๋ชจ๋ธ ์ˆ˜์ค€์„ ์œ ์ง€ํ•˜๊ฑฐ๋‚˜ ํ–ฅ์ƒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค. ์ด๋Š” DataFlow์˜ ์‹คํ–‰ ๊ธฐ๋ฐ˜ ํ•„ํ„ฐ๋ง์ด ์ฝ”๋“œ์˜ ๋ฌธ๋ฒ•์  ์˜ค๋ฅ˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜๊นŒ์ง€ ํšจ๊ณผ์ ์œผ๋กœ ๊ฑธ๋Ÿฌ๋‚ด์–ด ๊ณ ํ’ˆ์งˆ์˜ ํ•™์Šต ์‹ ํ˜ธ๋ฅผ ์ œ๊ณตํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์‹คํ—˜4. Text-to-SQL ๋ฐ์ดํ„ฐ ์ค€๋น„(Text-to-SQL Data Preparation)

Text-to-SQL ์ž‘์—…์€ ์ž์—ฐ์–ด ์งˆ๋ฌธ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณ ๋‚œ๋„ ์ž‘์—…์œผ๋กœ, ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•์„ฑ๊ณผ ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑ์ด ๋ฌด์—‡๋ณด๋‹ค ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ตฌ์ง„์€ Spider, BIRD, EHRSQL ๋ฐ์ดํ„ฐ์…‹์„ ์‹œ๋“œ๋กœ ํ•˜์—ฌ, DataFlow ํŒŒ์ดํ”„๋ผ์ธ(SQL ์ƒ์„ฑ, ์ฆ๊ฐ•, ์‹คํ–‰ ํ•„ํ„ฐ๋ง, ์งˆ๋ฌธ ์ƒ์„ฑ, CoT ์ƒ์„ฑ)์„ ํ†ตํ•ด DataFlow-Text2SQL-90K ๋ฐ์ดํ„ฐ์…‹์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค .

์ด ์‹คํ—˜์—์„œ๋Š” Qwen2.5-Coder-7B-Instruct ๋ชจ๋ธ ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ DataFlow ๋ฐ์ดํ„ฐ์…‹๊ณผ ๊ธฐ์กด์˜ ๋Œ€๊ทœ๋ชจ ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ์…‹์ธ SynSQL์„ ๋น„๊ตํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ SynSQL์€ 250๋งŒ ๊ฐœ(2.5M)์˜ ๋ฐฉ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , 9๋งŒ ๊ฐœ์— ๋ถˆ๊ณผํ•œ DataFlow ๋ฐ์ดํ„ฐ์…‹์ด ๋” ๋›ฐ์–ด๋‚œ ํšจ์œจ์„ ๋ณด์˜€์Šต๋‹ˆ๋‹ค .

๊ฒฐ๊ณผ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, DataFlow-Text2SQL-90K๋กœ ํ•™์Šตํ•œ Qwen2.5-Coder-7B-Instruct ๋ชจ๋ธ์€ Spider ๋ฐ์ดํ„ฐ์…‹์—์„œ 85.0์˜ ์ •ํ™•๋„๋ฅผ ๊ธฐ๋กํ•˜์—ฌ SynSQL(90K)์˜ 83.1๋ฅผ ์ƒํšŒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋†€๋ผ์šด ๊ฒฐ๊ณผ๋Š” EHRSQL ๋ฒค์น˜๋งˆํฌ์—์„œ ๋‚˜ํƒ€๋‚ฌ๋Š”๋ฐ, ๋ฒ ์ด์Šค๋ผ์ธ ๋ชจ๋ธ๋“ค์ด 24~40%๋Œ€์— ๋จธ๋ฌด๋ฅผ ๋•Œ DataFlow ๋ชจ๋ธ์€ ๋ฌด๋ ค 58.7์˜ ์ •ํ™•๋„๋ฅผ ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” DataFlow ํŒŒ์ดํ”„๋ผ์ธ์ด ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” 'SQL ์‹คํ–‰ ํ•„ํ„ฐ(Execution Filter)'์™€ ๋‹ค์–‘ํ•œ '์ฆ๊ฐ• ์ „๋žต(Augmentation)'์ด ๋ฐ์ดํ„ฐ์˜ ์‹ค์งˆ์ ์ธ ํ’ˆ์งˆ๊ณผ ๋‹ค์–‘์„ฑ์„ ํš๊ธฐ์ ์œผ๋กœ ๋†’์˜€์Œ์„ ์ฆ๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์‹ฌ์ง€์–ด 9๋งŒ๊ฐœ์˜ ๋ฐ์ดํ„ฐ(DataFlow-Text2SQL-90K)๋งŒ์œผ๋กœ๋„ 250๋งŒ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ(SynSQL-2.5M)๋ฅผ ๋Šฅ๊ฐ€ํ•˜๋Š” ์„ฑ๋Šฅ(ํ‰๊ท  71.6 vs 70.0)์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

์‹คํ—˜5. ์—์ด์ „ํŠธ RAG, ์ง€์‹ ์ถ”์ถœ ๋ฐ ํ†ตํ•ฉ ๋ฐ์ดํ„ฐ ์ค€๋น„(Advanced & Unified Data Preparation)

๋งˆ์ง€๋ง‰์œผ๋กœ, DataFlow ์—ฐ๊ตฌ์ง„์€ ์—์ด์ „ํ‹ฑ RAG(Agentic RAG) ๋ถ„์•ผ์˜ ๋‚œ์ œ์ธ ๋‹ค์ค‘ ๋‹จ๊ณ„(Multi-hop) ์งˆ์˜์‘๋‹ต ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์„ฑ๋Šฅ์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด, DataFlow ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ์ž์ฒด ๋ฐ์ดํ„ฐ์…‹์„ ๊ตฌ์ถ•ํ•˜๊ณ  ๊ธฐ์กด์˜ ์ธ๊ฐ„ ๊ตฌ์ถ• ๋ฐ์ดํ„ฐ์…‹๋“ค๊ณผ ๋น„๊ต ์‹คํ—˜์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค :

๋ฐ์ดํ„ฐ์…‹ ๊ตฌ์ถ• (Dataset Construction): ์—ฐ๊ตฌ์ง„์€ ์œ„ํ‚คํ”ผ๋””์•„ ๋คํ”„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ DataFlow AgenticRAG ํŒŒ์ดํ”„๋ผ์ธ์„ ์ ์šฉํ•˜์—ฌ 10,000๊ฐœ ๊ทœ๋ชจ์˜ ๊ณ ํ’ˆ์งˆ ๋ฐ์ดํ„ฐ์…‹์ธ DataFlow-AgenticRAG-10k๋ฅผ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์ธ ์ƒ์„ฑ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค :

  • ๋ฌธ์„œ ์„ ๋ณ„ (Document Selection): ์œ„ํ‚คํ”ผ๋””์•„์—์„œ ๋ฌธ์„œ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์„ ์ •ํ•˜๋˜, ๋ฐ์ดํ„ฐ ๋ถ„ํฌ์˜ ์ค‘๋ณต์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ๋ฒค์น˜๋งˆํฌ์— ์ด๋ฏธ ํฌํ•จ๋œ ๋ฌธ์„œ๋Š” ์ฒ ์ €ํžˆ ๋ฐฐ์ œํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ์งˆ๋ฌธ ์ดˆ์•ˆ ์ƒ์„ฑ (Draft Generation): GPT-4o-mini ๋ชจ๋ธ๊ณผ DataFlow์˜ ์ƒ์„ฑ ๋ชจ๋“ˆ์„ ๊ฒฐํ•ฉํ•˜์—ฌ, ์„ ๋ณ„๋œ ๋ฌธ์„œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋‹ค์ค‘ ๋‹จ๊ณ„ ์ถ”๋ก ์ด ํ•„์š”ํ•œ ์งˆ๋ฌธ์˜ ์ดˆ์•ˆ์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ’ˆ์งˆ ๊ฒ€์ฆ (Quality Verification): ๊ฒ€์ฆ ๋ชจ๋“ˆ์„ ํ†ตํ•ด ์ค‘๊ฐ„ ์ •๋ณด ์œ ์ถœ(intermediate question leakage), ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜, ์ง€๋‚˜์น˜๊ฒŒ ๋†’๊ฑฐ๋‚˜ ๋‚ฎ์€ ๋‚œ์ด๋„ ๋“ฑ์„ ์Šคํฌ๋ฆฌ๋‹ํ•˜์—ฌ ์ตœ์ข… ๋ฐ์ดํ„ฐ์…‹์„ ํ˜•์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฐ๊ตฌ์ง„์€ ReCall ํ”„๋ ˆ์ž„์›Œํฌ์™€ Qwen2.5-7B-Instruct ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•™์Šต์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค . ๋น„๊ต ๋Œ€์ƒ์œผ๋กœ๋Š” 2WikiMultiHopQA, Musique, HotpotQA, Bamboogle ๋“ฑ ๋Œ€ํ‘œ์ ์ธ ๋‹ค์ค‘ ๋‹จ๊ณ„ QA ๋ฐ์ดํ„ฐ์…‹๋“ค์ด ์‚ฌ์šฉ๋˜์—ˆ์œผ๋ฉฐ, ๊ณต์ •ํ•œ ๋น„๊ต๋ฅผ ์œ„ํ•ด ํ•™์Šต์— ์‚ฌ์šฉ๋œ ๋ฐ์ดํ„ฐ์…‹์„ ํ‰๊ฐ€์—์„œ ์ œ์™ธํ•˜๋Š” OOD(Out-of-Distribution) ํ‰๊ท  ์ ์ˆ˜๋ฅผ ์ธก์ •ํ–ˆ์Šต๋‹ˆ๋‹ค .

์œ„ ํ‘œ๋Š” ๋‹ค์–‘ํ•œ ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ ์†Œ์Šค์— ๋”ฐ๋ฅธ ๋ชจ๋ธ์˜ Exact Match(%) ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋ฅผ ๋ถ„์„ํ•ด๋ณด๋ฉด, DataFlow๋กœ ์ƒ์„ฑ๋œ ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ(DF-AgenticRAG)๊ฐ€ ์ธ๊ฐ„์ด ๊ตฌ์ถ•ํ•œ ๋ฐ์ดํ„ฐ์…‹๋ณด๋‹ค ๋” ๋›ฐ์–ด๋‚œ ์ผ๋ฐ˜ํ™” ์„ฑ๋Šฅ์„ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ๋จผ์ € HotpotQA ๋ฐ์ดํ„ฐ๋กœ ํ•™์Šตํ•œ ๋ชจ๋ธ(OOD Avg 36.4)๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ, DataFlow ๋ชจ๋ธ์€ 37.4์ ์„ ๊ธฐ๋กํ•˜์—ฌ ์ธ๊ฐ„์ด ๋งŒ๋“  ๋ฐ์ดํ„ฐ์…‹์„ ์ƒํšŒํ•˜๋Š” ์„ฑ๋Šฅ์„ ๋ณด์˜€์œผ๋ฉฐ, Musique(42.4์ )์™€ 2Wiki(33.8์ ) ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ ํ•™์Šตํ•œ ๊ฒฝ์šฐ์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ๋„, DataFlow ๋ชจ๋ธ์€ ๊ฐ๊ฐ 43.6์  ๊ณผ 36.4์ ์„ ๊ธฐ๋กํ•˜๋ฉฐ ๊ฐ€์žฅ ๋†’์€ OOD ์ ์ˆ˜๋ฅผ ๋‹ฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค .

์ด๋Š” DataFlow ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ์ƒ์„ฑ๋œ ๋‹ค์ค‘ ๋‹จ๊ณ„ ์ถ”๋ก  ๋ฐ์ดํ„ฐ๊ฐ€ ํŠน์ • ๋ฐ์ดํ„ฐ์…‹์— ๊ณผ์ ํ•ฉ๋˜์ง€ ์•Š๊ณ , ๊ฐ•๋ ฅํ•œ ๊ต์ฐจ ๋ฐ์ดํ„ฐ์…‹ ์ผ๋ฐ˜ํ™”(Cross-dataset Generalization) ๋Šฅ๋ ฅ์„ ์ œ๊ณตํ•จ์„ ์ž…์ฆํ•ฉ๋‹ˆ๋‹ค.

์‹คํ—˜6. ์ง€์‹ ์ถ”์ถœ(Knowledge Extraction)

์—ฐ๊ตฌ์ง„์€ ์›น์ƒ์˜ ๋ฐฉ๋Œ€ํ•œ ๋น„์ •ํ˜• ์ฝ”ํผ์Šค๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด, ๋ฐ˜์ž๋™ํ™”๋œ ์ง€์‹ ์ถ”์ถœ ํŒŒ์ดํ”„๋ผ์ธ(Knowledge Extraction Pipeline) ์„ ์ œ์•ˆํ•˜๊ณ  ๊ทธ ํšจ๊ณผ๋ฅผ ์˜ํ•™ ๋„๋ฉ”์ธ์—์„œ ๊ฒ€์ฆํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ์ดํ”„๋ผ์ธ์€ MinerU ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•œ ํ…์ŠคํŠธ ์ •๊ทœํ™”, ๋ฌธ์„œ ๋ถ„ํ• , ๋…ธ์ด์ฆˆ ํ•„ํ„ฐ๋ง, ํŒฉํŠธ ๊ธฐ๋ฐ˜ QA ์ƒ์„ฑ, ๊ทธ๋ฆฌ๊ณ  ์ž๋™ํ™”๋œ ํ’ˆ์งˆ ๊ฒ€์ฆ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ๊ณ ํ’ˆ์งˆ์˜ SFT์šฉ ๋ฐ์ดํ„ฐ์…‹์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์‹คํ—˜์„ ์œ„ํ•ด ์—ฐ๊ตฌ์ง„์€ USMLE ๊ต๊ณผ์„œ(MedQA Books), NCBI์˜ StatPearls ๋…ผ๋ฌธ, ๊ทธ๋ฆฌ๊ณ  16๊ฐœ ์ „๋ฌธ ๊ธฐ๊ด€์˜ ์ž„์ƒ ๊ฐ€์ด๋“œ๋ผ์ธ ๋“ฑ์—์„œ ์ˆ˜์ง‘ํ•œ 1์–ต 4์ฒœ๋งŒ(140M) ํ† ํฐ ๋ถ„๋Ÿ‰์˜ ์›์‹œ ์˜ํ•™ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ต๊ณผ์‹œ์ผœ DataFlow-Knowledge ๋ฐ์ดํ„ฐ์…‹์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.

Qwen2.5-7B-Instruct ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ˆ˜ํ–‰ํ•œ ๋น„๊ต ์‹คํ—˜ ๊ฒฐ๊ณผ๋Š” ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. DataFlow-Knowledge ๋ฐ์ดํ„ฐ๋กœ ๋ฏธ์„ธ ์กฐ์ •(SFT)๋œ ๋ชจ๋ธ์€ ๋ชจ๋“  ๋ฒค์น˜๋งˆํฌ์—์„œ ๋ฒ ์ด์Šค๋ผ์ธ์„ ์••๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ๋‹จ์ˆœํ•œ CoT ํ”„๋กฌํ”„ํŒ…์ด๋‚˜ RAG(๊ฒ€์ƒ‰ ์ฆ๊ฐ• ์ƒ์„ฑ) ๋ฐฉ์‹๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ, DataFlow ๋ชจ๋ธ์€ PubMedQA์™€ Covert ๋ฒค์น˜๋งˆํฌ์—์„œ 15~20% ํฌ์ธํŠธ ์ด์ƒ์˜ ์ •ํ™•๋„ ํ–ฅ์ƒ์„ ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค. RAG ๋ฐฉ์‹์ด PubMedQA์—์„œ๋Š” ์†Œํญ์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๋ณด์˜€์œผ๋‚˜ Covert์™€ PubHealth์—์„œ๋Š” ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์ด ๋ถˆ์•ˆ์ •ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋Œ€์กฐ์ ์œผ๋กœ, DataFlow ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ์ •์ œ๋œ QA ๋ฐ์ดํ„ฐ๋กœ ํ•™์Šตํ•œ ๋ชจ๋ธ์€ ๋„๋ฉ”์ธ ์ง€์‹๊ณผ ์ถ”๋ก  ๋Šฅ๋ ฅ์„ ํ™•์‹คํ•˜๊ฒŒ ๋‚ด์žฌํ™”ํ–ˆ์Œ์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

์‹คํ—˜7. ํ†ตํ•ฉ ๋ฉ€ํ‹ฐ ๋„๋ฉ”์ธ ๋ฐ์ดํ„ฐ ์ค€๋น„(Unified Multi-Domain Data Preparation)

DataFlow ์—ฐ๊ตฌ์ง„์€ ๋‹จ์ผ ๋„๋ฉ”์ธ์„ ๋„˜์–ด, ์ˆ˜ํ•™, ์ฝ”๋“œ, ์ผ๋ฐ˜ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์•„์šฐ๋ฅด๋Š” ํ†ตํ•ฉ ๋ฐ์ดํ„ฐ์…‹์˜ ํšจ์šฉ์„ฑ์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด DataFlow-Instruct-10K๋ฅผ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ์…‹์€ DataFlow ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ์ƒ์„ฑ๋œ ์ˆ˜ํ•™ ๋ฌธ์ œ(3k), ์ฝ”๋“œ ์ธ์ŠคํŠธ๋Ÿญ์…˜(2k), ์ผ๋ฐ˜ ๋Œ€ํ™” ๋ฐ์ดํ„ฐ(5k) ๋“ฑ ์ด 1๋งŒ ๊ฐœ(10k)์˜ ์ƒ˜ํ”Œ๋กœ ๊ตฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ตฌ์ง„์€ ์ด๋ฅผ 100๋งŒ ๊ฐœ(1M) ๊ทœ๋ชจ์˜ ๋Œ€ํ˜• ์ผ๋ฐ˜ ๋ฐ์ดํ„ฐ์…‹์ธ Infinity-Instruct ์™€ ๋น„๊ตํ•˜์—ฌ, ์†Œ๊ทœ๋ชจ ๊ณ ํ’ˆ์งˆ ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ์˜ ํšจ์œจ์„ฑ์„ ์ž…์ฆํ•˜๊ณ ์ž ํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹คํ—˜ ๊ฒฐ๊ณผ, ๋‹จ 1๋งŒ ๊ฐœ์˜ DataFlow-Instruct-10K๋กœ ํ•™์Šตํ•œ ๋ชจ๋ธ์ด 100๋งŒ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋กœ ํ•™์Šตํ•œ Infinity-Instruct-1M ๋ชจ๋ธ๋ณด๋‹ค ์ „๋ฐ˜์ ์œผ๋กœ ์šฐ์ˆ˜ํ•œ ์„ฑ๋Šฅ์„ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ์ˆ˜ํ•™ ๋ฒค์น˜๋งˆํฌ์—์„œ Qwen2.5-7B-Base ๋ชจ๋ธ์€ DataFlow ๋ฐ์ดํ„ฐ๋กœ ํ•™์Šต ์‹œ ํ‰๊ท  46.7์ ์„ ๊ธฐ๋กํ•ด Inf-1M(33.3์ )์„ ํฌ๊ฒŒ ์•ž์„ฐ์œผ๋ฉฐ, ์ธ์ŠคํŠธ๋Ÿญ์…˜ ํŠœ๋‹๋œ ๋ชจ๋ธ(49.8์ )์— ๊ทผ์ ‘ํ•œ ์„ฑ๋Šฅ์„ ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ๋ฐ ์ผ๋ฐ˜ ์ง€์‹ ๋ฒค์น˜๋งˆํฌ์—์„œ๋„ DataFlow ๋ชจ๋ธ์€ Infinity-Instruct ๊ณ„์—ด ๋ชจ๋ธ๋“ค๋ณด๋‹ค ๋†’์€ ์ ์ˆ˜๋ฅผ ๊ธฐ๋กํ•˜๊ฑฐ๋‚˜ ๋Œ€๋“ฑํ•œ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋„๋ฉ”์ธ๋ณ„๋กœ ํŠนํ™”๋œ ๊ณ ํ’ˆ์งˆ ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ํ•™์Šต์‹œํ‚ค๋ฉด, ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ์ ๋”๋ผ๋„ ๋ชจ๋ธ์˜ ๋‹ค๋ฐฉ๋ฉด ๋Šฅ๋ ฅ์„ ํšจ์œจ์ ์œผ๋กœ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ์„ ๊ฐ•๋ ฅํ•˜๊ฒŒ ์‹œ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์‹คํ—˜8. ์—์ด์ „ํŠธ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜(Agentic Orchestration)

๋งˆ์ง€๋ง‰์œผ๋กœ, ์—ฐ๊ตฌ์ง„์€ ์ž์—ฐ์–ด ๋ช…๋ น์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜๋Š” DataFlow-Agent์˜ ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด 6๊ฐœ์˜ ๋Œ€ํ‘œ์ ์ธ ํŒŒ์ดํ”„๋ผ์ธ์— ๋Œ€ํ•ด ๋‚œ์ด๋„๋ณ„(Easy, Medium, Hard)๋กœ ์ด 18๊ฐœ์˜ ์ž์—ฐ์–ด ๊ณผ์ œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ‰๊ฐ€๋Š” ์—์ด์ „ํŠธ๊ฐ€ ์ƒ์„ฑํ•œ ํŒŒ์ดํ”„๋ผ์ธ์ด ํ…์ŠคํŠธ ๋ช…์„ธ๋ฅผ ์–ผ๋งˆ๋‚˜ ์ž˜ ์ค€์ˆ˜ํ–ˆ๋Š”์ง€(Text Specification Alignment)์™€, ์ •๋‹ต ์ฝ”๋“œ์™€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์–ผ๋งˆ๋‚˜ ์ผ์น˜ํ•˜๋Š”์ง€(Code Implementation Consistency)๋ฅผ LLM ํ‰๊ฐ€์ž(LLM-Judge)๊ฐ€ ์ฑ„์ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค.

ํ‰๊ฐ€ ๊ฒฐ๊ณผ, DataFlow-Agent๋Š” ํ…์ŠคํŠธ ๋ช…์„ธ ์ค€์ˆ˜ ์ธก๋ฉด์—์„œ ์ „์ฒด ํ‰๊ท  0.80์ ์˜ ๋†’์€ ์ ์ˆ˜๋ฅผ ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋ช…์„ธ๊ฐ€ ๊ตฌ์ฒด์ ์ธ 'Easy' ๋‚œ์ด๋„์—์„œ๋Š” 0.92์ ์˜ ๋งค์šฐ ๋†’์€ ์ •ํ™•๋„๋ฅผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, ์ฝ”๋“œ ๊ตฌํ˜„ ์ผ์น˜๋„๋Š” ํ‰๊ท  0.49์ ์œผ๋กœ ์ƒ๋Œ€์ ์œผ๋กœ ๋‚ฎ๊ฒŒ ๋‚˜ํƒ€๋‚ฌ๋Š”๋ฐ, ์ด๋Š” ๊ณผ์ œ๊ฐ€ ๋ชจํ˜ธํ•ด์งˆ์ˆ˜๋ก(Hard ๋‚œ์ด๋„ 0.23์ ) ์—์ด์ „ํŠธ๊ฐ€ ์ •๋‹ต ์ฝ”๋“œ์™€๋Š” ๋‹ค๋ฅด์ง€๋งŒ ๊ธฐ๋Šฅ์ ์œผ๋กœ ํƒ€๋‹นํ•œ ๋Œ€์•ˆ์  ํŒŒ์ดํ”„๋ผ์ธ์„ ์œ ์—ฐํ•˜๊ฒŒ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ธ ๊ฒƒ์œผ๋กœ ๋ถ„์„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์‹คํ—˜์€ DataFlow-Agent๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์˜๋„๋ฅผ ํŒŒ์•…ํ•˜์—ฌ ์‹ค์ œ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ณต์žกํ•œ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž์œจ์ ์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

DataFlow๋Š” ์ง€๊ธˆ๊นŒ์ง€ ํŒŒํŽธํ™”๋˜์–ด ์žˆ๋˜ LLM ๋ฐ์ดํ„ฐ ์ค€๋น„ ๊ณผ์ •์„ ํ•˜๋‚˜์˜ ํ†ตํ•ฉ๋œ ์‹œ์Šคํ…œ์œผ๋กœ ๋ฌถ์–ด๋‚ธ ํ˜์‹ ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. DataFlow ๊ธฐ์ˆ  ๋ฌธ์„œ๊ฐ€ ์ œ์‹œํ•˜๋Š” ํ•ต์‹ฌ ๊ฐ€์น˜๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

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

๋‘˜์งธ, ๊ณ ์„ฑ๋Šฅ(Performance) ์ž…๋‹ˆ๋‹ค. ๋ฐฉ๋Œ€ํ•œ ์‹คํ—˜์„ ํ†ตํ•ด, ์ž˜ ์„ค๊ณ„๋œ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ์ƒ์„ฑ๋œ ์†Œ๋Ÿ‰์˜ ๊ณ ํ’ˆ์งˆ ๋ฐ์ดํ„ฐ๊ฐ€ ๋Œ€๋Ÿ‰์˜ ์ •์ œ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ•๋ ฅํ•œ ๋ชจ๋ธ ์„ฑ๋Šฅ์„ ์ด๋Œ์–ด๋ƒ„์„ ์ฆ๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค.

์…‹์งธ, ์ง€๋Šฅํ™”(Intelligence) ์ž…๋‹ˆ๋‹ค. DataFlow-Agent๋ฅผ ํ†ตํ•ด ์ฝ”๋”ฉ ๋Šฅ๋ ฅ์ด ๋ถ€์กฑํ•œ ์‚ฌ์šฉ์ž๋„ ์ž์—ฐ์–ด๋งŒ์œผ๋กœ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธธ์„ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค.

DataFlow ์—ฐ๊ตฌํŒ€์€ ์—ฌ๊ธฐ์„œ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ์ƒํƒœ๊ณ„๋ฅผ ๋”์šฑ ํ™•์žฅํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ํ…์ŠคํŠธ๋ฅผ ๋„˜์–ด ์ด๋ฏธ์ง€, ๋น„๋””์˜ค, ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” DataFlow-Multimodal, ๊ณผํ•™์  ๋ฐœ๊ฒฌ์„ ์œ„ํ•œ DataFlow-AI4S, ๊ทธ๋ฆฌ๊ณ  ์‚ฐ์—… ํ˜„์žฅ์˜ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ์ตœ์ ํ™”๋œ DataFlow-Industry ๋“ฑ์„ ๊ฐœ๋ฐœํ•˜์—ฌ DataFlow๋ฅผ ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ AI ์‹œ๋Œ€์˜ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€(De facto standard)์œผ๋กœ ๋งŒ๋“ค๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

DataFlow ๊ธฐ์ˆ  ๋ฌธ์„œ

DataFlow ์†Œ๊ฐœ ๊ธ€ (์„ค์น˜ ๋ฐ ์‚ฌ์šฉ๋ฐฉ๋ฒ• ํฌํ•จ)

DataFlow GitHub ์ €์žฅ์†Œ




์ด ๊ธ€์€ GPT ๋ชจ๋ธ๋กœ ์ •๋ฆฌํ•œ ๊ธ€์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ ๊ฒƒ์œผ๋กœ, ์›๋ฌธ์˜ ๋‚ด์šฉ ๋˜๋Š” ์˜๋„์™€ ๋‹ค๋ฅด๊ฒŒ ์ •๋ฆฌ๋œ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ด€์‹ฌ์žˆ๋Š” ๋‚ด์šฉ์ด์‹œ๋ผ๋ฉด ์›๋ฌธ๋„ ํ•จ๊ป˜ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”! ์ฝ์œผ์‹œ๋ฉด์„œ ์–ด์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ๋‚ด์šฉ์„ ๋ฐœ๊ฒฌํ•˜์‹œ๋ฉด ๋ง๊ธ€๋กœ ์•Œ๋ ค์ฃผ์‹œ๊ธฐ๋ฅผ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. :hugs:

:pytorch:ํŒŒ์ดํ† ์น˜ ํ•œ๊ตญ ์‚ฌ์šฉ์ž ๋ชจ์ž„:south_korea:์ด ์ •๋ฆฌํ•œ ์ด ๊ธ€์ด ์œ ์šฉํ•˜์…จ๋‚˜์š”? ํšŒ์›์œผ๋กœ ๊ฐ€์ž…ํ•˜์‹œ๋ฉด ์ฃผ์š” ๊ธ€๋“ค์„ ์ด๋ฉ”์ผ:love_letter:๋กœ ๋ณด๋‚ด๋“œ๋ฆฝ๋‹ˆ๋‹ค! (๊ธฐ๋ณธ์€ Weekly์ง€๋งŒ Daily๋กœ ๋ณ€๊ฒฝ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.)

:wrapped_gift: ์•„๋ž˜:down_right_arrow:์ชฝ์— ์ข‹์•„์š”:+1:๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ์‹œ๋ฉด ์ƒˆ๋กœ์šด ์†Œ์‹๋“ค์„ ์ •๋ฆฌํ•˜๊ณ  ๊ณต์œ ํ•˜๋Š”๋ฐ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค~ :star_struck:

3๊ฐœ์˜ ์ข‹์•„์š”