# ๐Ÿค– AI ์ƒ์‚ฐ๊ด€๋ฆฌ ์–ด์‹œ์Šคํ„ดํŠธ ์‚ฌ์šฉ ๊ฐ€์ด๋“œ ## ๐Ÿ“‹ ๋ชฉ์ฐจ 1. [๊ฐœ์š”](#๊ฐœ์š”) 2. [์ฃผ์š” ๊ธฐ๋Šฅ](#์ฃผ์š”-๊ธฐ๋Šฅ) 3. [์„ค์น˜ ๋ฐฉ๋ฒ•](#์„ค์น˜-๋ฐฉ๋ฒ•) 4. [์‚ฌ์šฉ ๋ฐฉ๋ฒ•](#์‚ฌ์šฉ-๋ฐฉ๋ฒ•) 5. [์‹ค์ œ ์‹œ์Šคํ…œ ์—ฐ๋™](#์‹ค์ œ-์‹œ์Šคํ…œ-์—ฐ๋™) 6. [๊ณ ๊ธ‰ ์„ค์ •](#๊ณ ๊ธ‰-์„ค์ •) 7. [FAQ](#faq) --- ## ๊ฐœ์š” **AI ์ƒ์‚ฐ๊ด€๋ฆฌ ์–ด์‹œ์Šคํ„ดํŠธ**๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ์‹ ๊ทœ ์ˆ˜์ฃผ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , AI๊ฐ€ ์˜ํ–ฅ์„ ๋ถ„์„ํ•˜์—ฌ ์ตœ์ ์˜ ๋Œ€์‘ ๋ฐฉ์•ˆ์„ ์ œ์‹œํ•œ ํ›„, ๋‹ด๋‹น์ž๊ฐ€ ์„ ํƒํ•œ ์˜ต์…˜์„ ์ž๋™์œผ๋กœ ์‹œ์Šคํ…œ์— ์ ์šฉํ•˜๋Š” ์ง€๋Šฅํ˜• ์–ด์‹œ์Šคํ„ดํŠธ์ž…๋‹ˆ๋‹ค. ### ๐ŸŽฏ ํ•ต์‹ฌ ๊ฐ€์น˜ - โšก **์ฆ‰๊ฐ ๋Œ€์‘**: ์ˆ˜์ฃผ ์ž…๋ ฅ ํ›„ ์ˆ˜ ์ดˆ ๋‚ด์— AI ๋ถ„์„ ์™„๋ฃŒ - ๐Ÿง  **์ง€๋Šฅํ˜• ๋ถ„์„**: ์ƒ์‚ฐ/์ถœํ•˜/๋ฐœ์ฃผ ์ „์ฒด๋ฅผ ํ†ตํ•ฉ ๋ถ„์„ - ๐ŸŽค **ํŽธ๋ฆฌํ•œ ์ธํ„ฐํŽ˜์ด์Šค**: ์Œ์„ฑ ์•Œ๋ฆผ ๋ฐ ์Œ์„ฑ ์„ ํƒ ์ง€์› - ๐Ÿค– **์ž๋™ ์ ์šฉ**: ์„ ํƒํ•œ ์˜ต์…˜์„ ์‹œ์Šคํ…œ์— ์ž๋™ ๋ฐ˜์˜ --- ## ์ฃผ์š” ๊ธฐ๋Šฅ ### 1. ๐Ÿ” ์‹ค์‹œ๊ฐ„ ๊ฐ์ง€ - ์‹ ๊ทœ ์ˆ˜์ฃผ๊ฐ€ ์ž…๋ ฅ๋˜๋ฉด ์ฆ‰์‹œ ๊ฐ์ง€ - ๋ณ€๊ฒฝ์‚ฌํ•ญ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง ### 2. ๐Ÿค– AI ์˜ํ–ฅ ๋ถ„์„ - **๊ธฐ์กด ๊ณ„ํš ์˜ํ–ฅ๋„ ๋ถ„์„** - ์ง€์—ฐ ์˜ˆ์ƒ๋˜๋Š” ์ƒ์‚ฐ๊ณ„ํš ํŒŒ์•… - ์„ค๋น„ ๊ฐ€๋™๋ฅ  ๋ณ€ํ™” ๊ณ„์‚ฐ - ์›์ž์žฌ ๋ถ€์กฑ๋Ÿ‰ ์˜ˆ์ธก - **3๊ฐ€์ง€ ๋Œ€์‘ ๋ฐฉ์•ˆ ์ž๋™ ์ƒ์„ฑ** - ์˜ต์…˜ 1: ์•ผ๊ฐ„ ์ž‘์—… ์ถ”๊ฐ€ (์ฃผ๋กœ ์ถ”์ฒœ) - ์˜ต์…˜ 2: ๊ธฐ์กด ์ฃผ๋ฌธ ์ง€์—ฐ - ์˜ต์…˜ 3: ์™ธ์ฃผ ์ƒ์‚ฐ - **๊ฐ ์˜ต์…˜๋ณ„ ์žฅ๋‹จ์  ๋ถ„์„** - ๋น„์šฉ ์˜ํ–ฅ - ๋‚ฉ๊ธฐ ์ค€์ˆ˜ ์—ฌ๋ถ€ - ๋ฆฌ์Šคํฌ ์š”์ธ ### 3. ๐Ÿ”” ๋‹ค์–‘ํ•œ ์•Œ๋ฆผ ๋ฐฉ์‹ ```javascript // 1. ๋ธŒ๋ผ์šฐ์ € ์•Œ๋ฆผ new Notification('๐Ÿšจ ๊ธด๊ธ‰ ์ˆ˜์ฃผ ๋ฐœ์ƒ!') // 2. ์Œ์„ฑ ์•Œ๋ฆผ (TTS) aiAssistant.speak('๊ธด๊ธ‰ ์ˆ˜์ฃผ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค') // 3. ํ™”๋ฉด ํ† ์ŠคํŠธ aiAssistant.showToast('์‹ ๊ทœ ์ˆ˜์ฃผ ์ž…๋ ฅ๋จ') ``` ### 4. ๐ŸŽค ์Œ์„ฑ ์ œ์–ด - "์˜ต์…˜ 1", "์ฒซ ๋ฒˆ์งธ", "์•ผ๊ฐ„ ์ž‘์—…" ๋“ฑ์œผ๋กœ ์„ ํƒ - ํ•œ๊ตญ์–ด ์Œ์„ฑ ์ธ์‹ ์ง€์› ### 5. โšก ์ž๋™ ์ ์šฉ - ์ƒ์‚ฐ๊ณ„ํš ์ˆ˜์ • - ์ถœํ•˜๊ณ„ํš ์กฐ์ • - ๊ธด๊ธ‰ ๋ฐœ์ฃผ ์ƒ์„ฑ - ์ž‘์—…์ž ๋ฐฐ์ • - ์™ธ์ฃผ ๋ฐœ์ฃผ ์ฒ˜๋ฆฌ ### 6. ๐Ÿ“ ๊ฐ์‚ฌ ๋กœ๊ทธ - ๋ชจ๋“  AI ๊ฒฐ์ • ๊ธฐ๋ก - ๋ณ€๊ฒฝ ์ด๋ ฅ ์ถ”์  - ๋กค๋ฐฑ ๊ฐ€๋Šฅ --- ## ์„ค์น˜ ๋ฐฉ๋ฒ• ### 1๏ธโƒฃ ํŒŒ์ผ ๋ณต์‚ฌ ํ”„๋กœ์ ํŠธ์— ๋‹ค์Œ ํŒŒ์ผ๋“ค์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”: ``` ํ™”๋ฉด๊ฐœ๋ฐœ/ โ”œโ”€โ”€ js/ โ”‚ โ””โ”€โ”€ aiProductionAssistant.js โ† AI ์–ด์‹œ์Šคํ„ดํŠธ ํ•ต์‹ฌ ๋กœ์ง โ”œโ”€โ”€ css/ โ”‚ โ””โ”€โ”€ aiAssistant.css โ† UI ์Šคํƒ€์ผ โ””โ”€โ”€ ai-assistant-demo.html โ† ๋ฐ๋ชจ ํŽ˜์ด์ง€ (์ฐธ๊ณ ์šฉ) ``` ### 2๏ธโƒฃ HTML ํŒŒ์ผ์— ์ถ”๊ฐ€ ๊ธฐ์กด HTML ํŒŒ์ผ (์˜ˆ: `์ˆ˜์ฃผ๊ด€๋ฆฌ.html`)์˜ `` ํƒœ๊ทธ์— ์ถ”๊ฐ€: ```html ``` ### 3๏ธโƒฃ ์™„๋ฃŒ! ๐ŸŽ‰ ์ด์ œ `aiAssistant` ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. --- ## ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ### ๊ธฐ๋ณธ ์‚ฌ์šฉ (3๋‹จ๊ณ„) #### Step 1: AI ํ™œ์„ฑํ™” ```javascript // AI ์–ด์‹œ์Šคํ„ดํŠธ ํ™œ์„ฑํ™” aiAssistant.activate(); ``` #### Step 2: ์ˆ˜์ฃผ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ```javascript // ์‹ ๊ทœ ์ˆ˜์ฃผ ๋ฐœ์ƒ ์‹œ const newOrder = { id: 'ORD-001', item: '์ œํ’ˆA', quantity: 5000, dueDate: '2025-10-28', customer: '๊ณ ๊ฐ์‚ฌ๋ช…' }; aiAssistant.onNewOrderDetected(newOrder); ``` #### Step 3: AI๊ฐ€ ์ž๋™ ์ฒ˜๋ฆฌ 1. ์˜ํ–ฅ ๋ถ„์„ (10์ดˆ ๋‚ด์™ธ) 2. 3๊ฐ€์ง€ ์˜ต์…˜ ์ œ์‹œ 3. ๋‹ด๋‹น์ž ์„ ํƒ 4. ์ž๋™ ์ ์šฉ ์™„๋ฃŒ! --- ## ์‹ค์ œ ์‹œ์Šคํ…œ ์—ฐ๋™ ### ๐Ÿ“Œ ์ˆ˜์ฃผ๊ด€๋ฆฌ ํ™”๋ฉด ์—ฐ๋™ ์˜ˆ์‹œ ```html ์ˆ˜์ฃผ๊ด€๋ฆฌ
``` ### ๐Ÿ“Œ ์ƒ์‚ฐ๊ณ„ํš๊ด€๋ฆฌ ํ™”๋ฉด ์—ฐ๋™ ```javascript // ์ƒ์‚ฐ๊ณ„ํš๊ด€๋ฆฌ.html ๋˜๋Š” ์ƒ์‚ฐ๊ณ„ํš.js // ํ˜„์žฌ ์ƒ์‚ฐ๊ณ„ํš ๋ฐ์ดํ„ฐ๋ฅผ AI๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ „์—ญ ๋ณ€์ˆ˜๋กœ ์„ค์ • window.productionPlans = [ { id: 'P001', item: '์ œํ’ˆA', quantity: 1000, startDate: '2025-10-26', endDate: '2025-10-28', status: 'in_progress' }, // ... ๋” ๋งŽ์€ ๊ณ„ํš ]; // AI ์–ด์‹œ์Šคํ„ดํŠธ๊ฐ€ ์ƒ์‚ฐ๊ณ„ํš์„ ์ˆ˜์ •ํ•  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜ function onProductionPlanUpdated(updatedPlan) { console.log('AI๊ฐ€ ์ƒ์‚ฐ๊ณ„ํš์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค:', updatedPlan); // UI ์—…๋ฐ์ดํŠธ refreshProductionTable(); // ์„œ๋ฒ„ ๋™๊ธฐํ™” syncToServer(updatedPlan); } // AI ์–ด์‹œ์Šคํ„ดํŠธ์—๊ฒŒ ์ฝœ๋ฐฑ ๋“ฑ๋ก aiAssistant.onProductionUpdate = onProductionPlanUpdated; ``` ### ๐Ÿ“Œ ์ถœํ•˜๊ณ„ํš๊ด€๋ฆฌ ํ™”๋ฉด ์—ฐ๋™ ```javascript // ์ถœํ•˜๊ณ„ํš.js window.shipmentPlans = [ { id: 'S001', orderId: 'ORD-001', shipmentDate: '2025-10-29', quantity: 1000 } ]; // AI๊ฐ€ ์ถœํ•˜๊ณ„ํš์„ ์กฐ์ •ํ•  ๋•Œ function onShipmentPlanUpdated(updatedPlan) { console.log('์ถœํ•˜๊ณ„ํš ์กฐ์ •:', updatedPlan); refreshShipmentTable(); } aiAssistant.onShipmentUpdate = onShipmentPlanUpdated; ``` --- ## ๊ณ ๊ธ‰ ์„ค์ • ### ๐Ÿ”‘ OpenAI API ์—ฐ๋™ (์‹ค์ œ AI ์‚ฌ์šฉ) ```javascript // API ํ‚ค ์„ค์ • aiAssistant.apiKey = 'sk-your-openai-api-key'; // ์ด์ œ ์‹ค์ œ GPT-4๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค // API ํ‚ค๊ฐ€ ์—†์œผ๋ฉด ๊ทœ์น™ ๊ธฐ๋ฐ˜ ๋ถ„์„์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค ``` ### ๐ŸŽจ UI ์ปค์Šคํ„ฐ๋งˆ์ด์ง• `css/aiAssistant.css`๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ๋””์ž์ธ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: ```css /* ์˜ˆ: ๋ชจ๋‹ฌ ์ƒ‰์ƒ ๋ณ€๊ฒฝ */ .ai-modal-header { background: linear-gradient(135deg, #your-color-1, #your-color-2); } /* ๋ฒ„ํŠผ ์ƒ‰์ƒ ๋ณ€๊ฒฝ */ .btn-primary { background: linear-gradient(135deg, #your-color-1, #your-color-2); } ``` ### ๐Ÿ”ง ๋ถ„์„ ๋กœ์ง ์ปค์Šคํ„ฐ๋งˆ์ด์ง• `js/aiProductionAssistant.js`์˜ `ruleBasedAnalysis` ํ•จ์ˆ˜๋ฅผ ์ˆ˜์ •: ```javascript ruleBasedAnalysis(newOrder, currentState) { // ์—ฌ๊ธฐ์„œ ํšŒ์‚ฌ ํŠน์„ฑ์— ๋งž๊ฒŒ ๋กœ์ง ์ˆ˜์ • // ์˜ˆ: ์ผ์ผ ์ƒ์‚ฐ๋Ÿ‰ ๋ณ€๊ฒฝ const dailyCapacity = 1500; // ๊ธฐ๋ณธ 1000์—์„œ 1500์œผ๋กœ // ์˜ˆ: ์•ˆ์ „ ์žฌ๊ณ  ๊ณ„์‚ฐ ๋ฐฉ์‹ ๋ณ€๊ฒฝ const safetyStock = newOrder.quantity * 0.2; // 20% ์•ˆ์ „ ์žฌ๊ณ  // ... ๋‚˜๋จธ์ง€ ๋กœ์ง } ``` ### ๐Ÿ“Š ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ํ•จ์ˆ˜ ์—ฐ๋™ ์‹ค์ œ ์‹œ์Šคํ…œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ์ˆ˜์ •: ```javascript // js/aiProductionAssistant.js ์ˆ˜์ • getProductionPlans() { // ๋ฐฉ๋ฒ• 1: ์ „์—ญ ๋ณ€์ˆ˜์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ return window.productionPlans || []; // ๋ฐฉ๋ฒ• 2: API์—์„œ ์‹ค์‹œ๊ฐ„ ๊ฐ€์ ธ์˜ค๊ธฐ (๊ถŒ์žฅ) // return fetch('/api/production-plans').then(r => r.json()); } getInventory() { // ์‹ค์ œ ์žฌ๊ณ  ๋ฐ์ดํ„ฐ return window.inventory || {}; } // ๋‹ค๋ฅธ ํ•จ์ˆ˜๋“ค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ˆ˜์ • ``` --- ## ๋ฐ๋ชจ ํŽ˜์ด์ง€ ### ๐ŸŽฎ ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ• 1. **๋ฐ๋ชจ ํŽ˜์ด์ง€ ์—ด๊ธฐ** ``` http://localhost:8080/ํ™”๋ฉด๊ฐœ๋ฐœ/ai-assistant-demo.html ``` 2. **AI ํ™œ์„ฑํ™”** - "AI ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”" ๋ฒ„ํŠผ ํด๋ฆญ - ์ƒํƒœ๊ฐ€ "ํ™œ์„ฑํ™”๋จ"์œผ๋กœ ๋ณ€๊ฒฝ๋จ 3. **์‹œ๋‚˜๋ฆฌ์˜ค ํ…Œ์ŠคํŠธ** - ์‹œ๋‚˜๋ฆฌ์˜ค 1~3 ์ค‘ ํ•˜๋‚˜ ์„ ํƒ - AI ๋ถ„์„ ๊ฒฐ๊ณผ ํ™•์ธ - ์˜ต์…˜ ์„ ํƒ ํ›„ "์ž๋™ ์ ์šฉ" ํด๋ฆญ 4. **์Œ์„ฑ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ** - "์Œ์„ฑ ํ…Œ์ŠคํŠธ" ๋ฒ„ํŠผ์œผ๋กœ TTS ํ™•์ธ - ๋ชจ๋‹ฌ์—์„œ "๐ŸŽค ์Œ์„ฑ์œผ๋กœ ์„ ํƒ" ๋ฒ„ํŠผ์œผ๋กœ ์Œ์„ฑ ์ธ์‹ ํ…Œ์ŠคํŠธ --- ## FAQ ### Q1. AI ์—†์ด๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”? **A:** ๋„ค! OpenAI API ์—†์ด๋„ ๊ทœ์น™ ๊ธฐ๋ฐ˜ ๋ถ„์„์ด ์ž๋™์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์€ ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ### Q2. ์–ด๋–ค ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ง€์›ํ•˜๋‚˜์š”? **A:** - โœ… Chrome, Edge (๊ถŒ์žฅ) - โœ… Firefox - โš ๏ธ Safari (์ผ๋ถ€ ๊ธฐ๋Šฅ ์ œํ•œ) - โŒ IE (๋ฏธ์ง€์›) ์Œ์„ฑ ์ธ์‹์€ Chrome/Edge์—์„œ ๊ฐ€์žฅ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ### Q3. ์‹ค์‹œ๊ฐ„ ๊ฐ์ง€๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋‚˜์š”? **A:** ์ˆ˜์ฃผ ์ €์žฅ ํ•จ์ˆ˜์—์„œ `aiAssistant.onNewOrderDetected()`๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ฆ‰์‹œ AI ๋ถ„์„์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. WebSocket ์—ฐ๋™์€ ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ### Q4. ์ž๋™ ์ ์šฉ์ด ์•ˆ์ „ํ•œ๊ฐ€์š”? **A:** - โœ… ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ ๋กœ๊ทธ๋กœ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค - โœ… ๋‹ด๋‹น์ž๊ฐ€ ์ง์ ‘ ์˜ต์…˜์„ ์„ ํƒํ•ด์•ผ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค - โœ… ๋กค๋ฐฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๊ฐ€๋Šฅ - โš ๏ธ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ ์ถ”๊ฐ€ ์Šน์ธ ํ”„๋กœ์„ธ์Šค ๊ถŒ์žฅ ### Q5. ๋‹ค๋ฅธ ํ™”๋ฉด๋“ค๊ณผ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋Š”? **A:** AI๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ๊ฐ ํ™”๋ฉด์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค: ```javascript // ์ƒ์‚ฐ๊ณ„ํš ์ˆ˜์ • ์‹œ aiAssistant.onProductionUpdate = (plan) => { refreshProductionTable(); }; // ์ถœํ•˜๊ณ„ํš ์ˆ˜์ • ์‹œ aiAssistant.onShipmentUpdate = (plan) => { refreshShipmentTable(); }; ``` ### Q6. ์„ฑ๋Šฅ์€ ์–ด๋–ค๊ฐ€์š”? **A:** - ๊ทœ์น™ ๊ธฐ๋ฐ˜ ๋ถ„์„: 1์ดˆ ๋ฏธ๋งŒ - OpenAI API ๋ถ„์„: 5-15์ดˆ - ์ž๋™ ์ ์šฉ: 2-5์ดˆ ### Q7. ๋น„์šฉ์€ ์–ผ๋งˆ๋‚˜ ๋“œ๋‚˜์š”? **A:** - ๊ทœ์น™ ๊ธฐ๋ฐ˜ ๋ถ„์„: ๋ฌด๋ฃŒ - OpenAI API: ์š”์ฒญ๋‹น ์•ฝ $0.01-0.05 (GPT-4 ๊ธฐ์ค€) - ํ•˜๋ฃจ 100๊ฑด ๋ถ„์„ ์‹œ: ์•ฝ $1-5 ### Q8. ๊ธฐ์กด ์‹œ์Šคํ…œ์„ ๋งŽ์ด ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋‚˜์š”? **A:** ์•„๋‹ˆ์š”! ์ตœ์†Œ ์ˆ˜์ •์œผ๋กœ ์—ฐ๋™ ๊ฐ€๋Šฅ: ```javascript // ๊ธฐ์กด ์ €์žฅ ํ•จ์ˆ˜์— ๋”ฑ 3์ค„๋งŒ ์ถ”๊ฐ€ function saveOrder(data) { saveToDatabase(data); // ๊ธฐ์กด ์ฝ”๋“œ // ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜๋Š” ์ฝ”๋“œ (3์ค„) if (aiAssistant.isActive) { aiAssistant.onNewOrderDetected(data); } } ``` ### Q9. ๋ชจ๋ฐ”์ผ์—์„œ๋„ ์ž‘๋™ํ•˜๋‚˜์š”? **A:** - โœ… ํ™”๋ฉด์€ ๋ฐ˜์‘ํ˜•์œผ๋กœ ๋Œ€์‘ - โš ๏ธ ์Œ์„ฑ ์ธ์‹์€ ๋ชจ๋ฐ”์ผ์—์„œ ์ œํ•œ์  - โœ… ํ„ฐ์น˜ ์ธํ„ฐํŽ˜์ด์Šค ์ง€์› ### Q10. ์—ฌ๋Ÿฌ ๋ช…์ด ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋ฉด? **A:** ๊ฐ ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ๊ณต์œ ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ WebSocket ์„œ๋ฒ„ ๊ตฌ์ถ•์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. --- ## ๐Ÿš€ ๋‹ค์Œ ๋‹จ๊ณ„ ### ๋‹จ๊ณ„๋ณ„ ๊ตฌํ˜„ ๋กœ๋“œ๋งต #### โœ… Phase 1: ํ”„๋กœํ† ํƒ€์ž… (ํ˜„์žฌ) - [x] ๊ธฐ๋ณธ AI ๋ถ„์„ - [x] ์Œ์„ฑ ์•Œ๋ฆผ - [x] ๋ชจ๋‹ฌ UI - [x] ์ž๋™ ์ ์šฉ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ #### ๐Ÿ”„ Phase 2: ์‹ค์ œ ์—ฐ๋™ (2-3์ผ) - [ ] ์ˆ˜์ฃผ๊ด€๋ฆฌ ํ™”๋ฉด ์—ฐ๋™ - [ ] ์ƒ์‚ฐ๊ณ„ํš ๋ฐ์ดํ„ฐ ์—ฐ๋™ - [ ] ์ถœํ•˜๊ณ„ํš ๋ฐ์ดํ„ฐ ์—ฐ๋™ - [ ] ์„œ๋ฒ„ API ์—ฐ๋™ #### ๐ŸŽฏ Phase 3: ๊ณ ๋„ํ™” (1-2์ฃผ) - [ ] OpenAI API ํ†ตํ•ฉ - [ ] ํ•™์Šต ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ - [ ] ์ •ํ™•๋„ ํ–ฅ์ƒ - [ ] ๋Œ€์‹œ๋ณด๋“œ ์ถ”๊ฐ€ #### ๐ŸŒŸ Phase 4: ํ™•์žฅ (1๊ฐœ์›”+) - [ ] ์žฌ๊ณ  ์ตœ์ ํ™” AI - [ ] ์„ค๋น„ ๊ณ ์žฅ ์˜ˆ์ธก - [ ] ํ’ˆ์งˆ ๊ด€๋ฆฌ AI - [ ] ๋ชจ๋ฐ”์ผ ์•ฑ --- ## ๐Ÿ“ž ์ง€์› ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ: 1. **๋ฐ๋ชจ ํŽ˜์ด์ง€๋กœ ๋จผ์ € ํ…Œ์ŠคํŠธ** - `ai-assistant-demo.html` ์—ด๊ธฐ - ๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†”(F12) ํ™•์ธ 2. **๋กœ๊ทธ ํ™•์ธ** ```javascript // ์ฝ˜์†”์—์„œ ํ˜„์žฌ ์ƒํƒœ ํ™•์ธ console.log(aiAssistant); console.log(aiAssistant.isActive); ``` 3. **ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜ ์‚ฌ์šฉ** ```javascript // ์ฝ˜์†”์—์„œ ์ง์ ‘ ํ…Œ์ŠคํŠธ testAI(); // ์ „์ฒด ํ”Œ๋กœ์šฐ ํ…Œ์ŠคํŠธ ``` --- ## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ ### v1.0.0 (2025-10-25) - ๐ŸŽ‰ ์ดˆ๊ธฐ ๋ฒ„์ „ ๋ฆด๋ฆฌ์Šค - โœ… ์‹ค์‹œ๊ฐ„ ๊ฐ์ง€ - โœ… AI ๋ถ„์„ (๊ทœ์น™ ๊ธฐ๋ฐ˜) - โœ… ์Œ์„ฑ ์•Œ๋ฆผ/์ธ์‹ - โœ… ์ž๋™ ์ ์šฉ - โœ… ๋ฐ๋ชจ ํŽ˜์ด์ง€ --- **์ฆ๊ฑฐ์šด AI ์ฒดํ—˜ ๋˜์„ธ์š”! ๐Ÿค–โœจ**