# ๐Ÿ›๏ธ ๆžถๆž„่ฎพ่ฎกๆ–‡ๆกฃ > **Architecture Design Document** --- ## ไธ€ใ€็ณป็ปŸๆฆ‚่ฟฐ ๅคฉๅทฅๆ™บ่ƒฝไฝ“ๅนณๅฐๆ˜ฏไธ€ไธชไผไธš็บง AI ๆ™บ่ƒฝไฝ“๏ผˆAgent๏ผ‰ๅนณๅฐ๏ผŒๆไพ›ๆ™บ่ƒฝๅฏน่ฏใ€็Ÿฅ่ฏ†ๅบ“็ฎก็†ใ€ๆ™บ่ƒฝไฝ“็ผ–ๆŽ’็ญ‰ๆ ธๅฟƒ่ƒฝๅŠ›๏ผŒ้‡‡็”จ**ๅ‰ๅŽ็ซฏๅˆ†็ฆป** + **ๅผ‚ๆญฅไปปๅŠก้˜Ÿๅˆ—** ็š„ๆžถๆž„่ฎพ่ฎกใ€‚ --- ## ไบŒใ€ๆŠ€ๆœฏ้€‰ๅž‹ | ๅฑ‚็บง | ๆŠ€ๆœฏ | ็‰ˆๆœฌ | ้€‰ๅž‹็†็”ฑ | |:----|:-----|:-----|:---------| | **ๅ‰็ซฏๆก†ๆžถ** | Vue 3 (Composition API) | 3.4+ | ่ฝป้‡ใ€ๅ“ๅบ”ๅผใ€TypeScript ๅ‹ๅฅฝ | | **ๅ‰็ซฏๆž„ๅปบ** | Vite | 5+ | ๆž้€Ÿ HMR๏ผŒๅผ€ๅ‘ไฝ“้ชŒไผ˜ๅผ‚ | | **็Šถๆ€็ฎก็†** | Pinia | 2+ | Vue 3 ๅฎ˜ๆ–นๆŽจ่๏ผŒTypeScript ๆ”ฏๆŒๅฎŒๅ–„ | | **่ทฏ็”ฑ** | Vue Router | 4+ | SPA ่ทฏ็”ฑ๏ผŒๆ”ฏๆŒๅฏผ่ˆชๅฎˆๅซ | | **HTTP ๅฎขๆˆท็ซฏ** | Axios | 1+ | ่ฏทๆฑ‚/ๅ“ๅบ”ๆ‹ฆๆˆช๏ผŒ็ปŸไธ€้”™่ฏฏๅค„็† | | **ๅŽ็ซฏๆก†ๆžถ** | FastAPI | 0.110+ | ้ซ˜ๆ€ง่ƒฝๅผ‚ๆญฅๆก†ๆžถ๏ผŒ่‡ชๅŠจ็”Ÿๆˆ OpenAPI ๆ–‡ๆกฃ | | **ORM** | SQLAlchemy | 2.0+ | ๆˆ็†Ÿ็š„ Python ORM๏ผŒๅผ‚ๆญฅๆ”ฏๆŒ | | **ๆ•ฐๆฎ้ชŒ่ฏ** | Pydantic | 2+ | ็ฑปๅž‹ๅฎ‰ๅ…จ๏ผŒไธŽ FastAPI ๆทฑๅบฆ้›†ๆˆ | | **ๆ•ฐๆฎๅบ“่ฟ็งป** | Alembic | 1.13+ | ็‰ˆๆœฌๅŒ–็ฎก็†ๆ•ฐๆฎๅบ“ๅ˜ๆ›ด | | **ๆ•ฐๆฎๅบ“** | MySQL (่…พ่ฎฏไบ‘) | 8.0+ | ็จณๅฎšๅฏ้ ็š„ๅ…ณ็ณปๅž‹ๆ•ฐๆฎๅบ“ | | **็ผ“ๅญ˜** | Redis | 7+ | ้ซ˜ๆ€ง่ƒฝ็ผ“ๅญ˜ + ๆถˆๆฏ้˜Ÿๅˆ— | | **ไปปๅŠก้˜Ÿๅˆ—** | Celery | 5.3+ | ๅˆ†ๅธƒๅผๅผ‚ๆญฅไปปๅŠกๅค„็† | | **่ฎค่ฏ** | JWT | โ€” | ๆ— ็Šถๆ€่ฎค่ฏ๏ผŒๆ”ฏๆŒ Token ๅˆทๆ–ฐ | | **ๅฎนๅ™จๅŒ–** | Docker + Docker Compose | ๆœ€ๆ–ฐ | ็ฎ€ๅŒ–้ƒจ็ฝฒ๏ผŒ็Žฏๅขƒไธ€่‡ด | --- ## ไธ‰ใ€ๆžถๆž„ๅˆ†ๅฑ‚ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๅฎขๆˆท็ซฏๅฑ‚ (Client Layer) โ”‚ โ”‚ ๆต่งˆๅ™จ (Chrome/Edge) โ”‚ ็งปๅŠจ็ซฏ โ”‚ ็ฌฌไธ‰ๆ–น API ่ฐƒ็”จ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ HTTPS โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๆŽฅๅ…ฅๅฑ‚ (Gateway Layer) โ”‚ โ”‚ Nginx ๅๅ‘ไปฃ็† โ”‚ SSL ็ปˆๆญข โ”‚ ้™ๆ€่ต„ๆบๆœๅŠก โ”‚ ็ซฏๅฃ 8038/8037 โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๅ‰็ซฏๅบ”็”จๅฑ‚ (Frontend Layer) โ”‚ โ”‚ Vue 3 SPA โ”‚ Pinia Store โ”‚ Vue Router โ”‚ Axios Client โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Views โ”‚ โ”‚Componentsโ”‚ โ”‚ Stores โ”‚ โ”‚ Utils โ”‚ โ”‚ โ”‚ โ”‚ ้กต้ข็ป„ไปถ โ”‚ โ”‚ ๅ…ฌๅ…ฑ็ป„ไปถ โ”‚ โ”‚ ็Šถๆ€็ฎก็† โ”‚ โ”‚ ๅทฅๅ…ท/่ฏทๆฑ‚ๅฐ่ฃ…โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ HTTP/JSON โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๅŽ็ซฏๆœๅŠกๅฑ‚ (Backend Layer) โ”‚ โ”‚ FastAPI โ”‚ ไธญ้—ดไปถ โ”‚ ่ทฏ็”ฑ โ”‚ ไพ่ต–ๆณจๅ…ฅ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ API ่ทฏ็”ฑๅฑ‚ โ”‚ โ”‚ ่ฎค่ฏ/ๆŽˆๆƒไธญ้—ดไปถ โ”‚ โ”‚ โ”‚ โ”‚ (api/v1/*) โ”‚ โ”‚ (JWTใ€CORS) โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ โ”‚ Service ๅฑ‚ โ”‚ โ”‚ ไปปๅŠก่ฐƒๅบฆ โ”‚ โ”‚ โ”‚ โ”‚ (ไธšๅŠก้€ป่พ‘) โ”‚ โ”‚ (Celery ไปปๅŠก) โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ โ”‚ Models ๅฑ‚ โ”‚ โ”‚ Schemas ๅฑ‚ โ”‚ โ”‚ โ”‚ โ”‚ (ORM ๅฎšไน‰) โ”‚ โ”‚ (ๆ•ฐๆฎ้ชŒ่ฏ) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ–ผ โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ MySQL 8.0 โ”‚ โ”‚ Redis 7 โ”‚ โ”‚ (่…พ่ฎฏไบ‘) โ”‚ โ”‚ ็ผ“ๅญ˜ / ไปปๅŠก้˜Ÿๅˆ— โ”‚ โ”‚ ๆŒไน…ๅŒ–ๅญ˜ๅ‚จ โ”‚ โ”‚ ไผš่ฏ / ้” โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Celery Worker โ”‚ โ”‚ ๅผ‚ๆญฅไปปๅŠกๅค„็† โ”‚ โ”‚ ๆ–‡ไปถๅค„็† / ้€š็Ÿฅ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` --- ## ๅ››ใ€ๆ ธๅฟƒไธšๅŠกๆจกๅ— ### 1. ็”จๆˆทๆจกๅ— - **ๆณจๅ†Œ/็™ปๅฝ•**๏ผš้‚ฎ็ฎฑ + ๅฏ†็ ๏ผŒJWT Token ๅ‘ๆ”พ - **Token ๅˆทๆ–ฐ**๏ผšAccess Token (็ŸญๆœŸ) + Refresh Token (้•ฟๆœŸ) - **ไธชไบบไธญๅฟƒ**๏ผšไฟกๆฏๆŸฅ็œ‹ไธŽไฟฎๆ”น ### 2. ๆ™บ่ƒฝไฝ“ๆจกๅ— - ๆ™บ่ƒฝไฝ“็š„ๅˆ›ๅปบใ€้…็ฝฎใ€ๅ‘ๅธƒใ€ไธ‹ๆžถ - ๆ”ฏๆŒ้…็ฝฎ LLM ๅ‚ๆ•ฐใ€ๆ็คบ่ฏใ€ๅทฅๅ…ท่ฐƒ็”จ - ็Ÿฅ่ฏ†ๅบ“ๅ…ณ่” ### 3. ็Ÿฅ่ฏ†ๅบ“ๆจกๅ— - ๆ–‡ๆกฃไธŠไผ ไธŽ่งฃๆž๏ผˆPDFใ€TXTใ€Markdown๏ผ‰ - ๅ‘้‡ๅŒ–ๅญ˜ๅ‚จ๏ผˆๅฏนๆŽฅๅตŒๅ…ฅๆจกๅž‹๏ผ‰ - ่ฏญไน‰ๆฃ€็ดข ### 4. ๅฏน่ฏๆจกๅ— - ็”จๆˆทไธŽๆ™บ่ƒฝไฝ“็š„ๅฎžๆ—ถๅฏน่ฏ - ไธŠไธ‹ๆ–‡็ฎก็† - ๆตๅผ่พ“ๅ‡บ๏ผˆSSE๏ผ‰ --- ## ไบ”ใ€ๆ•ฐๆฎๆต็คบไพ‹๏ผˆๅฏน่ฏ่ฏทๆฑ‚๏ผ‰ ``` 1. ็”จๆˆท่พ“ๅ…ฅๆถˆๆฏ โ”‚ 2. Axios POST /api/v1/conversations/{id}/messages โ”‚ 3. Nginx ไปฃ็†ๅˆฐๅŽ็ซฏ 8037 โ”‚ 4. FastAPI ๆŽฅๆ”ถ่ฏทๆฑ‚ โ”œโ”€โ”€ JWT ไธญ้—ดไปถ้ชŒ่ฏ Token โ”œโ”€โ”€ ่ทฏ็”ฑๅˆ†ๅ‘ๅˆฐๅฏนๅบ” Handler โ”œโ”€โ”€ Service ๅฑ‚ๅค„็†ไธšๅŠก้€ป่พ‘ โ”‚ โ”œโ”€โ”€ ๆŸฅ่ฏขๅฏน่ฏๅކๅฒ (MySQL) โ”‚ โ”œโ”€โ”€ ๆฃ€็ดข็›ธๅ…ณ็Ÿฅ่ฏ† (็Ÿฅ่ฏ†ๅบ“) โ”‚ โ””โ”€โ”€ ่ฐƒ็”จ LLM API (ๅผ‚ๆญฅ) โ”‚ 5. Celery ๅผ‚ๆญฅๆ‰ง่กŒ LLM ่ฐƒ็”จ โ”œโ”€โ”€ ่ฟ›ๅบฆ้€š่ฟ‡ Redis Pub/Sub ๆŽจ้€ โ””โ”€โ”€ SSE ๆŽจ้€็ป™ๅ‰็ซฏ โ”‚ 6. ๅ‰็ซฏๆตๅผๆธฒๆŸ“ๅ“ๅบ”ๅ†…ๅฎน ``` --- ## ๅ…ญใ€ๅฎ‰ๅ…จ่ฎพ่ฎก | ๅฎ‰ๅ…จๆŽชๆ–ฝ | ่ฏดๆ˜Ž | |:---------|:-----| | JWT ่ฎค่ฏ | Access Token ๆœ‰ๆ•ˆๆœŸ็Ÿญ๏ผŒRefresh Token ่ฝฎๆข | | ๅฏ†็ ๅŠ ๅฏ† | bcrypt ๅ“ˆๅธŒๅญ˜ๅ‚จ | | CORS ้…็ฝฎ | ไป…ๅ…่ฎธๆŒ‡ๅฎšๅŸŸๅ่ทจๅŸŸ่ฎฟ้—ฎ | | ่พ“ๅ…ฅ้ชŒ่ฏ | Pydantic ไธฅๆ ผๆ ก้ชŒๆ‰€ๆœ‰่พ“ๅ…ฅ | | SQL ๆณจๅ…ฅ้˜ฒๆŠค | SQLAlchemy ORM ๅ‚ๆ•ฐๅŒ–ๆŸฅ่ฏข | | HTTPS | Nginx ไพง็ปˆๆญข SSL๏ผˆ็”Ÿไบง็Žฏๅขƒ๏ผ‰ | --- ## ไธƒใ€ๆ‰ฉๅฑ•ๆ€ง & ๅฏ็ปดๆŠคๆ€ง - **ๆฐดๅนณๆ‰ฉๅฑ•**๏ผšFastAPI ไธบๆ— ็Šถๆ€ๅบ”็”จ๏ผŒๅฏๅคšๅฎžไพ‹้ƒจ็ฝฒ + Nginx ่ดŸ่ฝฝๅ‡่กก - **ๅผ‚ๆญฅไปปๅŠก**๏ผšCelery Worker ๅฏ็‹ฌ็ซ‹ๆ‰ฉๅฑ•๏ผŒๅค„็†ๅคง้‡ๅผ‚ๆญฅไปปๅŠก - **ๆจกๅ—ๅŒ–**๏ผšๅŽ็ซฏๆŒ‰ไธšๅŠกๆ‹†ๅˆ†ไธบ `modules/`๏ผŒๆ–ฐๅขžๅŠŸ่ƒฝไธๅฝฑๅ“็Žฐๆœ‰ๆจกๅ— - **ๆ•ฐๆฎๅบ“่ฟ็งป**๏ผšAlembic ็ฎก็† Schema ๅ˜ๆ›ด๏ผŒๆ”ฏๆŒๅ›žๆปš - **ๅ‰็ซฏ็ป„ไปถๅŒ–**๏ผšVue ็ป„ไปถๆŒ‰ๅŠŸ่ƒฝๆ‹†่งฃ๏ผŒๆๅ‡ๅค็”จๆ€ง --- > ๐Ÿ“Ž **็›ธๅ…ณๆ–‡ๆกฃ**๏ผš[้กน็›ฎ็ป“ๆž„ๆฆ‚่งˆ](./project-structure.md) | [ๅผ€ๅ‘ๆŒ‡ๅ—](./development-guide.md)