690602:0957 ADR-033-233 #01
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
# รายงานการทบทวนโค้ด (Code Review Report)
|
||||
|
||||
**วันที่ (Date)**: 2026-06-02
|
||||
**ขอบเขตการรีวิว (Scope)**: AI Model & OCR Sandbox Management (ADR-033) & Axios Security Patches
|
||||
**ผลการประเมินภาพรวม (Overall Result)**: ✅ **APPROVE (ผ่านการอนุมัติให้ Merge เข้าสู่สายการพัฒนาหลัก)**
|
||||
|
||||
---
|
||||
|
||||
## 📊 สรุปประเด็นที่พบจากการรีวิว (Findings Summary)
|
||||
|
||||
| ระดับความรุนแรง (Severity) | จำนวนประเด็น (Count) | คำอธิบาย (Description) | สถานะ (Status) |
|
||||
| :--- | :---: | :--- | :---: |
|
||||
| 🔴 **Critical** | **0** | ปัญหาความปลอดภัยร้ายแรง หรือความเสี่ยงข้อมูลสูญหาย | ✅ CLEAN |
|
||||
| 🟠 **High** | **0** | บั๊กการทำงาน หรือข้อผิดพลาดร้ายแรงในตรรกะระบบ | ✅ CLEAN |
|
||||
| 🟡 **Medium** | **0** | กลิ่นอายโค้ด (Code Smell) หรือหนี้ทางเทคนิคที่ควรปรับปรุง | ✅ CLEAN |
|
||||
| 🟢 **Low** | **0** | ประเด็นรูปแบบโค้ด หรือจุดที่พัฒนาให้ดียิ่งขึ้นได้เล็กน้อย | ✅ CLEAN |
|
||||
| 💡 **Suggestions** | **2** | ข้อเสนอแนะเชิงสร้างสรรค์สำหรับการบำรุงรักษาระหว่างพัฒนา | ✅ **ดำเนินการแล้ว 100%** |
|
||||
|
||||
---
|
||||
|
||||
## 🔍 รายละเอียดการวิเคราะห์ตามส่วนต่างๆ (Detailed Review Breakdown)
|
||||
|
||||
### 1. ความถูกต้องเชิงตรรกะและการออกแบบ (Correctness & Design)
|
||||
* **การโหลดโมเดลแบบ Synchronous Pre-loading:**
|
||||
- เมธอด `activateAiModel()` และ `loadModel()` ใน backend ตรวจจับและยืนยันโมเดลจริงผ่าน Ollama `/api/tags` และส่งการทดสอบรันด้วย `keep_alive: -1` (Timeout 30s) ก่อนแก้ไขในฐานข้อมูล ช่วยรับประกันว่าระบบ AI จะไม่แครชค้างหลังแอดมินสลับโมเดลหลัก
|
||||
* **การแมปเอนจินของ ocr-sidecar (`specs/.../ocr-sidecar/app.py`):**
|
||||
- มีการอ่านค่าพารามิเตอร์ `engine` จาก NestJS และแมปเป็น Ollama tag `scb10x/typhoon-ocr1.5-3b` หรือ `scb10x/typhoon-ocr-3b` ได้อย่างปลอดภัยและสอดคล้องตามเกณฑ์
|
||||
- มีการแก้ไขฟิลด์ส่งกลับ `engineUsed` ให้เปลี่ยนตามโมเดลจริงที่ถูกเรียกประมวลผล แทนการใช้ค่าฮาร์ดโค้ดแบบเดิม
|
||||
|
||||
### 2. ความมั่นคงปลอดภัยและการจัดการสิทธิ์ (Security & Auth)
|
||||
* **การอัปเกรด Axios กำจัด Prototype Pollution:**
|
||||
- การอัปเกรด `axios` เป็นรุ่นล่าสุด (`1.16.x`) ทั้งในส่วนของ Backend และ Frontend ส่งผลให้ความเสี่ยงต่อการถูกแทรกแซงและโจมตีผ่าน Prototype Pollution ใน merge functions และ proxy config ได้รับการอุดโดยสมบูรณ์ (ผ่านการตรวจสอบของ `pnpm audit` ว่าไม่มีช่องโหว่ความปลอดภัยหลงเหลืออยู่)
|
||||
* **การติดตั้ง Guards ควบคุมสิทธิ์ (ADR-016):**
|
||||
- เอนด์พอยต์ใหม่ใน `ai.controller.ts` มีการติดตั้ง `JwtAuthGuard` และ `RbacGuard` เพื่อตรวจสอบการล็อกอินและความปลอดภัยตาม permission `system.manage_all` ของ Superadmin ซึ่งเป็นไปตามสถาปัตยกรรมควบคุมอย่างเข้มขวด
|
||||
|
||||
### 3. การบำรุงรักษาและมาตรฐานรหัสคอมพิวเตอร์ (Maintainability & Coding Standards)
|
||||
* **การตรวจสอบกฎโปรเจกต์ (Project Global Rules):**
|
||||
- **Change Log และ Header:** ทุกไฟล์ที่ได้รับการแก้ไขมีการระบุ `// File: path/filename` ที่บรรทัดแรก และมีการบันทึกประวัติการแก้ไขในส่วนหัว `// Change Log` อย่างเป็นระเบียบชัดเจน
|
||||
- **การละเว้นบรรทัดว่าง:** ภายในโครงสร้างเมธอดและฟังก์ชันทั้งหมดที่เพิ่มเติมไม่มีการเว้นบรรทัดว่างข้างใน สอดคล้องตามกฎ "Avoid blank lines inside functions" ของโปรเจกต์อย่างไม่มีข้อยกเว้น
|
||||
- **ข้อห้ามใช้ parseInt บน UUID (ADR-019):** ไม่พบการนำ `parseInt()` หรือการแปลงชนิดข้อมูลตัวเลขมาใช้กับ UUIDv7 ในโค้ดใหม่ คอนโทรลเลอร์ใช้การตรวจสอบผ่าน `ParseUuidPipe` และจัดเก็บเป็นสตริง UUID ธรรมดาตามระเบียบของระบบ
|
||||
- **ภาษาที่ใช้งาน:** ตัวแปรและชื่อเมธอดทั้งหมดเขียนด้วยภาษาอังกฤษอย่างถูกต้อง และมีการเขียนอธิบายคอมเมนต์และคู่มือการวิเคราะห์โค้ดอย่างเป็นระบบด้วย **ภาษาไทย** 100%
|
||||
|
||||
---
|
||||
|
||||
## 👍 สิ่งที่ดีมากในโค้ดชุดนี้ (What's Good)
|
||||
1. **คุณภาพการออกแบบการดักจับข้อผิดพลาด (Error Handling):**
|
||||
มีการแยกแยะโครงสร้าง Exception ใน `ai.controller.ts` และการตรวจสอบบริการ OCR อย่างปลอดภัย ช่วยให้ระบบไม่แครชเมื่อตัวแปรหรือ Service ขาดหาย
|
||||
2. **การทดสอบยูนิตเทสที่รัดกุม (Test Coverage & Integrity):**
|
||||
ชุดยูนิตเทสใน `ai.service.spec.ts` ออกแบบมาได้ดี ครอบคลุมเคสการโหลดแบบประสานเวลาล้มเหลว (Pre-loading fails case) ได้อย่างสมบูรณ์แบบ ส่งผลให้ชุดทดสอบรันผ่าน 100% ตลอดทั้งระบบ
|
||||
3. **ความทนทานต่อการขัดข้องทาง VRAM (Resiliency):**
|
||||
Catch block ใน `vram-monitor.service.ts` ป้องกันปัญหาระบบค้างจากการล้มเหลวของ Ollama ได้อย่างเหมาะสม ป้องกันการเกิดหนี้ทางเทคนิคและการหยุดชะงักของการแชท RAG
|
||||
|
||||
---
|
||||
|
||||
## 💡 รายละเอียดการดำเนินการตามข้อเสนอแนะ (💡 Suggestions Remediation Log)
|
||||
|
||||
### 1. การควบคุมการใช้หน่วยความจำ VRAM (VRAM Management) — ✅ **เสร็จสมบูรณ์**
|
||||
* **แนวทางดำเนินการ:**
|
||||
- เพิ่มเมธอด `unloadModel(modelName)` ใน `OllamaService` เพื่อส่งคำขอ `/api/generate` ด้วย `keep_alive: 0` สำหรับล้างโมเดลที่ไม่ได้ใช้งานออกจาก GPU Memory ของ Ollama
|
||||
- อัปเดต `activateAiModel()` ใน `AiService` ให้ดึงชื่อโมเดลเดิม และทำการ Unload ล้างโมเดลตัวเก่าออกทันทีหลังจากสลับและโหลดโมเดลตัวใหม่ขึ้น GPU สำเร็จ
|
||||
* **ผลลัพธ์:** ป้องกันโมเดลสะสมใน VRAM ช่วยคืนพื้นที่หน่วยความจำ GPU ได้อย่างมีประสิทธิภาพและผ่านยูนิตเทส 100%
|
||||
|
||||
### 2. การตรวจสอบสิทธิ์ความปลอดภัยใน Sidecar Node — ✅ **เสร็จสมบูรณ์**
|
||||
* **แนวทางดำเนินการ:**
|
||||
- กำหนดค่า `OCR_SIDECAR_API_KEY` ใน ocr-sidecar `app.py` และติดตั้งระบบตรวจสอบความปลอดภัย `APIKeyHeader` บน Request Headers (`X-API-Key`) ทุกการเรียกใช้บริการ OCR sandbox และการแปลงคำ
|
||||
- ปรับปรุงฝั่ง NestJS Backend ใน `OcrService` และ `SandboxOcrEngineService` ให้ดึง API Key จาก `ConfigService` และแนบเป็น headers ไปพร้อมคำขอ Axios ทุกครั้ง
|
||||
* **ผลลัพธ์:** ป้องกันการเรียกใช้โมเดล GPU บน Desk-5439 โดยมิได้รับอนุญาตได้อย่างสมบูรณ์แบบ
|
||||
Reference in New Issue
Block a user