# ๐Ÿ  ๅฎถๅบญๅŒ–ๅ…จ่ƒฝไบบๅทฅๆ™บ่ƒฝๅŠฉๆ‰‹ โ€”โ€” ๅฎŒๆ•ดๆžถๆž„่ฎพ่ฎกๆ–นๆกˆ --- ## ไธ€ใ€็ณป็ปŸๆ€ปไฝ“ๆžถๆž„ๆฆ‚่งˆ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ“ฑ ๅฎขๆˆท็ซฏๅฑ‚ (Client Layer) โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Web App โ”‚ โ”‚ iOS App โ”‚ โ”‚Android โ”‚ โ”‚ Desktop โ”‚ โ”‚ ๆ™บ่ƒฝ้Ÿณ็ฎฑ โ”‚ โ”‚ โ”‚ โ”‚ (React) โ”‚ โ”‚(SwiftUI) โ”‚ โ”‚(Kotlin) โ”‚ โ”‚(Electron)โ”‚ โ”‚ (ๅตŒๅ…ฅๅผ) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ”Œ ็ปŸไธ€้€šไฟก็ฝ‘ๅ…ณ โ”‚ โ”‚ โ”‚ โ”‚ (WebSocket + HTTP/2 + gRPC) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ–ฅ๏ธ ๆœๅŠก็ซฏๅฑ‚ (Server Layer) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿšช API ็ฝ‘ๅ…ณ (API Gateway) โ”‚ โ”‚ โ”‚ โ”‚ ่ฎค่ฏ้‰ดๆƒ ยท ้™ๆต ยท ่ทฏ็”ฑ ยท ่ดŸ่ฝฝๅ‡่กก ยท ๅ่ฎฎ่ฝฌๆข โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ–ผโ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ๅฏน่ฏ โ”‚ โ”‚ ่ฏญ้Ÿณๅค„็† โ”‚ โ”‚ ๐Ÿง ๆ ธๅฟƒAI โ”‚ โ”‚ ๅทฅๅ…ท่ฐƒ็”จ โ”‚ โ”‚ ่ฎฐๅฟ†็ฎก็† โ”‚ โ”‚ โ”‚ โ”‚็ฎก็† โ”‚ โ”‚ ASR/TTS โ”‚ โ”‚ ๅผ•ๆ“Ž โ”‚ โ”‚ &ๆ’ไปถ โ”‚ โ”‚ ็ณป็ปŸ โ”‚ โ”‚ โ”‚ โ”‚ๆจกๅ— โ”‚ โ”‚ ๆจกๅ— โ”‚ โ”‚ LLMๆŽจ็† โ”‚ โ”‚ ็ณป็ปŸ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”ฌโ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ PostgreSQLโ”‚ โ”‚ Redis โ”‚ โ”‚ MinIO/ โ”‚ โ”‚ โ”‚ โ”‚ (็ป“ๆž„ๅŒ–) โ”‚ โ”‚ (็ผ“ๅญ˜) โ”‚ โ”‚ S3(ๆ–‡ไปถ) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ—๏ธ ๅŸบ็ก€่ฎพๆ–ฝ & ๅค–้ƒจ้›†ๆˆๅฑ‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ LLM API โ”‚ โ”‚ TTS/ASR โ”‚ โ”‚IoT Platformโ”‚ โ”‚ ่ทจๅŸŸ่ฎพๅค‡ โ”‚ โ”‚็ฌฌไธ‰ๆ–นๆœๅŠกโ”‚ โ”‚ โ”‚ โ”‚(ๅคšๆจกๅž‹) โ”‚ โ”‚ ๆœๅŠก โ”‚ โ”‚(MQTT/CoAP)โ”‚ โ”‚ ไบ’่”API โ”‚ โ”‚ (ๅคฉๆฐ”็ญ‰)โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` --- ## ไบŒใ€ๅŽ็ซฏๆžถๆž„่ฏฆ่งฃ ### 2.1 ๆžถๆž„่ฎพ่ฎก็†ๅฟต โ€”โ€” ๅพฎๆœๅŠก + ไบ‹ไปถ้ฉฑๅŠจ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿงญ ๅŽ็ซฏๆŠ€ๆœฏๆ ˆๅ…จๆ™ฏ โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ ่ฏญ่จ€: Go (ๆ ธๅฟƒ้ซ˜ๆ€ง่ƒฝๆœๅŠก) + Python (AI/ML Pipeline) โ”‚ โ”‚ ๆก†ๆžถ: Gin/Fiber (Go) + FastAPI (Python) โ”‚ โ”‚ ๆถˆๆฏ้˜Ÿๅˆ—: NATS / RabbitMQ (ไบ‹ไปถ้ฉฑๅŠจ) โ”‚ โ”‚ ๅฎนๅ™จๅŒ–: Docker + Kubernetes โ”‚ โ”‚ ้…็ฝฎไธญๅฟƒ: Consul / etcd โ”‚ โ”‚ ๆœๅŠก็ฝ‘ๆ ผ: Istio (ๅฏ้€‰) โ”‚ โ”‚ ๅฏ่ง‚ๆต‹ๆ€ง: Prometheus + Grafana + Jaeger + ELK โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### 2.2 ๆ ธๅฟƒๆจกๅ—่ฏฆ็ป†่ฎพ่ฎก --- #### ๐Ÿ”น ๆจกๅ—A๏ผšAPI็ฝ‘ๅ…ณ (Gateway Service) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ API Gateway โ”‚ โ”‚ โ”‚ Client โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บโ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ่ทฏ็”ฑๅˆ†ๅ‘ & ๅ่ฎฎ่ฝฌๆข โ”‚ โ”‚ โ”‚ โ”‚ REST / WS / gRPC โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ JWT ่ฎค่ฏ & ไผš่ฏ็ฎก็† โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ้™ๆต & ็†”ๆ–ญ & ้™็บง โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ่ฏทๆฑ‚ๆ—ฅๅฟ— & ้“พ่ทฏ่ฟฝ่ธช โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` **่Œ่ดฃ๏ผš** - ็ปŸไธ€ๅ…ฅๅฃ๏ผŒๆ”ฏๆŒ REST APIใ€WebSocket๏ผˆๅฎžๆ—ถๅฏน่ฏ๏ผ‰ใ€gRPC๏ผˆๅ†…้ƒจ้ซ˜ๆ€ง่ƒฝ่ฐƒ็”จ๏ผ‰ - JWT ็ญพๅ‘ไธŽ้ชŒ่ฏ๏ผŒๆ”ฏๆŒๅคš็ซฏ็™ปๅฝ• - ๅŸบไบŽไปค็‰Œๆกถ็š„้™ๆต๏ผŒ้˜ฒๆญขๆปฅ็”จ - ่ฏทๆฑ‚/ๅ“ๅบ”็š„็ปŸไธ€ๆ—ฅๅฟ—่ฎฐๅฝ•๏ผŒๆณจๅ…ฅ TraceID --- #### ๐Ÿ”น ๆจกๅ—B๏ผšๆ ธๅฟƒAIๅผ•ๆ“Ž (Core AI Engine) โญ ๆœ€ๆ ธๅฟƒ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿง  ๆ ธๅฟƒAIๅผ•ๆ“Žๆžถๆž„ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๅฏน่ฏ็ผ–ๆŽ’ๅ™จ (Orchestrator) โ”‚ โ”‚ โ”‚ โ”‚ ยท ๆŽฅๆ”ถ็”จๆˆท่พ“ๅ…ฅ โ†’ ็ป„่ฃ…ไธŠไธ‹ๆ–‡ โ†’ ่ฐƒๅบฆๅ„ๅญๆจกๅ— โ†’ ็”Ÿๆˆๅ›žๅค โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐ŸŽญ ไบบๆ ผๆณจๅ…ฅๆจกๅ— โ”‚ โ”‚ ๐Ÿ“‹ ไธŠไธ‹ๆ–‡ๆž„ๅปบๆจกๅ— โ”‚ โ”‚ โ”‚ โ”‚ Persona Injector โ”‚ โ”‚ Context Builder โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ๅŠ ่ฝฝ็Ÿฅ่ฏ†ๆ–‡ๆกฃ โ”‚ โ”‚ ยท ่ฟ‘ๆœŸๅฏน่ฏๅކๅฒ(N) โ”‚ โ”‚ โ”‚ โ”‚ ยท ่ง’่‰ฒๅก่งฃๆž โ”‚ โ”‚ ยท ้•ฟๆœŸ่ฎฐๅฟ†ๆ‘˜่ฆ(M) โ”‚ โ”‚ โ”‚ โ”‚ ยท ็ณป็ปŸPromptๆž„ๅปบ โ”‚ โ”‚ ยท ็”จๆˆท็”ปๅƒ โ”‚ โ”‚ โ”‚ โ”‚ ยท ็งฐๅ‘ผ/่ฏญๆฐ”่ง„ๅˆ™ โ”‚ โ”‚ ยท ๆ—ถ้—ด/็ŽฏๅขƒไธŠไธ‹ๆ–‡ โ”‚ โ”‚ โ”‚ โ”‚ ยท ๅ›žๅคๆ ผๅผ็บฆๆŸ โ”‚ โ”‚ ยท Token้ข„็ฎ—็ฎก็† โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ LLM ้€‚้…ๅฑ‚ (LLM Adapter) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ OpenAI โ”‚ โ”‚Claude โ”‚ โ”‚ ๆœฌๅœฐๆจกๅž‹ โ”‚ โ”‚ ่‡ชๅฎšไน‰ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ API โ”‚ โ”‚ API โ”‚ โ”‚(Ollama/ โ”‚ โ”‚ ๆจกๅž‹ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ vLLM) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ็ปŸไธ€ๆŽฅๅฃๆŠฝ่ฑก (Chat Completion Interface) โ”‚ โ”‚ โ”‚ โ”‚ ยท ๆตๅผ่พ“ๅ‡บๆ”ฏๆŒ (SSE โ†’ WS) โ”‚ โ”‚ โ”‚ โ”‚ ยท ๅคšๆจกๅž‹่ดŸ่ฝฝๅ‡่กก & ๆ•…้šœๅˆ‡ๆข โ”‚ โ”‚ โ”‚ โ”‚ ยท Function Calling / Tool Use ๅ่ฎฎ้€‚้… โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๅ›žๅค็ญ–็•ฅๅ†ณ็ญ–ๅ™จ (Response Strategist) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ๅˆคๆ–ญๅ›žๅคๅฝขๅผ๏ผš็บฏๆ–‡ๅญ— / ๆ–‡ๅญ—+TTS / ็บฏ่ฏญ้Ÿณ โ”‚ โ”‚ โ”‚ โ”‚ ยท ๅˆคๆ–ญๆ˜ฏๅฆ้œ€่ฆๆ–ญๅฅ๏ผˆ่ฏญ้ŸณๅŠฉๆ‰‹ๆจกๅผ vs ่Šๅคฉๆก†ๆจกๅผ๏ผ‰ โ”‚ โ”‚ โ”‚ โ”‚ ยท ๅˆคๆ–ญๆ˜ฏๅฆ้œ€่ฆ่ฐƒ็”จๅทฅๅ…ท/API โ”‚ โ”‚ โ”‚ โ”‚ ยท ่พ“ๅ‡บๆ ผๅผๆ ‡่ฎฐ๏ผˆๅธฆๆ–ญๅฅๆ ‡่ฎฐ็š„ๆ–‡ๆœฌ๏ผ‰ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` **ไบบๆ ผๆณจๅ…ฅๆจกๅ—่ฏฆ่งฃ๏ผš** ``` ็Ÿฅ่ฏ†ๆ–‡ๆกฃ็ป“ๆž„ (persona.yaml / persona.md): โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ่ง’่‰ฒๅฎšไน‰ (Character Definition) โ”‚ โ”‚ โ”œโ”€ ๅ็งฐ: ๅฐๅ’ช โ”‚ โ”‚ โ”œโ”€ ่บซไปฝ: ๅฎถๅบญAI็ฎกๅฎถ / ็Œซๅจ˜ โ”‚ โ”‚ โ”œโ”€ ๆ€งๆ ผ: ๆธฉๆŸ”ใ€็ป†ๅฟƒใ€ๅถๅฐ”ๅ‚ฒๅจ‡ โ”‚ โ”‚ โ”œโ”€ ่ฏด่ฏ้ฃŽๆ ผ: ๅฃ่ฏญๅŒ–ใ€ๅธฆ"ๅ–ต~"ๅฃ็™– โ”‚ โ”‚ โ”œโ”€ ็งฐๅ‘ผ่ง„ๅˆ™: โ”‚ โ”‚ โ”‚ โ”œโ”€ ๅฏนไธปไบบ: "ไธปไบบ"/"ๅ“ฅๅ“ฅ"/"ๅงๅง" โ”‚ โ”‚ โ”‚ โ””โ”€ ๅฏน้™Œ็”Ÿไบบ: "ๅฎขไบบ" โ”‚ โ”‚ โ”œโ”€ ่ƒŒๆ™ฏๆ•…ไบ‹: (่ต‹ไบˆ่ง’่‰ฒๆทฑๅบฆ) โ”‚ โ”‚ โ””โ”€ ่กŒไธบๅ‡†ๅˆ™: (ๅฎ‰ๅ…จ่พน็•Œใ€ไผฆ็†็บฆๆŸ) โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ ่ƒฝๅŠ›ๅฃฐๆ˜Ž (Capability Declaration) โ”‚ โ”‚ โ”œโ”€ ๅฏๆŽงๅˆถ่ฎพๅค‡ๅˆ—่กจ โ”‚ โ”‚ โ”œโ”€ ๅฏ่ฐƒ็”จAPIๅˆ—่กจ โ”‚ โ”‚ โ””โ”€ ่ƒฝๅŠ›่พน็•Œ่ฏดๆ˜Ž โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ ๅ›žๅคๆ ผๅผๆจกๆฟ (Response Templates) โ”‚ โ”‚ โ”œโ”€ ๆ—ฅๅธธ้—ฎๅ€™ๆจกๆฟ โ”‚ โ”‚ โ”œโ”€ ไปปๅŠก็กฎ่ฎคๆจกๆฟ โ”‚ โ”‚ โ””โ”€ ้”™่ฏฏ/ๆ— ๆณ•ๅฎŒๆˆๆ—ถ็š„ๆจกๆฟ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` --- #### ๐Ÿ”น ๆจกๅ—C๏ผš่ฏญ้Ÿณๅค„็†ๆจกๅ— (Voice Processing) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐ŸŽ™๏ธ ่ฏญ้Ÿณๅค„็†ๆตๆฐด็บฟ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ่ฏญ้Ÿณ่พ“ๅ…ฅ (ASR Pipeline) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ้Ÿณ้ข‘่พ“ๅ…ฅ โ†’ VADๆฃ€ๆต‹ โ†’ ้™ๅ™ช โ†’ ASRๅผ•ๆ“Ž โ†’ ๆ–‡ๆœฌ่พ“ๅ‡บ โ”‚ โ”‚ โ”‚ โ”‚ (Base64) (ๅˆ†ๆฎต) (RNNoise) (Whisper/ (ๅธฆๆ—ถ้—ดๆˆณ) โ”‚ โ”‚ โ”‚ โ”‚ Azure/่ฎฏ้ฃž) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ่ฏญ้Ÿณ่พ“ๅ‡บ (TTS Pipeline) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ่Šๅคฉๆก†ๆจกๅผ โ”‚ โ”‚ ่ฏญ้ŸณๅŠฉๆ‰‹ๆจกๅผ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๆ•ดๆฎตๆ–‡ๆœฌ โ”‚ โ”‚ ๆ–ญๅฅๅผ•ๆ“Ž โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ†“ โ”‚ โ”‚ ยท ๆŒ‰ๅฅๅทๅˆ‡ๅˆ† โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ TTSๅผ•ๆ“Ž โ”‚ โ”‚ ยท ็”Ÿๆˆๅฅๅญ้˜Ÿๅˆ—โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ†“ โ”‚ โ”‚ โ†“ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๅฎŒๆ•ด้Ÿณ้ข‘ โ”‚ โ”‚ ้€ๅฅTTS โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ†“ โ”‚ โ”‚ โ†“ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ่ฟ”ๅ›žURL/ๆต โ”‚ โ”‚ ๆตๅผๆŽจ้€ๆ’ญๆ”พ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ TTSๅผ•ๆ“Ž้€‚้…: Edge-TTS / VITS / Bert-VITS2 / GPT-SoVITS โ”‚ โ”‚ โ”‚ โ”‚ ยท ๆ”ฏๆŒ่ง’่‰ฒ้Ÿณ่‰ฒๅฎšๅˆถ (ๅฏๅพฎ่ฐƒ) โ”‚ โ”‚ โ”‚ โ”‚ ยท ๆ”ฏๆŒๆƒ…ๆ„Ÿๅ‚ๆ•ฐ (่ฏญ้€Ÿ/้Ÿณ่ฐƒ/้Ÿณ้‡) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` **่ฏญ้ŸณๅŠฉๆ‰‹ๆจกๅผๆ–ญๅฅไธŽๆตๅผๆ’ญๆ”พๆ—ถๅบๅ›พ๏ผš** ``` ๆ—ถ้—ด่ฝด โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ LLM่พ“ๅ‡บ: "ๅฅฝ็š„ไธปไบบใ€‚ๆˆ‘่ฟ™ๅฐฑๅธฎๆ‚จๆ‰“ๅผ€ๅฎขๅŽ…็š„็ฏใ€‚็Žฐๅœจๅฎคๆธฉๆ˜ฏ26ๅบฆใ€‚้œ€่ฆๆˆ‘่ฐƒไฝŽไธ€ไบ›ๅ—ๅ–ต~" โ”‚ โ”‚ โ”‚ โ”‚ โ–ผ โ–ผ โ–ผ โ–ผ ๆ–ญๅฅ้˜Ÿๅˆ—: [ๅฅๅญ1] [ๅฅๅญ2] [ๅฅๅญ3] [ๅฅๅญ4] โ”‚ โ”‚ โ”‚ โ”‚ โ–ผ โ–ผ โ–ผ โ–ผ TTS็”Ÿๆˆ: ๐Ÿ”ŠS1 ๐Ÿ”ŠS2 ๐Ÿ”ŠS3 ๐Ÿ”ŠS4 โ”‚ โ”‚ โ”‚ โ”‚ โ–ผ โ–ผ โ–ผ โ–ผ ๅฎขๆˆท็ซฏ: ๆ’ญๆ”พS1โ”€โ”€โ”€โ–บๆ’ญๆ”พS2โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บๆ’ญๆ”พS3โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บๆ’ญๆ”พS4 โ”‚ โ–ผ ็”จๆˆทไฝ“้ชŒ: ๅฌๅˆฐ"ๅฅฝ็š„ไธปไบบใ€‚"ๆ—ถ๏ผŒๅŽ็ปญๅฅๅญๅทฒๅœจ็”Ÿๆˆไธญ... (้ฆ–ๅฅๅปถ่ฟŸ ~800ms๏ผŒๅŽ็ปญๅ‡ ไนŽๆ— ็ญ‰ๅพ…) ``` --- #### ๐Ÿ”น ๆจกๅ—D๏ผš่ฎฐๅฟ†็ฎก็†็ณป็ปŸ (Memory Management) โญ ้•ฟๆœŸ่ฎฐๅฟ†ๆ ธๅฟƒ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿง  ่ฎฐๅฟ†็ฎก็†็ณป็ปŸๆžถๆž„ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ่ฎฐๅฟ†ๆๅ–ๅ™จ (Memory Extractor) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๅฏน่ฏๆต โ†’ ๅ…ณ้”ฎไฟกๆฏ่ฏ†ๅˆซ โ†’ ๅฎžไฝ“ๆŠฝๅ– โ†’ ๅ…ณ็ณปๆŠฝๅ– โ†’ ๆ‘˜่ฆ โ”‚ โ”‚ โ”‚ โ”‚ (ๅŸบไบŽLLM็š„ๅฐๆจกๅž‹ๆˆ–่ง„ๅˆ™+LLMๆททๅˆ) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ่ฎฐๅฟ†ๅˆ†็ฑปๅ™จ & ๅˆ†็บงๅ™จ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ็”จๆˆท็”ปๅƒ โ”‚ โ”‚ ไบ‹ๅฎž่ฎฐๅฟ† โ”‚ โ”‚ ๅๅฅฝ่ฎฐๅฟ† โ”‚ โ”‚ ไบ‹ไปถ่ฎฐๅฟ† โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ยทๅง“ๅ โ”‚ โ”‚ยทๅ‘็”Ÿ่ฟ‡ โ”‚ โ”‚ยทๅ–œๆฌข็š„ โ”‚ โ”‚ยทๆ—ถ้—ด็บฟ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ยทๅนด้พ„ โ”‚ โ”‚ ็š„ไบ‹ๅฎž โ”‚ โ”‚ ไบ‹็‰ฉ โ”‚ โ”‚ ็›ธๅ…ณ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ยท่บซไปฝ โ”‚ โ”‚ยทๅฎถๅบญๆˆ โ”‚ โ”‚ยทไน ๆƒฏ โ”‚ โ”‚ ไบ‹ไปถ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ยทๅ…ณ็ณป โ”‚ โ”‚ ๅ‘˜ไฟกๆฏ โ”‚ โ”‚ยท่ฎพ็ฝฎ โ”‚ โ”‚ ่ฎฐๅฝ• โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ้‡่ฆๆ€งๅˆ†็บง: ๐Ÿ”ดๆ ธๅฟƒ(ๆฐธไน…) ๐ŸŸก้‡่ฆ(้•ฟๆœŸ) ๐ŸŸขๆ™ฎ้€š(ไธญๆœŸ) โ”‚ โ”‚ โ”‚ โ”‚ โšชไธดๆ—ถ(ไผš่ฏ็บง) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ่ฎฐๅฟ†ๅญ˜ๅ‚จๅฑ‚ (Memory Store) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ PostgreSQL โ”‚ โ”‚ ๅ‘้‡ๆ•ฐๆฎๅบ“ โ”‚ โ”‚ ๆ–‡ไปถๅญ˜ๅ‚จ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ (็ป“ๆž„ๅŒ–่ฎฐๅฟ†) โ”‚ โ”‚ (Milvus/ โ”‚ โ”‚ (Markdown/ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ Qdrant) โ”‚ โ”‚ JSON) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ็”จๆˆท่กจ โ”‚ โ”‚ ยท ่ฏญไน‰ๆฃ€็ดข โ”‚ โ”‚ ยท ๅŽŸๅง‹่ฎฐๅฝ• โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ่ฎฐๅฟ†ๆก็›ฎ่กจ โ”‚ โ”‚ ยท ็›ธไผผ่ฎฐๅฟ† โ”‚ โ”‚ ยท ๅฝ’ๆกฃๆ–‡ไปถ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ๅ…ณ็ณป่กจ โ”‚ โ”‚ ยท ๅ…ณ่”ๆŽจ่ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ่ฎฐๅฟ†ๆฃ€็ดขๅ™จ (Memory Retriever) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ็”จๆˆท่พ“ๅ…ฅ โ†’ ๅ…ณ้”ฎ่ฏๅŒน้… + ่ฏญไน‰ๅ‘้‡ๆฃ€็ดข โ†’ ๆททๅˆๆŽ’ๅบ โ”‚ โ”‚ โ”‚ โ”‚ โ†’ ๆณจๅ…ฅๅˆฐLLMไธŠไธ‹ๆ–‡ (ๅธฆ่ฎฐๅฟ†ๆฅๆบๆ ‡ๆณจ) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ่ฎฐๅฟ†ๆ–‡ไปถ็ณป็ปŸ็ป“ๆž„ (ๅฏ่ฟ็งป่ฎพ่ฎก) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ /data/memory/ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ users/ # ๆŒ‰็”จๆˆทๅˆ†็›ฎๅฝ• โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ {user_id}/ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ profile.json # ็”จๆˆท็”ปๅƒ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ facts/ # ไบ‹ๅฎž่ฎฐๅฟ† โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ core/ # ๐Ÿ”ด ๆ ธๅฟƒ่ฎฐๅฟ† โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ important/ # ๐ŸŸก ้‡่ฆ่ฎฐๅฟ† โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ normal/ # ๐ŸŸข ๆ™ฎ้€š่ฎฐๅฟ† โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ preferences.json # ๅๅฅฝ่ฎฐๅฟ† โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ events/ # ไบ‹ไปถๆ—ถ้—ด็บฟ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ conversation_log/ # ๅฏน่ฏๆ—ฅๅฟ—(ๅฏ้…็ฝฎไฟ็•™ๆœŸ) โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ global/ # ๅ…จๅฑ€่ฎฐๅฟ†(่ทจ็”จๆˆท) โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ index.db # SQLite็ดขๅผ•(ๅฟซ้€Ÿๆฃ€็ดข) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` --- #### ๐Ÿ”น ๆจกๅ—E๏ผšๅทฅๅ…ท่ฐƒ็”จ & ๆ’ไปถ็ณป็ปŸ (Tool & Plugin System) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ”ง ๅทฅๅ…ท่ฐƒ็”จ & ๆ’ไปถ็ณป็ปŸ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๅทฅๅ…ทๆณจๅ†Œไธญๅฟƒ (Tool Registry) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๅ†…็ฝฎๅทฅๅ…ท (Built-in Tools) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿ  ๅฎถๅบญ็‰ฉ่”็ฝ‘ (IoT) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€ ็ฏๅ…‰ๆŽงๅˆถ (on/off/brightness/color) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€ ็ฉบ่ฐƒ/ๆธฉๆŽง (mode/temp/fan) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€ ็ช—ๅธ˜/็ช—ๆˆท (open/close/percentage) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€ ๆ™บ่ƒฝ้—จ้” (lock/unlock/status) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€ ๆ‘„ๅƒๅคด (snapshot/stream) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€ ไผ ๆ„Ÿๅ™จๆŸฅ่ฏข (temp/humidity/motion) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๐ŸŒ ่ทจๅŸŸ่ฎพๅค‡ไบ’่” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€ ๆ‰‹ๆœบ้€š็ŸฅๆŽจ้€ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€ ่ฝฆ่ฝฝ็ณป็ปŸไบคไบ’ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€ ๅŠžๅ…ฌ่ฎพๅค‡ๆŽงๅˆถ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€ ็ฉฟๆˆด่ฎพๅค‡ๆ•ฐๆฎ่ฏปๅ– โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿ› ๏ธ ็ณป็ปŸๆ“ไฝœ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€ ๆ–‡ไปถ่ฏปๅ†™ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€ ็จ‹ๅบ่ฐƒ็”จ/่„šๆœฌๆ‰ง่กŒ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€ ๅฎšๆ—ถไปปๅŠก่ฎพ็ฝฎ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€ ็ฝ‘็ปœ่ฏทๆฑ‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๆ’ไปถๆŽฅๅฃ (Plugin Interface) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ็ƒญๅŠ ่ฝฝ/ๅธ่ฝฝ (ๅŠจๆ€.so / WASM) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ็ปŸไธ€Tool Schema (ๅ…ผๅฎนOpenAI Function Call) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ๆƒ้™ๅฃฐๆ˜Ž & ๆฒ™็ฎฑ้š”็ฆป โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ็‰ˆๆœฌ็ฎก็† โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ่ฐƒ็”จๆ‰ง่กŒๅผ•ๆ“Ž (Execution Engine) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ LLM่พ“ๅ‡บ โ†’ ่งฃๆžFunction Call โ†’ ๅ‚ๆ•ฐ้ชŒ่ฏ โ†’ ๆƒ้™ๆฃ€ๆŸฅ โ”‚ โ”‚ โ”‚ โ”‚ โ†’ ๆ‰ง่กŒ่ฐƒ็”จ โ†’ ็ป“ๆžœๅบๅˆ—ๅŒ– โ†’ ๆณจๅ…ฅๅ›žๅฏน่ฏไธŠไธ‹ๆ–‡ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๅฎ‰ๅ…จๆœบๅˆถ: โ”‚ โ”‚ โ”‚ โ”‚ ยท ๅฑ้™ฉๆ“ไฝœ้œ€็”จๆˆทไบŒๆฌก็กฎ่ฎค โ”‚ โ”‚ โ”‚ โ”‚ ยท ๆ“ไฝœๆ—ฅๅฟ—ๅ…จ่ฎฐๅฝ• โ”‚ โ”‚ โ”‚ โ”‚ ยท ่ฐƒ็”จ้ข‘็އ้™ๅˆถ โ”‚ โ”‚ โ”‚ โ”‚ ยท ๅ›žๆปš/ๆ’ค้”€ๆ”ฏๆŒ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` --- #### ๐Ÿ”น ๆจกๅ—F๏ผšๅฏน่ฏไผš่ฏ็ฎก็† (Session Management) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๅฏน่ฏไผš่ฏ็ฎก็† โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Session ็”Ÿๅ‘ฝๅ‘จๆœŸ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๅˆ›ๅปบไผš่ฏ โ†’ ็ปดๆŠคไธŠไธ‹ๆ–‡็ช—ๅฃ โ†’ ่ฟ‡ๆœŸ/ๅฝ’ๆกฃ โ†’ ๆŒไน…ๅŒ– โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ไผš่ฏID: UUID, ๅ…ณ่”็”จๆˆท + ่ฎพๅค‡ + ๅนณๅฐ โ”‚ โ”‚ โ”‚ โ”‚ ยท ไธŠไธ‹ๆ–‡็ช—ๅฃ: ๆป‘ๅŠจ็ช—ๅฃ + ๆ™บ่ƒฝๅŽ‹็ผฉ(ๆ‘˜่ฆๅŒ–ๆ—งๆถˆๆฏ) โ”‚ โ”‚ โ”‚ โ”‚ ยท ๅคš็ซฏๅŒๆญฅ: ๅŒไธ€็”จๆˆทไธๅŒ่ฎพๅค‡ๅฏๆŽฅๅ…ฅๅŒไธ€ไผš่ฏ โ”‚ โ”‚ โ”‚ โ”‚ ยท ไผš่ฏๅˆ‡ๆข: ๆ”ฏๆŒๅคšไผš่ฏๅนถๅญ˜, ็”จๆˆทๅฏๅˆ‡ๆข โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๅฏน่ฏๆจกๅผ่ฏ†ๅˆซ & ๅˆ‡ๆข โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๆ–‡ๅญ—่Šๅคฉๆจกๅผ โ”‚ โ”‚ ่ฏญ้Ÿณๆถˆๆฏๆจกๅผ โ”‚ โ”‚่ฏญ้ŸณๅŠฉๆ‰‹ๆจกๅผ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚่พ“ๅ…ฅ: ๆ–‡ๅญ— โ”‚ โ”‚่พ“ๅ…ฅ: ่ฏญ้Ÿณ โ”‚ โ”‚่พ“ๅ…ฅ: ่ฏญ้Ÿณๆต โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚่พ“ๅ‡บ: ๆ–‡ๅญ— โ”‚ โ”‚่พ“ๅ‡บ: ๆ–‡ๅญ— โ”‚ โ”‚่พ“ๅ‡บ: ่ฏญ้Ÿณๆต โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ +ๅฏ้€‰TTS โ”‚ โ”‚ +TTS้Ÿณ้ข‘ โ”‚ โ”‚ +ๆ–ญๅฅๆตๅผ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ +ๆ–‡ๅญ—ๅŽŸๆ–‡ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` --- ### 2.3 ๆ•ฐๆฎๆตๅ…จๆ™ฏๅ›พ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ“Š ๅฎŒๆ•ดๆ•ฐๆฎๆต โ”‚ โ”‚ โ”‚ โ”‚ ็”จๆˆท่พ“ๅ…ฅ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ ๆ–‡ๅญ— โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ ่ฏญ้Ÿณ โ”€โ”€โ–บ ASR โ”€โ”€โ–บ ๆ–‡ๆœฌ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ โ–ผ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ไธŠไธ‹ๆ–‡ๆž„ๅปบๅ™จ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ† ไบบๆ ผ็Ÿฅ่ฏ†ๆ–‡ๆกฃ โ”‚ โ”‚ โ”‚ โ”‚ โ† ้•ฟๆœŸ่ฎฐๅฟ†ๆฃ€็ดข โ”‚ โ”‚ โ”‚ โ”‚ โ† ่ฟ‘ๆœŸๅฏน่ฏๅކๅฒ โ”‚ โ”‚ โ”‚ โ”‚ โ† ็”จๆˆท็”ปๅƒ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ–ผ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ LLM ๆŽจ็† โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ้œ€่ฆ่ฐƒ็”จๅทฅๅ…ท? โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ ๆ˜ฏโ”€โ”€โ–บๅทฅๅ…ท่ฐƒ็”จโ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๅผ•ๆ“Ž โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ IoT/่ฎพๅค‡API โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ็จ‹ๅบ่ฐƒ็”จ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ็ป“ๆžœ่ฟ”ๅ›žโ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ็”Ÿๆˆๆœ€็ปˆๅ›žๅค โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ–ผ โ–ผ โ–ผ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ่ฎฐๅฟ†ๆๅ– โ”‚ โ”‚ ๅ›žๅค็ญ–็•ฅ โ”‚ โ”‚ๆ–‡ๆœฌๅ›žๅคโ”‚ โ”‚ โ”‚ โ”‚ &ๅญ˜ๅ‚จ โ”‚ โ”‚ ๅ†ณ็ญ– โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ–ผ โ–ผ โ–ผ โ–ผ โ”‚ โ”‚ ็บฏๆ–‡ๆœฌ ๆ–‡ๅญ—+TTS ่ฏญ้ŸณๅŠฉๆ‰‹ ๆ–‡ๅญ— โ”‚ โ”‚ ๅ›žๅค ๅ›žๅค ๆจกๅผ ่พ“ๅ‡บ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ–ผ โ–ผ โ”‚ โ”‚ โ”‚ ๆ•ดๆฎตTTS ๆ–ญๅฅๅผ•ๆ“Ž โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ–ผ โ–ผ โ”‚ โ”‚ โ”‚ ้Ÿณ้ข‘URL ๅฅๅญ้˜Ÿๅˆ— โ”‚ โ”‚ โ”‚ โ”‚ (ๆตๅผๆŽจ้€) โ”‚ โ”‚ โ–ผ โ–ผ โ–ผ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ่ฟ”ๅ›ž็ป™ๅฎขๆˆท็ซฏ โ”‚ โ”‚ โ”‚ โ”‚ { text, audio_url?, โ”‚ โ”‚ โ”‚ โ”‚ segments?: [{text,audio}]}โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` --- ## ไธ‰ใ€ๅ‰็ซฏๆžถๆž„่ฎพ่ฎก ### 3.1 ่ทจ็ซฏๆžถๆž„็ญ–็•ฅ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ“ฑ ่ทจ็ซฏๆžถๆž„๏ผšๆธ่ฟ›ๅผ้€‚้…็ญ–็•ฅ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๅ…ฑไบซๅฑ‚ (Shared Layer) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ไธšๅŠก้€ป่พ‘ (TypeScript) ยท ็Šถๆ€็ฎก็† (Zustand/Pinia) โ”‚ โ”‚ โ”‚ โ”‚ ยท API Client ยท WebSocket Manager โ”‚ โ”‚ โ”‚ โ”‚ ยท ้Ÿณ้ข‘ๅค„็† Pipeline ยท ๆœฌๅœฐ็ผ“ๅญ˜็ญ–็•ฅ โ”‚ โ”‚ โ”‚ โ”‚ ยท ็ฑปๅž‹ๅฎšไน‰ (Proto/TS) ยท ๅทฅๅ…ทๅ‡ฝๆ•ฐๅบ“ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Web App โ”‚ โ”‚Mobile Appโ”‚ โ”‚Desktop Appโ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ React โ”‚ โ”‚React โ”‚ โ”‚ Electron โ”‚ โ”‚ โ”‚ โ”‚ + Vite โ”‚ โ”‚Native โ”‚ โ”‚ + Tauri โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚/Flutter โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ PWAๆ”ฏๆŒ โ”‚ โ”‚ โ”‚ โ”‚็ณป็ปŸๆ‰˜็›˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ๅ…จๅฑ€ๅฟซๆท้”ฎ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ ็‰น่‰ฒ่ƒฝๅŠ›: โ”‚ โ”‚ ยท PWA: ็ฆป็บฟๅฏ็”จ, ๆทปๅŠ ๅˆฐไธปๅฑๅน•, ๆŽจ้€้€š็Ÿฅ โ”‚ โ”‚ ยท React Native: ๅŽŸ็”Ÿ้Ÿณ้ข‘, ๅŽๅฐ่ฟ่กŒ, Widget โ”‚ โ”‚ ยท Electron/Tauri: ็ณป็ปŸ็บง้›†ๆˆ, ๆœฌๅœฐๆ–‡ไปถ่ฎฟ้—ฎ, ็ณป็ปŸ้€š็Ÿฅ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### 3.2 ๅ‰็ซฏๆ ธๅฟƒๅŠŸ่ƒฝๆจกๅ— ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ–ฅ๏ธ ๅ‰็ซฏๅŠŸ่ƒฝๆจกๅ—ๅ…จๆ™ฏ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ  ไธป็•Œ้ขๅธƒๅฑ€ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ไพง่พนๆ  โ”‚ โ”‚ ๅฏน่ฏไธปๅŒบๅŸŸ โ”‚ โ”‚ ไธŠไธ‹ๆ–‡ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ้ขๆฟ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ยทไผš่ฏๅˆ—่กจโ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ยท่ง’่‰ฒๅˆ‡ๆขโ”‚ โ”‚ โ”‚ ๆถˆๆฏๅˆ—่กจ โ”‚ โ”‚ โ”‚ยท่ฎพๅค‡็Šถๆ€โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ยท่ฎพๅค‡็ฎก็†โ”‚ โ”‚ โ”‚ (ๆ–‡ๅญ—+่ฏญ้Ÿณ โ”‚ โ”‚ โ”‚ยทๅฝ“ๅ‰ไปปๅŠกโ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ยท่ฎฐๅฟ†ๆŸฅ็œ‹โ”‚ โ”‚ โ”‚ +ๅ›พ็‰‡+ๅก็‰‡) โ”‚ โ”‚ โ”‚ยทๅฟซๆทๆ“ไฝœโ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ยท่ฎพ็ฝฎ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ยทๅคฉๆฐ”ๆ—ถ้—ดโ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ่พ“ๅ…ฅๅŒบๅŸŸ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ [ๆ–‡ๅญ—/่ฏญ้Ÿณ] โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ [ๅ‘้€] โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐ŸŽ™๏ธ ่ฏญ้Ÿณไบคไบ’ๆจกๅ— โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ่ฏญ้Ÿณ่พ“ๅ…ฅ: โ”‚ โ”‚ โ”‚ โ”‚ ยท ๆŒ‰ไฝ่ฏด่ฏ (Push-to-Talk) โ”‚ โ”‚ โ”‚ โ”‚ ยท ่ฏญ้ŸณๅŠฉๆ‰‹ๆจกๅผ (VAD่‡ชๅŠจๆฃ€ๆต‹, ๆŒ็ปญๅฏน่ฏ) โ”‚ โ”‚ โ”‚ โ”‚ ยท ๆณขๅฝขๅฏ่ง†ๅŒ–ๅ้ฆˆ โ”‚ โ”‚ โ”‚ โ”‚ ยท ้™ๅ™ชๅค„็† (WebAudio API / ๅŽŸ็”Ÿ้Ÿณ้ข‘ๆจกๅ—) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ่ฏญ้Ÿณ่พ“ๅ‡บ: โ”‚ โ”‚ โ”‚ โ”‚ ยท ๆตๅผ้Ÿณ้ข‘ๆ’ญๆ”พ (้€ๅฅๆ’ญๆ”พ้˜Ÿๅˆ—) โ”‚ โ”‚ โ”‚ โ”‚ ยท ๆ’ญๆ”พ่ฟ›ๅบฆๆŒ‡็คบ โ”‚ โ”‚ โ”‚ โ”‚ ยท ๅฏๆ‰“ๆ–ญ/ๆš‚ๅœ โ”‚ โ”‚ โ”‚ โ”‚ ยท ๆ–‡ๅญ—ๅŽŸๆ–‡ๅŒๆญฅๆ˜พ็คบ (้€ๅฅ้ซ˜ไบฎ) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ  IoT่ฎพๅค‡ๆŽงๅˆถ้ขๆฟ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚็ฏๅ…‰โ”‚ โ”‚็ฉบ่ฐƒโ”‚ โ”‚็ช—ๅธ˜โ”‚ โ”‚้—จ้”โ”‚ โ”‚ๆ‘„ๅƒๅคดโ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚๐Ÿ’ก โ”‚ โ”‚๐ŸŒก๏ธ โ”‚ โ”‚๐ŸชŸ โ”‚ โ”‚๐Ÿ” โ”‚ โ”‚๐Ÿ“ท โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚75% โ”‚ โ”‚26ยฐ โ”‚ โ”‚ๅ…ณ้—ญโ”‚ โ”‚้”ๅฎšโ”‚ โ”‚ๅœจ็บฟโ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ๅฎžๆ—ถ็Šถๆ€่ฝฎ่ฏข/WebSocketๆŽจ้€ โ”‚ โ”‚ โ”‚ โ”‚ ยท ๅฟซๆทๅœบๆ™ฏ (ๅ›žๅฎถๆจกๅผ/็ฆปๅฎถๆจกๅผ/็ก็œ ๆจกๅผ) โ”‚ โ”‚ โ”‚ โ”‚ ยท ่ฎพๅค‡ๅˆ†็ป„ (ๆŒ‰ๆˆฟ้—ด) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### 3.3 ๅ‰็ซฏๆŠ€ๆœฏๆ ˆ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ› ๏ธ ๅ‰็ซฏๆŠ€ๆœฏๆ ˆๆŽจ่ โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ โ”‚ ๆ ธๅฟƒๆก†ๆžถ: โ”‚ โ”‚ โ”œโ”€โ”€ React 18+ / Vue 3+ โ”‚ โ”‚ โ”œโ”€โ”€ TypeScript (ไธฅๆ ผๆจกๅผ) โ”‚ โ”‚ โ””โ”€โ”€ Vite (ๆž„ๅปบๅทฅๅ…ท) โ”‚ โ”‚ โ”‚ โ”‚ UI ๆก†ๆžถ: โ”‚ โ”‚ โ”œโ”€โ”€ TailwindCSS + shadcn/ui / Ant Design โ”‚ โ”‚ โ”œโ”€โ”€ ๅ“ๅบ”ๅผ่ฎพ่ฎก (Mobile First) โ”‚ โ”‚ โ””โ”€โ”€ ๆš—่‰ฒ/ไบฎ่‰ฒไธป้ข˜ๅˆ‡ๆข โ”‚ โ”‚ โ”‚ โ”‚ ็Šถๆ€็ฎก็†: โ”‚ โ”‚ โ”œโ”€โ”€ Zustand (่ฝป้‡) / Pinia (Vue) โ”‚ โ”‚ โ””โ”€โ”€ TanStack Query (ๆœๅŠก็ซฏ็Šถๆ€) โ”‚ โ”‚ โ”‚ โ”‚ ้€šไฟกๅฑ‚: โ”‚ โ”‚ โ”œโ”€โ”€ WebSocket (ๅฎžๆ—ถๅฏน่ฏ + ๆตๅผ้Ÿณ้ข‘) โ”‚ โ”‚ โ”œโ”€โ”€ HTTP/2 REST (ๆ™ฎ้€šAPI) โ”‚ โ”‚ โ””โ”€โ”€ Server-Sent Events (LLMๆตๅผ่พ“ๅ‡บ) โ”‚ โ”‚ โ”‚ โ”‚ ้Ÿณ้ข‘ๅค„็†: โ”‚ โ”‚ โ”œโ”€โ”€ Web Audio API (ๆต่งˆๅ™จ) โ”‚ โ”‚ โ”œโ”€โ”€ expo-av (React Native) โ”‚ โ”‚ โ”œโ”€โ”€ ้Ÿณ้ข‘ๆ ผๅผ: Opus (ไฝŽๅปถ่ฟŸ) / AAC / MP3 โ”‚ โ”‚ โ””โ”€โ”€ AudioWorklet (ไฝŽๅปถ่ฟŸ้Ÿณ้ข‘ๅค„็†) โ”‚ โ”‚ โ”‚ โ”‚ ่ทจๅนณๅฐ: โ”‚ โ”‚ โ”œโ”€โ”€ PWA (Web โ†’ ็งปๅŠจ็ซฏ/ๆกŒ้ข็ซฏ) โ”‚ โ”‚ โ”œโ”€โ”€ React Native / Flutter (ๅŽŸ็”Ÿ็งปๅŠจ็ซฏ) โ”‚ โ”‚ โ”œโ”€โ”€ Electron / Tauri (ๆกŒ้ข็ซฏ) โ”‚ โ”‚ โ””โ”€โ”€ Capacitor (Web โ†’ ๆททๅˆ็งปๅŠจ็ซฏ) โ”‚ โ”‚ โ”‚ โ”‚ ๅ›ฝ้™…ๅŒ–: โ”‚ โ”‚ โ””โ”€โ”€ i18next (ๅคš่ฏญ่จ€ๆ”ฏๆŒ) โ”‚ โ”‚ โ”‚ โ”‚ ๆต‹่ฏ•: โ”‚ โ”‚ โ”œโ”€โ”€ Vitest (ๅ•ๅ…ƒๆต‹่ฏ•) โ”‚ โ”‚ โ”œโ”€โ”€ Playwright (E2Eๆต‹่ฏ•) โ”‚ โ”‚ โ””โ”€โ”€ Storybook (็ป„ไปถๆ–‡ๆกฃ) โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` --- ## ๅ››ใ€ๆœๅŠก็ซฏๅฏ่ฟ็งปๆ€ง่ฎพ่ฎก ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ“ฆ ๆœๅŠก็ซฏๅฏ่ฟ็งปๆ€ง่ฎพ่ฎก โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Docker ๅฎนๅ™จๅŒ– (ไธ€็บงไฟ้šœ) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚Gateway โ”‚ โ”‚AI Core โ”‚ โ”‚TTS/ASR โ”‚ โ”‚Memory โ”‚ โ”‚Tool โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚Engine โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ–ฒ โ–ฒ โ–ฒ โ–ฒ โ–ฒ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ docker-compose โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๅ•ๆœบ้ƒจ็ฝฒ: docker-compose up -d (ไธ€่กŒๅ‘ฝไปคๅฏๅŠจๅ…จ้ƒจๆœๅŠก) โ”‚ โ”‚ โ”‚ โ”‚ ้›†็พค้ƒจ็ฝฒ: Kubernetes Helm Charts โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๆ•ฐๆฎๆŒไน…ๅŒ–็ญ–็•ฅ (ไบŒ็บงไฟ้šœ) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ๆ‰€ๆœ‰ๆ•ฐๆฎๆŒ‚่ฝฝๅค–้ƒจVolume โ”‚ โ”‚ โ”‚ โ”‚ ยท ๆ•ฐๆฎๅบ“: ๅฎšๆœŸ่‡ชๅŠจๅค‡ไปฝ + ๆ‰‹ๅŠจๅฏผๅ‡บ โ”‚ โ”‚ โ”‚ โ”‚ ยท ่ฎฐๅฟ†ๆ–‡ไปถ: /data/memory/ โ†’ ็›ดๆŽฅๆ‰“ๅŒ…่ฟ็งป โ”‚ โ”‚ โ”‚ โ”‚ ยท ้…็ฝฎๆ–‡ไปถ: ็Žฏๅขƒๅ˜้‡ + .env ๆ–‡ไปถ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ่ฟ็งปๆญฅ้ชค: โ”‚ โ”‚ โ”‚ โ”‚ 1. ๅœๆญขๆœๅŠก โ”‚ โ”‚ โ”‚ โ”‚ 2. ๅคๅˆถ /data/ ็›ฎๅฝ•ๅˆฐๆ–ฐๆœๅŠกๅ™จ โ”‚ โ”‚ โ”‚ โ”‚ 3. ๅคๅˆถ docker-compose.yml + .env โ”‚ โ”‚ โ”‚ โ”‚ 4. docker-compose up -d โ”‚ โ”‚ โ”‚ โ”‚ โœ… ๅฎŒๆˆ๏ผ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ้…็ฝฎๅณไปฃ็  (ไธ‰็บงไฟ้šœ) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ๆ‰€ๆœ‰้…็ฝฎ็‰ˆๆœฌๅŒ– (Git) โ”‚ โ”‚ โ”‚ โ”‚ ยท ็Žฏๅขƒๅ˜้‡ๅˆ†ๅฑ‚: .env.base / .env.prod / .env.dev โ”‚ โ”‚ โ”‚ โ”‚ ยท ไธ€้”ฎ้ƒจ็ฝฒ่„šๆœฌ (deploy.sh) โ”‚ โ”‚ โ”‚ โ”‚ ยท CI/CD Pipeline (GitHub Actions) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` --- ## ไบ”ใ€้€šไฟกๅ่ฎฎไธŽAPI่ฎพ่ฎก ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ“ก ้€šไฟกๆžถๆž„่ฎพ่ฎก โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๅ่ฎฎ้€‰ๆ‹ฉไธŽ้€‚็”จๅœบๆ™ฏ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ WebSocket โ”€โ”€โ”€โ”€ ๆ ธๅฟƒๅฏน่ฏ้€š้“ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ๅฎžๆ—ถๅŒๅ‘้€šไฟก โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท LLMๆตๅผ่พ“ๅ‡บๆŽจ้€ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ่ฏญ้Ÿณๅˆ†ๅฅๆตๅผๆŽจ้€ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ่ฎพๅค‡็Šถๆ€ๅฎžๆ—ถๆŽจ้€ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ๅฟƒ่ทณไฟๆดป โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ HTTP/2 REST โ”€โ”€ ้žๅฎžๆ—ถๆ“ไฝœ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ๆ–‡ไปถไธŠไผ  (้Ÿณ้ข‘/ๅ›พ็‰‡) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ๅކๅฒ่ฎฐๅฝ•ๅˆ†้กตๆŸฅ่ฏข โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ้…็ฝฎ็ฎก็† โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ยท ็”จๆˆท่ฎค่ฏ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ gRPC โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ ๅ†…้ƒจๆœๅŠก้—ด้€šไฟก โ”‚ โ”‚ โ”‚ โ”‚ ยท AIๅผ•ๆ“Ž โ†” ่ฎฐๅฟ†็ณป็ปŸ โ”‚ โ”‚ โ”‚ โ”‚ ยท AIๅผ•ๆ“Ž โ†” ๅทฅๅ…ทๅผ•ๆ“Ž โ”‚ โ”‚ โ”‚ โ”‚ ยท ้ซ˜ๆ€ง่ƒฝ + ๅผบ็ฑปๅž‹ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ WebSocket ๆถˆๆฏๅ่ฎฎ่ฎพ่ฎก (JSON) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ // ๅฎขๆˆท็ซฏ โ†’ ๆœๅŠก็ซฏ โ”‚ โ”‚ โ”‚ โ”‚ { โ”‚ โ”‚ โ”‚ โ”‚ "type": "message", // message | voice_input โ”‚ โ”‚ โ”‚ โ”‚ "session_id": "uuid", // ไผš่ฏID โ”‚ โ”‚ โ”‚ โ”‚ "mode": "text", // text | voice_msg | โ”‚ โ”‚ โ”‚ โ”‚ // voice_assistant โ”‚ โ”‚ โ”‚ โ”‚ "content": "ๆ‰“ๅผ€ๅฎขๅŽ…็š„็ฏ", // ๆ–‡ๆœฌๅ†…ๅฎน โ”‚ โ”‚ โ”‚ โ”‚ "audio_data": null, // Base64้Ÿณ้ข‘(่ฏญ้Ÿณ่พ“ๅ…ฅๆ—ถ) โ”‚ โ”‚ โ”‚ โ”‚ "timestamp": 1715600000 โ”‚ โ”‚ โ”‚ โ”‚ } โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ // ๆœๅŠก็ซฏ โ†’ ๅฎขๆˆท็ซฏ โ”‚ โ”‚ โ”‚ โ”‚ { โ”‚ โ”‚ โ”‚ โ”‚ "type": "response", // response | segment | โ”‚ โ”‚ โ”‚ โ”‚ // audio | device_update โ”‚ โ”‚ โ”‚ โ”‚ "message_id": "uuid", โ”‚ โ”‚ โ”‚ โ”‚ "text": "ๅฅฝ็š„ไธปไบบ๏ผŒๆˆ‘่ฟ™ๅฐฑๅธฎๆ‚จๆ‰“ๅผ€ๅฎขๅŽ…็š„็ฏๅ–ต~", โ”‚ โ”‚ โ”‚ โ”‚ "segments": [ // ๆ–ญๅฅๆ•ฐ็ป„(่ฏญ้ŸณๅŠฉๆ‰‹ๆจกๅผ) โ”‚ โ”‚ โ”‚ โ”‚ { โ”‚ โ”‚ โ”‚ โ”‚ "index": 0, โ”‚ โ”‚ โ”‚ โ”‚ "text": "ๅฅฝ็š„ไธปไบบใ€‚", โ”‚ โ”‚ โ”‚ โ”‚ "audio_url": "/audio/seg_001.opus", โ”‚ โ”‚ โ”‚ โ”‚ "duration_ms": 1200 โ”‚ โ”‚ โ”‚ โ”‚ }, โ”‚ โ”‚ โ”‚ โ”‚ { โ”‚ โ”‚ โ”‚ โ”‚ "index": 1, โ”‚ โ”‚ โ”‚ โ”‚ "text": "ๆˆ‘่ฟ™ๅฐฑๅธฎๆ‚จๆ‰“ๅผ€ๅฎขๅŽ…็š„็ฏๅ–ต~", โ”‚ โ”‚ โ”‚ โ”‚ "audio_url": "/audio/seg_002.opus", โ”‚ โ”‚ โ”‚ โ”‚ "duration_ms": 1800 โ”‚ โ”‚ โ”‚ โ”‚ } โ”‚ โ”‚ โ”‚ โ”‚ ], โ”‚ โ”‚ โ”‚ โ”‚ "full_audio_url": "/audio/full_resp.opus", // ๅฎŒๆ•ด้Ÿณ้ข‘ โ”‚ โ”‚ โ”‚ โ”‚ "response_mode": "voice_assistant", // ๅ›žๅคๆจกๅผ โ”‚ โ”‚ โ”‚ โ”‚ "tool_calls": [], // ๅทฅๅ…ท่ฐƒ็”จ่ฎฐๅฝ•(ๅฆ‚ๆœ‰) โ”‚ โ”‚ โ”‚ โ”‚ "timestamp": 1715600001 โ”‚ โ”‚ โ”‚ โ”‚ } โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` --- ## ๅ…ญใ€ๅฎขๆˆท็ซฏ่ทจ็ซฏ่ƒฝๅŠ›่ฎพ่ฎก ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐ŸŒ ๅฎขๆˆท็ซฏ่ทจ็ซฏ็ญ–็•ฅ็Ÿฉ้˜ต โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ ่ƒฝๅŠ› โ”‚ Web PWA โ”‚ React Nat โ”‚ Electron โ”‚ ๆ™บ่ƒฝ้Ÿณ็ฎฑ โ”‚ โ”‚ โ”‚ โ”‚ ive/Flutteโ”‚ /Tauri โ”‚ (ๅตŒๅ…ฅๅผ) โ”‚ โ”‚ โ”‚ โ”‚ r โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ ๆ–‡ๅญ—่Šๅคฉ โ”‚ โœ… โ”‚ โœ… โ”‚ โœ… โ”‚ โŒ โ”‚ โ”‚ ่ฏญ้Ÿณ่พ“ๅ…ฅ โ”‚ โœ… โ”‚ โœ… โ”‚ โœ… โ”‚ โœ… โ”‚ โ”‚ ่ฏญ้Ÿณ่พ“ๅ‡บ โ”‚ โœ… โ”‚ โœ… โ”‚ โœ… โ”‚ โœ… โ”‚ โ”‚ ๆตๅผ้Ÿณ้ข‘ โ”‚ โœ… โ”‚ โœ… โ”‚ โœ… โ”‚ โœ… โ”‚ โ”‚ ่ฎพๅค‡้ขๆฟ โ”‚ โœ… โ”‚ โœ… โ”‚ โœ… โ”‚ โŒ โ”‚ โ”‚ ๅŽๅฐ่ฟ่กŒ โ”‚ โš ๏ธๆœ‰้™ โ”‚ โœ… โ”‚ โœ… โ”‚ โœ… โ”‚ โ”‚ ็ณป็ปŸ้€š็Ÿฅ โ”‚ โœ… โ”‚ โœ… โ”‚ โœ… โ”‚ โœ… โ”‚ โ”‚ ็ฆป็บฟ็ผ“ๅญ˜ โ”‚ โœ… โ”‚ โœ… โ”‚ โœ… โ”‚ โš ๏ธๆœ‰้™ โ”‚ โ”‚ ๆœฌๅœฐๅญ˜ๅ‚จ โ”‚ โš ๏ธๆœ‰้™ โ”‚ โœ… โ”‚ โœ… โ”‚ โš ๏ธๆœ‰้™ โ”‚ โ”‚ ๅ…จๅฑ€ๅฟซๆท้”ฎ โ”‚ โŒ โ”‚ โŒ โ”‚ โœ… โ”‚ โœ…(็กฌไปถ) โ”‚ โ”‚ ๅคš็ช—ๅฃ โ”‚ โŒ โ”‚ โŒ โ”‚ โœ… โ”‚ โŒ โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ ้€‚็”จๅœบๆ™ฏ โ”‚ๆ—ฅๅธธ่Šๅคฉ โ”‚็งปๅŠจไธปๅŠ› โ”‚ไธ“ไธšๅทฅไฝœ็ซ™ โ”‚ๆ— ๅฑไบคไบ’ โ”‚ โ”‚ โ”‚ๅฟซ้€Ÿ่ฎฟ้—ฎ โ”‚ๅ…จๅŠŸ่ƒฝ โ”‚ๅ…จๅŠŸ่ƒฝ โ”‚็บฏ่ฏญ้Ÿณ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` --- ## ไธƒใ€ๅฎŒๆ•ด็ณป็ปŸๆ—ถๅบๅ›พ (Mermaid) ไปฅไธ‹ๆ˜ฏๆ ธๅฟƒไบคไบ’ๆต็จ‹็š„ Mermaid ๅ›พ่กจ๏ผŒๅฏๅœจๆ”ฏๆŒ Mermaid ็š„ๅทฅๅ…ทไธญๆธฒๆŸ“๏ผš ### 7.1 ่ฏญ้ŸณๅŠฉๆ‰‹ๆจกๅผๅฎŒๆ•ดไบคไบ’ๆต็จ‹ ```mermaid sequenceDiagram participant U as ็”จๆˆท participant C as ๅฎขๆˆท็ซฏ participant G as API็ฝ‘ๅ…ณ participant A as AIๆ ธๅฟƒๅผ•ๆ“Ž participant M as ่ฎฐๅฟ†็ณป็ปŸ participant T as TTSๆœๅŠก participant I as IoT่ฎพๅค‡ U->>C: ๐ŸŽ™๏ธ ่ฏญ้Ÿณ่พ“ๅ…ฅ"ๆ‰“ๅผ€ๅฎขๅŽ…็š„็ฏ" C->>C: VADๆฃ€ๆต‹ + ้™ๅ™ช C->>G: WebSocket: {type:voice_input, audio:base64} G->>A: ่ฝฌๅ‘้Ÿณ้ข‘ A->>T: ASR่ฏทๆฑ‚ T-->>A: ๆ–‡ๆœฌ"ๆ‰“ๅผ€ๅฎขๅŽ…็š„็ฏ" A->>M: ๆฃ€็ดข็›ธๅ…ณ่ฎฐๅฟ† M-->>A: ็”จๆˆทๅๅฅฝ: ๅฎขๅŽ…็ฏๅ…‰ๅๅฅฝๆš–่‰ฒ A->>A: ็ป„่ฃ…Context: ไบบๆ ผ+่ฎฐๅฟ†+ๅކๅฒ+็”จๆˆท่พ“ๅ…ฅ A->>A: LLMๆŽจ็† A-->>A: ๅ†ณๅฎš่ฐƒ็”จๅทฅๅ…ท: light_control A->>I: ่ฐƒ็”จIoT API: ๅฎขๅŽ…็ฏๅผ€+ๆš–่‰ฒ I-->>A: ๆˆๅŠŸ, ไบฎๅบฆ75%, ่‰ฒๆธฉ3000K A->>A: ็”Ÿๆˆๅ›žๅค: "ๅฅฝ็š„ไธปไบบใ€‚ๅฎขๅŽ…็š„็ฏๅทฒ็ปๆ‰“ๅผ€ไบ†, ่ฐƒๆˆไบ†ๆ‚จๅ–œๆฌข็š„ๆš–่‰ฒใ€‚็Žฐๅœจไบฎๅบฆๆ˜ฏ75%ๅ–ต~" A->>A: ๆ–ญๅฅๅผ•ๆ“Žๅค„็†: S1:"ๅฅฝ็š„ไธปไบบใ€‚" S2:"ๅฎขๅŽ…็š„็ฏๅทฒ็ปๆ‰“ๅผ€ไบ†,่ฐƒๆˆไบ†ๆ‚จๅ–œๆฌข็š„ๆš–่‰ฒใ€‚" S3:"็Žฐๅœจไบฎๅบฆๆ˜ฏ75%ๅ–ต~" loop ้€ๅฅTTS A->>T: S1ๆ–‡ๆœฌ T-->>A: S1้Ÿณ้ข‘URL A->>G: ๆŽจ้€ segment {index:0, text, audio_url} G->>C: WebSocketๆŽจ้€ C->>C: ๅŠ ๅ…ฅๆ’ญๆ”พ้˜Ÿๅˆ—, ็ซ‹ๅณๆ’ญๆ”พ C->>U: ๐Ÿ”Š "ๅฅฝ็š„ไธปไบบใ€‚" (ๅŒๆ—ถๆ˜พ็คบๆ–‡ๅญ—) end A->>M: ่ฎฐๅฝ•: ็”จๆˆทๆ“ไฝœไบ†ๅฎขๅŽ…็ฏ M->>M: ๆ›ดๆ–ฐ่ฎฐๅฟ†็ดขๅผ• C->>U: ๆ˜พ็คบๅฎŒๆ•ดๅŽŸๆ–‡ ``` ### 7.2 ้•ฟๆœŸ่ฎฐๅฟ†็”Ÿๅ‘ฝๅ‘จๆœŸ ```mermaid flowchart TD A[ๅฏน่ฏ็ป“ๆŸ] --> B[่ฎฐๅฟ†ๆๅ–ๅ™จ] B --> C{ไฟกๆฏๆ˜ฏๅฆๆœ‰ไปทๅ€ผ?} C -->|ๆ— ไปทๅ€ผ| D[ไธขๅผƒ] C -->|ๆœ‰ไปทๅ€ผ| E[ๅฎžไฝ“ๆŠฝๅ– & ๅ…ณ็ณป่ฏ†ๅˆซ] E --> F{ไฟกๆฏๅˆ†็ฑป} F -->|็”จๆˆท็›ธๅ…ณ| G1[็”จๆˆท็”ปๅƒๆ›ดๆ–ฐ] F -->|ไบ‹ๅฎžไฟกๆฏ| G2[ไบ‹ๅฎž่ฎฐๅฟ†] F -->|ๅๅฅฝไน ๆƒฏ| G3[ๅๅฅฝ่ฎฐๅฟ†] F -->|ไบ‹ไปถ| G4[ไบ‹ไปถๆ—ถ้—ด็บฟ] G1 --> H{้‡่ฆๆ€ง่ฏ„ไผฐ} G2 --> H G3 --> H G4 --> H H -->|๐Ÿ”ด ๆ ธๅฟƒ| I1[/data/memory/users/{id}/facts/core/] H -->|๐ŸŸก ้‡่ฆ| I2[/data/memory/users/{id}/facts/important/] H -->|๐ŸŸข ๆ™ฎ้€š| I3[/data/memory/users/{id}/facts/normal/] H -->|โšช ไธดๆ—ถ| I4[ไป…ไฟ็•™ๅœจไผš่ฏไธŠไธ‹ๆ–‡] I1 --> J[(PostgreSQL)] I1 --> K[(ๅ‘้‡ๆ•ฐๆฎๅบ“)] I2 --> J I2 --> K I3 --> J J --> L[ๅฎšๆœŸๅค‡ไปฝๅˆฐMinIO/S3] K --> L L --> M{่ฟ็งป่งฆๅ‘?} M -->|ๆ˜ฏ| N[ๅคๅˆถ/data/็›ฎๅฝ•ๅˆฐๆ–ฐๆœๅŠกๅ™จ] N --> O[docker-compose up -d] O --> P[โœ… ่ฟ็งปๅฎŒๆˆ,่ฎฐๅฟ†ๆ— ๆŸ] ``` ### 7.3 ๆœๅŠก้ƒจ็ฝฒๆžถๆž„ ```mermaid graph TB subgraph "็”จๆˆท็ซฏ" W[Web PWA] M[iOS/Android App] D[Desktop App] S[ๆ™บ่ƒฝ้Ÿณ็ฎฑ] end subgraph "่ดŸ่ฝฝๅ‡่กก" LB[Nginx / Traefik] end subgraph "ๆœๅŠก้›†็พค" GW1[Gateway-1] GW2[Gateway-2] AI1[AI Core-1] AI2[AI Core-2] TS1[TTS/ASR-1] TS2[TTS/ASR-2] MM[Memory Manager] TE[Tool Engine] end subgraph "ๆ•ฐๆฎๅฑ‚" PG[(PostgreSQL)] RD[(Redis)] VD[(ๅ‘้‡ๆ•ฐๆฎๅบ“)] FS[(MinIO ๆ–‡ไปถๅญ˜ๅ‚จ)] end subgraph "ๅค–้ƒจๆœๅŠก" LLM[LLM API
OpenAI/Claude/ๆœฌๅœฐ] IOT[IoT Platform
MQTT Broker] EXT[็ฌฌไธ‰ๆ–นAPI
ๅคฉๆฐ”/ๆ–ฐ้—ป็ญ‰] end W & M & D & S --> LB LB --> GW1 & GW2 GW1 & GW2 --> AI1 & AI2 AI1 & AI2 --> MM AI1 & AI2 --> TE AI1 & AI2 --> TS1 & TS2 AI1 & AI2 --> LLM TE --> IOT TE --> EXT MM --> PG & VD & FS AI1 & AI2 --> RD ``` --- ## ๅ…ซใ€้กน็›ฎ็›ฎๅฝ•็ป“ๆž„ๅปบ่ฎฎ ``` family-ai-assistant/ โ”‚ โ”œโ”€โ”€ backend/ # ๅŽ็ซฏๆœๅŠก โ”‚ โ”œโ”€โ”€ gateway/ # API็ฝ‘ๅ…ณๆœๅŠก โ”‚ โ”‚ โ”œโ”€โ”€ cmd/ # ๅ…ฅๅฃ โ”‚ โ”‚ โ”œโ”€โ”€ internal/ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ middleware/ # ่ฎค่ฏ/้™ๆต/ๆ—ฅๅฟ— โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ handler/ # ่ทฏ็”ฑๅค„็† โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ ws/ # WebSocket็ฎก็† โ”‚ โ”‚ โ””โ”€โ”€ Dockerfile โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ ai-core/ # ๆ ธๅฟƒAIๅผ•ๆ“Ž โ”‚ โ”‚ โ”œโ”€โ”€ cmd/ โ”‚ โ”‚ โ”œโ”€โ”€ internal/ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ orchestrator/ # ๅฏน่ฏ็ผ–ๆŽ’ๅ™จ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ persona/ # ไบบๆ ผๆณจๅ…ฅ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ context/ # ไธŠไธ‹ๆ–‡ๆž„ๅปบ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ llm/ # LLM้€‚้…ๅฑ‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ strategist/ # ๅ›žๅค็ญ–็•ฅ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ sentence_splitter/ # ๆ–ญๅฅๅผ•ๆ“Ž โ”‚ โ”‚ โ””โ”€โ”€ Dockerfile โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ voice-service/ # ่ฏญ้Ÿณๅค„็†ๆœๅŠก โ”‚ โ”‚ โ”œโ”€โ”€ cmd/ โ”‚ โ”‚ โ”œโ”€โ”€ internal/ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ asr/ # ่ฏญ้Ÿณ่ฏ†ๅˆซ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ tts/ # ่ฏญ้Ÿณๅˆๆˆ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ vad/ # ่ฏญ้ŸณๆดปๅŠจๆฃ€ๆต‹ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ pipeline/ # ้Ÿณ้ข‘ๆตๆฐด็บฟ โ”‚ โ”‚ โ””โ”€โ”€ Dockerfile โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ memory-service/ # ่ฎฐๅฟ†็ฎก็†ๆœๅŠก โ”‚ โ”‚ โ”œโ”€โ”€ cmd/ โ”‚ โ”‚ โ”œโ”€โ”€ internal/ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ extractor/ # ่ฎฐๅฟ†ๆๅ– โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ classifier/ # ๅˆ†็ฑปๅˆ†็บง โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ retriever/ # ่ฎฐๅฟ†ๆฃ€็ดข โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ store/ # ๅญ˜ๅ‚จๅฑ‚ โ”‚ โ”‚ โ””โ”€โ”€ Dockerfile โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ tool-engine/ # ๅทฅๅ…ท่ฐƒ็”จๅผ•ๆ“Ž โ”‚ โ”‚ โ”œโ”€โ”€ cmd/ โ”‚ โ”‚ โ”œโ”€โ”€ internal/ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ registry/ # ๅทฅๅ…ทๆณจๅ†Œ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ executor/ # ๆ‰ง่กŒๅผ•ๆ“Ž โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ plugins/ # ๆ’ไปถ็ณป็ปŸ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ adapters/ # IoT/่ฎพๅค‡้€‚้…ๅ™จ โ”‚ โ”‚ โ””โ”€โ”€ Dockerfile โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ proto/ # gRPCๅ่ฎฎๅฎšไน‰ โ”‚ โ”‚ โ”œโ”€โ”€ ai_core.proto โ”‚ โ”‚ โ”œโ”€โ”€ memory.proto โ”‚ โ”‚ โ”œโ”€โ”€ voice.proto โ”‚ โ”‚ โ””โ”€โ”€ tool.proto โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ data/ # ๆ•ฐๆฎๆ–‡ไปถ(VolumeๆŒ‚่ฝฝ) โ”‚ โ”‚ โ”œโ”€โ”€ memory/ # ่ฎฐๅฟ†ๆ–‡ไปถ็ณป็ปŸ โ”‚ โ”‚ โ”œโ”€โ”€ persona/ # ไบบๆ ผ็Ÿฅ่ฏ†ๆ–‡ๆกฃ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ default.yaml โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ custom/ โ”‚ โ”‚ โ””โ”€โ”€ plugins/ # ็ฌฌไธ‰ๆ–นๆ’ไปถ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ docker-compose.yml # ไธ€้”ฎ้ƒจ็ฝฒ โ”‚ โ”œโ”€โ”€ docker-compose.prod.yml # ็”Ÿไบง็Žฏๅขƒ โ”‚ โ””โ”€โ”€ .env.example # ็Žฏๅขƒๅ˜้‡ๆจกๆฟ โ”‚ โ”œโ”€โ”€ frontend/ # ๅ‰็ซฏ้กน็›ฎ โ”‚ โ”œโ”€โ”€ packages/ โ”‚ โ”‚ โ”œโ”€โ”€ shared/ # ๅ…ฑไบซไปฃ็  โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ src/ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ api/ # APIๅฎขๆˆท็ซฏ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ ws/ # WebSocket็ฎก็† โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ audio/ # ้Ÿณ้ข‘ๅค„็† โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ store/ # ็Šถๆ€็ฎก็† โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ types/ # TypeScript็ฑปๅž‹ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ utils/ # ๅทฅๅ…ทๅ‡ฝๆ•ฐ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ package.json โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ web/ # Web PWA โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ src/ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ components/ # UI็ป„ไปถ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ chat/ # ่Šๅคฉ็ป„ไปถ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ voice/ # ่ฏญ้Ÿณ็ป„ไปถ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ device/ # ่ฎพๅค‡ๆŽงๅˆถ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ memory/ # ่ฎฐๅฟ†ๆŸฅ็œ‹ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ pages/ # ้กต้ข โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ hooks/ # ่‡ชๅฎšไน‰Hook โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ workers/ # Web Workers โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ vite.config.ts โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ mobile/ # React Native / Flutter โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ ... โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ desktop/ # Electron / Tauri โ”‚ โ”‚ โ””โ”€โ”€ ... โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ turbo.json # Turborepo้…็ฝฎ โ”‚ โ”œโ”€โ”€ docs/ # ๆ–‡ๆกฃ โ”‚ โ”œโ”€โ”€ architecture.md # ๆžถๆž„ๆ–‡ๆกฃ โ”‚ โ”œโ”€โ”€ api-reference.md # APIๆ–‡ๆกฃ โ”‚ โ”œโ”€โ”€ deployment.md # ้ƒจ็ฝฒๆŒ‡ๅ— โ”‚ โ””โ”€โ”€ persona-guide.md # ไบบๆ ผ่ฎพๅฎšๆŒ‡ๅ— โ”‚ โ”œโ”€โ”€ scripts/ # ้ƒจ็ฝฒ/่ฟ็ปด่„šๆœฌ โ”‚ โ”œโ”€โ”€ deploy.sh โ”‚ โ”œโ”€โ”€ backup.sh โ”‚ โ”œโ”€โ”€ migrate.sh โ”‚ โ””โ”€โ”€ setup.sh โ”‚ โ”œโ”€โ”€ .github/ # CI/CD โ”‚ โ””โ”€โ”€ workflows/ โ”‚ โ”œโ”€โ”€ backend-ci.yml โ”‚ โ””โ”€โ”€ frontend-ci.yml โ”‚ โ””โ”€โ”€ README.md ``` --- ## ไนใ€ๅ…ณ้”ฎๆŠ€ๆœฏๅ†ณ็ญ–ไธŽ่€ƒ้‡ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โš ๏ธ ๅ…ณ้”ฎๆŠ€ๆœฏๅ†ณ็ญ–็Ÿฉ้˜ต โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ โ”‚ 1. ไธบไป€ไนˆ้€‰ๆ‹ฉ WebSocket ไฝœไธบไธป้€šไฟกๅ่ฎฎ๏ผŸ โ”‚ โ”‚ โœ… ๅŒๅ‘ๅฎžๆ—ถ้€šไฟก๏ผŒ้€‚ๅˆๆตๅผๅฏน่ฏ โ”‚ โ”‚ โœ… ไฝŽๅปถ่ฟŸ๏ผŒๆ”ฏๆŒ้Ÿณ้ข‘ๆตๆŽจ้€ โ”‚ โ”‚ โœ… ๆ–ญ็บฟ้‡่ฟžๆœบๅˆถๆˆ็†Ÿ โ”‚ โ”‚ โš ๏ธ ้œ€ๅค„็†่ฟžๆŽฅ็Šถๆ€็ฎก็†ๅ’Œๅฟƒ่ทณ โ”‚ โ”‚ โ”‚ โ”‚ 2. ่ฎฐๅฟ†็ณป็ปŸไธบไป€ไนˆ็”จๆ–‡ไปถ+ๆ•ฐๆฎๅบ“ๆททๅˆ๏ผŸ โ”‚ โ”‚ โœ… ๆ–‡ไปถ็ณป็ปŸ๏ผšไบบ็ฑปๅฏ่ฏป๏ผŒ็›ดๆŽฅ่ฟ็งป๏ผŒๅค‡ไปฝ็ฎ€ๅ• โ”‚ โ”‚ โœ… PostgreSQL๏ผš็ป“ๆž„ๅŒ–ๆŸฅ่ฏข๏ผŒๅ…ณ็ณปๅž‹ๆ•ฐๆฎ โ”‚ โ”‚ โœ… ๅ‘้‡ๆ•ฐๆฎๅบ“๏ผš่ฏญไน‰ๆฃ€็ดข๏ผŒ็›ธไผผ่ฎฐๅฟ†ๅŒน้… โ”‚ โ”‚ โœ… ไธ‰ๅฑ‚ไบ’่กฅ๏ผŒ่ฆ†็›–ๆ‰€ๆœ‰ๅœบๆ™ฏ โ”‚ โ”‚ โ”‚ โ”‚ 3. ไบบๆ ผ็ณป็ปŸไธบไป€ไนˆ็”จ YAML/ๆ–‡ๆกฃ่€Œ้žไปฃ็ ็กฌ็ผ–็ ๏ผŸ โ”‚ โ”‚ โœ… ้žๆŠ€ๆœฏไบบๅ‘˜ๅฏ็ผ–่พ‘ไฟฎๆ”น โ”‚ โ”‚ โœ… ๆ”ฏๆŒๅคš่ง’่‰ฒๅฟซ้€Ÿๅˆ‡ๆข โ”‚ โ”‚ โœ… ็‰ˆๆœฌ็ฎก็†ๅ‹ๅฅฝ โ”‚ โ”‚ โœ… ๅฏๅˆ†ไบซ/ๅฏผๅ…ฅ็คพๅŒบ่ง’่‰ฒ โ”‚ โ”‚ โ”‚ โ”‚ 4. ่ฏญ้ŸณๅŠฉๆ‰‹ๆจกๅผๆ–ญๅฅ็ญ–็•ฅ โ”‚ โ”‚ โœ… ๆŒ‰ๅฅๅทๆ–ญๅฅ๏ผšๆœ€่‡ช็„ถ็š„ๅˆ†้š”็‚น โ”‚ โ”‚ โœ… ้ฆ–ๅฅไผ˜ๅ…ˆ๏ผš้™ไฝŽ้ฆ–ๆฌกๅ“ๅบ”ๅปถ่ฟŸ โ”‚ โ”‚ โœ… ้˜Ÿๅˆ—้ข„็”Ÿๆˆ๏ผš่พนๆ’ญๆ”พ่พนๅˆๆˆ๏ผŒๆ— ็ผ่ก”ๆŽฅ โ”‚ โ”‚ โš ๏ธ ้œ€ๅค„็†ๆ— ๅฅๅท็š„้•ฟๅฅ๏ผˆ้™็บง็ญ–็•ฅ๏ผšๆŒ‰้€—ๅท/้•ฟๅบฆๅˆ‡ๅˆ†๏ผ‰ โ”‚ โ”‚ โ”‚ โ”‚ 5. LLM ้€‰ๆ‹ฉ็ญ–็•ฅ โ”‚ โ”‚ โœ… ไบ‘็ซฏๅคงๆจกๅž‹๏ผšๅคๆ‚ๆŽจ็†ใ€็Ÿฅ่ฏ†้—ฎ็ญ” (GPT-4, Claude) โ”‚ โ”‚ โœ… ๆœฌๅœฐๅฐๆจกๅž‹๏ผšๅฟซ้€Ÿๅ“ๅบ”ใ€็ฆป็บฟๅฏ็”จ (Qwen, DeepSeek) โ”‚ โ”‚ โœ… ๆททๅˆ่ทฏ็”ฑ๏ผšๆ นๆฎไปปๅŠกๅคๆ‚ๅบฆ่‡ชๅŠจ้€‰ๆ‹ฉ โ”‚ โ”‚ โš ๏ธ ้œ€็ปดๆŠคๅคšๆจกๅž‹้€‚้…ๅฑ‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` --- ## ๅใ€ๆ€ป็ป“ไธŽๅŽ็ปญๆŽจ่ฟ›ๅปบ่ฎฎ | ้˜ถๆฎต | ๅ†…ๅฎน | ไบงๅ‡บ | |------|------|------| | **Phase 1: ๆœ€ๅฐๅฏ็”จ** | ๆ–‡ๅญ—ๅฏน่ฏ + ไบบๆ ผๆณจๅ…ฅ + ๅŸบ็ก€่ฎฐๅฟ† + Web PWA | ๅฏ่Šๅคฉ็š„AIๅŠฉๆ‰‹ | | **Phase 2: ่ฏญ้Ÿณไบคไบ’** | ASR/TTS้›†ๆˆ + ๆ–ญๅฅๆตๅผ + ่ฏญ้ŸณๅŠฉๆ‰‹ๆจกๅผ | ๆ”ฏๆŒ่ฏญ้Ÿณๅฏน่ฏ | | **Phase 3: ๅฎถๅบญIoT** | IoT้€‚้…ๅ™จ + ่ฎพๅค‡ๆŽงๅˆถ้ขๆฟ + ๅœบๆ™ฏ่”ๅŠจ | ๅฎถๅบญ็ฎกๅฎถ่ƒฝๅŠ› | | **Phase 4: ๆทฑๅบฆ่ฎฐๅฟ†** | ๅ‘้‡ๆฃ€็ดข + ่ฎฐๅฟ†ๅฏ่ง†ๅŒ– + ๆ™บ่ƒฝๆ‘˜่ฆ | ็œŸๆญฃ็š„"่ฎฐไฝไฝ " | | **Phase 5: ๅคš็ซฏ่ฆ†็›–** | React Native + Electron + ๆ™บ่ƒฝ้Ÿณ็ฎฑ | ๅ…จๅœบๆ™ฏ่ฆ†็›– | | **Phase 6: ่ทจๅŸŸไบ’่”** | ่ฝฆๆœบ/ๅŠžๅ…ฌ/็ฉฟๆˆด่ฎพๅค‡้›†ๆˆ | ๅ…จ่ƒฝๅŠฉๆ‰‹ | ---