№ 80
AI Visual QC System by Amphetamin (G10-T019)
Phiên bản: v1.0 Production-Ready
Trạng thái: Đã triển khai & Vận hành (Active)
Cập nhật: 2026-08-31
Phạm vi ứng dụng: Dây chuyền lắp ráp & Kiểm định chất lượng ngoại quan xe (Automotive Final Inspection Line)
Trong ngành sản xuất và lắp ráp ô tô hiện đại, kiểm tra chất lượng ngoại quan (Surface Visual Quality Control) là công đoạn then chốt trước khi xuất xưởng. Việc kiểm tra thủ công bằng mắt thường của công nhân QC truyền thống gặp nhiều thách thức:
AmperQC được xây dựng nhằm giải quyết triệt để bài toán này bằng cách kết hợp sức mạnh của Computer Vision chuyên dụng (D-FINE ONNX), Hệ thống truy xuất quy chuẩn kỹ thuật (RAG trên ChromaDB) và Mô hình ngôn ngữ lớn (LLM) để tạo ra một quy trình kiểm định tự động, minh bạch, chính xác và có khả năng tương tác kiểm soát của con người (Human-In-The-Loop).
┌──────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐
│ Computer Vision │ ───▶ │ RAG Engine │ ───▶ │ LLM Synthesis │
│ (D-FINE ONNX) │ │ (Domain Stds) │ │ (Report/Reason) │
└──────────────────────┘ └──────────────────────┘ └──────────────────────┘
│ │ │
▼ ▼ ▼
Phát hiện vị trí Truy xuất tiêu chuẩn Sinh giải thích chuẩn
& diện tích lỗi ASTM / ISO liên quan nghiệp vụ bằng tiếng Việt
area_ratio), trích dẫn trực tiếp từ các tiêu chuẩn công nghiệp (ASTM D7027, ISO 19252, ISO 2859-1).| Phân tầng | Công nghệ | Phiên bản / Chi tiết | Vai trò trong hệ thống |
|---|---|---|---|
| Frontend | Next.js (App Router) + React | Next.js 14+, TypeScript, Tailwind CSS | Giao diện tương tác chuyên biệt cho Operator và Manager, hỗ trợ vẽ Annotation Canvas, Responsive Mobile/Tablet |
| Backend Gateway | FastAPI | Python 3.11, Pydantic v2, SQLAlchemy 2.0 | Xử lý Authentication (JWT), Quản lý Lô/Xe/Ảnh, Điều phối dịch vụ, Session & Cleanup Scheduler, Audit Log |
| AI Orchestration | LangGraph | StateGraph Pipeline | Quản lý vòng đời xử lý trạng thái kiểm định 4 giai đoạn (DETECT → CLASSIFY → DECIDE → REPORT) tại qc-agent/ |
| Computer Vision | ONNX Runtime | D-FINE Detector (best_stg2.onnx) | Mô hình Deep Learning tối ưu hóa suy luận thời gian thực cho 3 lớp lỗi ngoại quan (Scratch, Dent, Crack) |
| Vector Store & RAG | ChromaDB + Sentence Transformers | all-MiniLM-L6-v2 (384 dims) | Lưu trữ và tìm kiếm vector tương đồng cho từ điển khuyết tật và quy tắc suy luận theo tiêu chuẩn |
| LLM Explanation | OpenAI API | GPT-4o / GPT-4o-mini | Tổng hợp dữ liệu CV + tài liệu RAG thành bản giải thích chuyên môn tiếng Việt, phân tích nguyên nhân và khuyến nghị xử lý |
| Cơ sở dữ liệu | SQLite (Dev) / PostgreSQL (Prod) | SQLAlchemy ORM, Alembic Migrations | Lưu trữ cấu trúc Lô hàng, Thông tin xe, Khuyết tật, Quyết định, Tài khoản và Nhật ký kiểm toán |
| DevOps & Container | Docker + Docker Compose + Railway | Multi-stage build, Unified Container | Đóng gói toàn bộ Frontend, Backend Gateway và QC Agent vào 1 image duy nhất chạy độc lập trên Cloud |
Hệ thống được thiết kế theo kiến trúc vi dịch vụ tách rời (Decoupled Services), đảm bảo tính module hóa cao, dễ mở rộng quy mô và cho phép phát triển độc lập giữa Giao diện, Cổng API nghiệp vụ và Pipeline AI:
graph TB
subgraph ClientLayer["1. Phân tầng Trình duyệt & Hiện trường (Port 3000)"]
OP_UI["Operator Workbench<br/>(Upload, Annotation Canvas, Review)"]
MGR_UI["Manager Dashboard<br/>(KPI, Defect Analytics, Audit Logs)"]
MOB_UI["Mobile/Tablet View<br/>(Kiểm tra tại xưởng)"]
end
subgraph GatewayLayer["2. Cổng Nghiệp vụ Backend Gateway (FastAPI - Port 8000)"]
AUTH_SVC["Auth Service<br/>(JWT OAuth2)"]
LOT_SVC["Lot & Unit Service<br/>(Quản lý Lô & Mã Xe)"]
INSP_SVC["Inspection Service<br/>(Lưu trữ & Phân phối ảnh)"]
DASH_SVC["Dashboard & Analytics<br/>(Tổng hợp dữ liệu)"]
AUDIT_SVC["Audit Log Engine<br/>(Ghi vết hoạt động)"]
CLEANUP_SVC["Session Cleanup<br/>(Scheduler dọn file tạm)"]
QC_CLIENT["QC Agent HTTP Client<br/>(Giao tiếp AI nội bộ)"]
end
subgraph AgentLayer["3. Dịch vụ Trí tuệ Nhân tạo QC Agent (FastAPI + LangGraph - Port 8888)"]
GRAPH["LangGraph StateGraph Engine"]
ONNX_MOD["ONNX Runtime<br/>(D-FINE Detector)"]
RAG_MOD["ChromaDB Engine<br/>(Taxonomy & Reasoning)"]
LLM_MOD["LLM Synthesis Service<br/>(OpenAI GPT-4o)"]
end
subgraph StorageLayer["4. Phân tầng Dữ liệu & Lưu trữ (Data Persistence)"]
REL_DB[("Relational Database<br/>SQLite / PostgreSQL")]
VEC_DB[("Vector Database<br/>ChromaDB Persistent")]
FILE_STORE["File Storage System<br/>(Original & Annotated Images)"]
end
%% Client to Gateway
OP_UI -->|"REST API / JWT"| GatewayLayer
MGR_UI -->|"REST API / JWT"| GatewayLayer
MOB_UI -->|"REST API / JWT"| GatewayLayer
%% Gateway internal & DB
AUTH_SVC --> REL_DB
LOT_SVC --> REL_DB
INSP_SVC --> REL_DB
INSP_SVC --> FILE_STORE
DASH_SVC --> REL_DB
AUDIT_SVC --> REL_DB
CLEANUP_SVC --> FILE_STORE
CLEANUP_SVC --> REL_DB
%% Gateway to QC Agent
GatewayLayer -->|"HTTP POST /inspect (Port 8888)"| QC_CLIENT
QC_CLIENT --> GRAPH
%% QC Agent internal
GRAPH --> ONNX_MOD
GRAPH --> RAG_MOD
GRAPH --> LLM_MOD
RAG_MOD --> VEC_DB
Để phù hợp với quy trình sản xuất ô tô thực tế, AmperQC quản lý dữ liệu theo mô hình phân cấp 4 tầng chặt chẽ:
classDiagram
class LOT {
+int id
+string lot_code
+string product_type
+string line_id
+string shift
+int total_units
+string status
+timestamp created_at
}
class UNIT {
+int id
+int lot_id
+string unit_code
+string vehicle_id (VIN)
+int expected_images
+int uploaded_images
+string final_decision
+string status
}
class INSPECTION {
+int id
+int unit_id
+string inspection_code
+string viewpoint (Front, Rear, Left, Right, Roof, Hood)
+string camera_id
+string image_path
+string annotated_image_path
+string status
+int processing_time_ms
}
class DEFECT {
+int id
+int inspection_id
+string defect_code
+string defect_type (Scratch, Dent, Crack)
+float confidence
+string severity (Minor, Moderate, Critical)
+float area_ratio
+json bbox [x, y, w, h]
}
class INSPECTION_DECISION {
+int id
+int inspection_id
+string ai_decision (PASS, FAIL, HITL)
+float ai_confidence
+string final_decision
+string review_status
+int reviewed_by
+text review_comment
}
class LLM_EXPLANATION {
+int id
+int inspection_id
+text summary
+text root_cause_reason
+text recommendation
}
LOT "1" *-- "n" UNIT : Chứa các xe trong lô
UNIT "1" *-- "n" INSPECTION : Chứa các góc chụp của xe
INSPECTION "1" *-- "n" DEFECT : Phát hiện các lỗi
INSPECTION "1" -- "1" INSPECTION_DECISION : Ra quyết định đánh giá
INSPECTION "1" -- "1" LLM_EXPLANATION : Giải thích chuyên môn
FRONT, REAR, LEFT_SIDE, RIGHT_SIDE, ROOF, HOOD). Đây là đơn vị đầu vào trực tiếp của AI Pipeline.sequenceDiagram
autonumber
actor OP as QC Operator
participant FE as Next.js Frontend
participant BE as FastAPI Gateway (Port 8000)
participant AG as QC Agent Service (Port 8888)
participant ONNX as D-FINE Model
participant RAG as ChromaDB Vector Store
participant LLM as OpenAI GPT-4o
OP->>FE: Tạo Lô kiểm tra mới (Mã SP, Dây chuyền, Ca kíp)
FE->>BE: POST /api/lots (Khởi tạo Lot + N Units)
BE-->>FE: Trả về cấu trúc Lot & danh sách Unit
OP->>FE: Kéo thả tải ảnh cho từng Unit (Tự động upload)
FE->>BE: POST /api/lots/{id}/upload (Lưu ảnh vào storage)
BE-->>FE: Xác nhận tải ảnh thành công
Note over OP, FE: Khi tất cả Units đã nhận đủ ảnh theo yêu cầu
OP->>FE: Nhấn "Phân tích AI" (Analyze Lot)
FE->>BE: POST /api/lots/{id}/analyze
loop Duyệt từng Inspection (từng ảnh)
BE->>AG: POST /inspect (image_path, metadata qua Port 8888)
AG->>ONNX: Chạy suy luận Object Detection
ONNX-->>AG: Danh sách Bounding Boxes, Classes & Confidence
AG->>RAG: Truy xuất quy chuẩn Defect Taxonomy & Reasoning
RAG-->>AG: Trả về ngữ cảnh tiêu chuẩn (ASTM, ISO)
AG->>LLM: Gửi kết quả CV + Ngữ cảnh RAG để phân tích
LLM-->>AG: Trả về Báo cáo tiếng Việt (Tóm tắt, Lý do, Hướng xử lý)
AG-->>BE: Trả về Decision (PASS/FAIL/HITL) + Defects + LLM Explanation
BE->>BE: Lưu kết quả vào DB & cập nhật trạng thái Unit
end
BE-->>FE: Hoàn tất phân tích toàn bộ Lô hàng
FE->>OP: Hiển thị Bounding Box trên Canvas + Bảng lỗi + Khuyến nghị
alt Trường hợp có ảnh nghi vấn (HITL)
FE->>FE: Khóa nút duyệt (LOCKED)
OP->>FE: Kiểm tra thực tế, vẽ khoanh vùng xác nhận / nhập ghi chú
FE->>FE: Mở khóa nút duyệt (UNLOCKED)
OP->>FE: Xác nhận quyết định cuối cùng (PASS / FAIL)
FE->>BE: POST /api/inspections/{id}/review
end
OP->>FE: Hoàn tất kiểm tra & Submit Lô hàng
FE->>BE: Cập nhật trạng thái Lô thành COMPLETED
Trung tâm xử lý AI của AmperQC là một đồ thị trạng thái (LangGraph StateGraph) khép kín, hoạt động độc lập và bất đồng bộ bên trong package qc-agent/qc_agent/:
graph LR
START((START)) --> DETECT["1. DETECT Node<br/>(ONNX Runtime D-FINE)"]
DETECT --> DEF_CHECK{Có lỗi<br/>không?}
DEF_CHECK -->|Không có lỗi| PASS_FAST["Gán kết quả PASS<br/>(Bỏ qua RAG/LLM)"]
PASS_FAST --> REPORT["4. REPORT Node<br/>(Đóng gói kết quả)"]
DEF_CHECK -->|Phát hiện lỗi| CLASSIFY["2. CLASSIFY Node<br/>(Tính area_ratio & RAG Taxonomy)"]
CLASSIFY --> DECIDE["3. DECIDE Node<br/>(Luật mức độ & RAG Reasoning)"]
DECIDE --> REPORT
REPORT --> END((END))
qc-agent/qc_agent/nodes/)┌──────────────────────────────────────────────────────────────────────────────┐
│ LangGraph AgentState (qc_agent/state.py) │
├──────────────────────────────────────────────────────────────────────────────┤
│ • image_path: str • raw_detections: List[Detection] │
│ • defects: List[DefectInfo] • rag_taxonomy_docs: List[Document] │
│ • rag_reasoning_docs: List[Document] • decision: PASS | FAIL | HITL │
│ • needs_human_review: bool • llm_explanation: Dict[str, str] │
└──────────────────────────────────────────────────────────────────────────────┘
📌 Lưu ý cấu trúc: Toàn bộ 4 Node hoạt động thực tế nằm tại
qc-agent/qc_agent/nodes/, hoàn toàn độc lập với phần templatesrc/agents/.
DETECT (qc-agent/qc_agent/nodes/detect.py)ONNX Runtime (best_stg2.onnx).640x640 px (chuẩn hóa float32).scratch (Vết xước bề mặt)dent (Vết móp/lõm kim loại)crack (Vết nứt kết cấu)[x_min, y_min, x_max, y_max], confidence score và label tương ứng.CLASSIFY (qc-agent/qc_agent/nodes/classify.py)area_ratio = bbox_area / image_area) và phân cấp mức độ nghiêm trọng (Severity).area_ratio > 5%: Mức độ Critical (Biến dạng lớn, nguy cơ ảnh hưởng khung gầm).area_ratio ≤ 5%: Mức độ Moderate (Lõm bề mặt, có thể hút/nắn lại).area_ratio > 2%: Mức độ Moderate (Xước sâu qua lớp sơn lót).area_ratio ≤ 2%: Mức độ Minor (Xước dăm ngoài lớp sơn bóng).defect_taxonomy trong ChromaDB để đính kèm tài liệu giải nghĩa lỗi.DECIDE (qc-agent/qc_agent/nodes/decide.py)needs_human_review = True).defect_identification_reasoning để lấy căn cứ quy chuẩn cho quyết định.REPORT (qc-agent/qc_agent/nodes/report.py)qc-agent/db/defect_cases.db).[!IMPORTANT] Lưu ý về phạm vi của LLM trong AmperQC:
LLM KHÔNG tham gia vào việc phát hiện tọa độ ảnh (được xử lý 100% bởi mô hình CV) và KHÔNG làm nhiệm vụ trò chuyện tán gẫu tự do với người dùng. LLM được sử dụng như một Engine Chuyên gia Phân tích Kỹ thuật (Technical Expert Engine) nhằm:
- Đọc hiểu kết quả từ CV Node và ngữ cảnh tiêu chuẩn từ RAG Node.
- Chuyển đổi dữ liệu thô (tọa độ, diện tích, mã lỗi) thành báo cáo nghiệp vụ có cấu trúc rõ ràng bằng tiếng Việt.
- Cung cấp 3 trường thông tin cốt lõi cho công nhân QC:
- Tóm tắt hiện trạng (Summary): Mô tả ngắn gọn số lượng, vị trí và loại lỗi phát hiện.
- Phân tích nguyên nhân & Tiêu chuẩn (Reason): Viện dẫn điều khoản tiêu chuẩn (ASTM/ISO) và giải thích tại sao lỗi vi phạm.
- Hướng dẫn xử lý (Recommendation): Đề xuất hành động khắc phục cụ thể tại xưởng (ví dụ: chuyển trạm đánh bóng, tháo panel nắn hút, hoặc chuyển trạm hàn/kiểm định khung).
AmperQC sử dụng ChromaDB dạng lưu trữ bền vững (Persistent Storage) với mô hình nhúng sentence-transformers/all-MiniLM-L6-v2 (384 chiều). Cơ sở tri thức được phân chia thành 2 collection độc lập:
qc-agent/data/chroma/
├── defect_taxonomy/ (Tra cứu tại CLASSIFY Node)
│ └── Nguồn: defect_taxonomy.md
│ ├── Định nghĩa chi tiết hình thái khuyết tật (Song ngữ EN - VI)
│ └── Ngưỡng diện tích và tiêu chí phân cấp Minor / Moderate / Critical
│
└── defect_identification_reasoning/ (Tra cứu tại DECIDE Node)
└── Nguồn: defect_identification_reasoning.md
├── Nguyên tắc cân bằng nhịp dây chuyền sản xuất
└── Hướng dẫn ra quyết định PASS / FAIL / HITL theo tiêu chuẩn
Mọi quy tắc đánh giá trong AmperQC được chuẩn hóa dựa trên các tiêu chuẩn công nghiệp được thừa nhận rộng rãi:
| Tiêu chuẩn | Phạm vi áp dụng | Nội dung quy chuẩn trong AmperQC |
|---|---|---|
| ASTM D7027 / ISO 19252 | Kiểm định độ cào xước lớp sơn phủ ngoại quan xe | Định nghĩa mức độ xước bề mặt dựa trên độ sâu và khả năng lộ lớp sơn lót / lớp kim loại nền |
| US Patent 7762005 | Đo độ biến dạng & độ sâu vết lõm thân xe | Ngưỡng biến dạng bề mặt > 0.07mm và tỷ lệ diện tích lõm ảnh hưởng đến kết cấu |
| ISO 2859-1 (AQL Sampling) | Quy trình lấy mẫu & chấp nhận chất lượng lô | Quy tắc chấp nhận/từ chối theo giới hạn chất lượng chấp nhận được (Acceptable Quality Limit) |
Trên giao diện người dùng, hệ thống tích hợp sẵn component RAG Document Corpus Viewer cho phép kiểm định viên:
Để đảm bảo chất lượng xuất xưởng của toàn bộ phương tiện, AmperQC áp dụng cơ chế đánh giá lũy tiến từ cấp độ ảnh lên cấp độ xe và lô hàng:
1. CẤP ĐỘ ẢNH (Image-level - Do QC Agent xác định):
├── Có lỗi Critical (Crack, Dent >5%, Scratch >5%) ────▶ HITL (Cần người duyệt)
├── Có lỗi Moderate (Dent 2-5%, Scratch 2-5%) ────▶ FAIL (Không đạt)
└── Không có lỗi hoặc chỉ có Minor (<2%) ────▶ PASS (Đạt)
2. CẤP ĐỘ XE (Unit-level - Tổng hợp từ tất cả ảnh của xe):
├── Có ít nhất 1 ảnh FAIL ────▶ Toàn bộ Xe FAIL
├── Có ít nhất 1 ảnh HITL (và không có ảnh FAIL) ────▶ Toàn bộ Xe HITL (Chờ duyệt)
└── Tất cả ảnh đều PASS ────▶ Toàn bộ Xe PASS
3. CẤP ĐỘ LÔ HÀNG (Lot-level - Tổng hợp toàn bộ xe trong lô):
└── Lô hàng chỉ được phép hoàn thành (COMPLETED) khi 100% các Unit đã có quyết định cuối cùng.
Nhằm triệt tiêu tình trạng công nhân bấm duyệt nhanh (rubber-stamping) mà không kiểm tra thực tế, AmperQC triển khai cơ chế khóa an toàn độc quyền trên giao diện:
Trạng thái: Unit ở mức độ HITL
│
▼
┌─────────────────────────────────────────┐
│ Nút [PASS] & [FAIL] bị KHÓA │
│ (DISABLED / LOCKED) │
└─────────────────────────────────────────┘
│
┌─────────────────────┴─────────────────────┐
│ │
▼ ▼
┌─────────────────────────────┐ ┌─────────────────────────────────────┐
│ Thao tác 1: │ │ Thao tác 2: │
│ Vẽ khoanh vùng │ HOẶC │ Nhập ghi chú kiểm tra│
│ trên Canvas ảnh │ │ xác minh thực tế │
└─────────────────────────────┘ └─────────────────────────────────────┘
│ │
└─────────────────────┬─────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Nút [PASS] & [FAIL] MỞ KHÓA │
│ (UNLOCKED) │
└─────────────────────────────────────────┘
│
▼
Kiểm định viên chọn quyết định
& Lưu vết vào Audit Log
Hệ thống thiết lập 2 vai trò người dùng rõ ràng nhằm đảm bảo an toàn thông tin và phân định trách nhiệm:
| Chức năng & Quyền hạn | QC Operator (Kiểm định viên) | QC Manager (Quản lý chất lượng) |
|---|---|---|
| Đăng nhập hệ thống qua JWT Token | ✅ | ✅ |
Khởi tạo Lô kiểm tra mới (POST /api/lots) | ✅ | ✅ |
Tải ảnh kiểm tra lên hệ thống (POST /api/lots/{id}/upload) | ✅ | ✅ |
Chạy phân tích AI tự động (POST /api/lots/{id}/analyze) | ✅ | ✅ |
| Thao tác trên Canvas (Ẩn/Hiện Mask, Vẽ vùng lỗi mới) | ✅ | ✅ |
Nhập ghi chú & Duyệt các ca HITL (POST /api/inspections/{id}/review) | ✅ | ✅ |
| Xem lịch sử kiểm tra của bản thân | ✅ | ✅ |
| Xem Dashboard phân tích thống kê toàn nhà máy | ❌ | ✅ |
| Xem biểu đồ phân bố lỗi theo ca kíp, dây chuyền | ❌ | ✅ |
| Tra cứu và xuất báo cáo toàn bộ lịch sử Lô/Xe | ❌ | ✅ |
| Truy cập Nhật ký Kiểm toán hệ thống (Audit Logs) | ❌ | ✅ |
| Quản lý tài khoản người dùng (Tạo mới, Đổi quyền) | ❌ | ✅ |
Kích hoạt dọn dẹp bộ nhớ tạm thủ công (POST /api/cleanup/run) | ❌ | ✅ |
HS256.bcrypt.ACCESS_TOKEN_EXPIRE_MINUTES)./api/storage/{path}.Bảng AUDIT_LOGS ghi lại chi tiết toàn bộ các sự kiện quan trọng trong hệ thống:
┌────────────┬──────────────────┬────────────┬─────────────────┬────────────────────────────┐
│ Event ID │ Hành động │ Đối tượng │ Người thực hiện│ Dữ liệu thay đổi │
├────────────┼──────────────────┼────────────┼─────────────────┼────────────────────────────┤
│ #LOG-1082 │ CREATE_LOT │ Lot #104 │ operator_01 │ {total_units: 5} │
│ #LOG-1083 │ AI_INSPECT_RUN │ Unit #VF69_01│ system_ai │ {decision: "HITL"} │
│ #LOG-1084 │ HITL_OVERRIDE │ Insp #290 │ operator_01 │ {old: HITL, new: PASS, │
│ │ │ │ │ note: "Xước bóng"} │
└────────────┴──────────────────┴────────────┴─────────────────┴────────────────────────────┘
storage/temp/.src/core/cleanup.py), tự động quét và xóa các tệp tin tạm có tuổi thọ vượt quá 2 giờ (SESSION_EXPIRY_HOURS), giải phóng dung lượng đĩa cứng cho máy chủ.Được thiết kế tối ưu cho thao tác nhanh với chuột và màn hình cảm ứng:
Cung cấp bức tranh tổng thể về hiệu suất chất lượng cho Giám đốc Nhà máy và Trưởng ca QC:
Để tối ưu hóa việc triển khai và giảm thiểu chi phí máy chủ, toàn bộ hệ thống được đóng gói trong một Docker Container hợp nhất (Dockerfile.unified):
┌──────────────────────────────────────────────────────────────────────────────┐
│ Unified Docker Container (Railway / Docker Hub) │
│ │
│ ┌──────────────────────┐ ┌──────────────────────┐ │
│ │ Next.js Frontend │ ───(HTTP)──▶ │ FastAPI Gateway BE │ │
│ │ Port 3000 │ │ Port 8000 │ │
│ └──────────────────────┘ └──────────┬───────────┘ │
│ │ │
│ (HTTP Port 8888) │
│ ▼ │
│ ┌──────────────────────┐ │
│ │ QC Agent Service │ │
│ │ Port 8888 │ │
│ └──────────┬───────────┘ │
│ │ │
│ ┌──────────┴───────────┐ │
│ ▼ ▼ │
│ [ChromaDB Local] [SQLite / DB] │
└──────────────────────────────────────────────────────────────────────────────┘
| Dịch vụ | Cổng nội bộ | Cổng Public | URL truy cập |
|---|---|---|---|
| Frontend UI | 3000 | 3000 | http://localhost:3000 |
| Backend Gateway API | 8000 | 8000 | http://localhost:8000 (Docs: /docs) |
| QC Agent Service | 8888 | Nội bộ | http://localhost:8888 (Health: /health) |
Các biến môi trường chính:
# Cấu hình AI & Model
ONNX_MODEL_PATH=./models/best_stg2.onnx
ONNX_SCORE_THRESHOLD=0.4
QC_AGENT_URL=http://localhost:8888
OPENAI_API_KEY=sk-...
# Cấu hình Cơ sở dữ liệu & RAG
DATABASE_URL=sqlite:///./data/qc_db.sqlite3
CHROMA_PERSIST_DIR=./qc-agent/data/chroma
# Cấu hình Bảo mật
SECRET_KEY=your-production-secret-key
ACCESS_TOKEN_EXPIRE_MINUTES=1440
P-019/
├── src/ # 🌍 Cổng Nghiệp vụ Backend (FastAPI Gateway - Port 8000)
│ ├── api/
│ │ ├── routes/ # API Routes: auth, lots, sessions, units, inspections, dashboard, audit, defects, config
│ │ └── deps.py # Dependency Injection (Auth, DB Session)
│ ├── core/ # Cấu hình Settings, Security, Cleanup Scheduler
│ ├── db/ # Khởi tạo Database Session & SQLAlchemy Base
│ ├── models/ # SQLAlchemy ORM Models (User, Lot, Unit, Inspection, Defect...)
│ ├── schemas/ # Pydantic Schemas xác thực dữ liệu vào/ra
│ ├── services/ # Dịch vụ nội bộ & HTTP Client (qc_agent_client.py) gọi sang QC Agent (Port 8888)
│ ├── agents/ # ⚠️ [Template Boilerplate] Code mẫu ban đầu của template khóa học (KHÔNG dùng trong pipeline)
│ └── main.py # Entrypoint FastAPI Gateway (Port 8000)
│
├── qc-agent/ # 🧠 Dịch vụ Trí tuệ Nhân tạo QC Agent (Chạy độc lập trên Port 8888)
│ ├── qc_agent/ # Package chính chứa mã nguồn thực thi của QC Agent microservice
│ │ ├── app.py # Entrypoint FastAPI Server cho QC Agent (Cổng 8888, endpoints: /health, /inspect)
│ │ ├── state.py # Schema AgentState của LangGraph
│ │ ├── config.py # Cấu hình riêng cho Agent (ONNX path, thresholds, Chroma paths)
│ │ ├── nodes/ # 🚀 Toàn bộ 4 Node của LangGraph Pipeline thực tế:
│ │ │ ├── detect.py # 1. DETECT Node: Suy luận ONNX Runtime với mô hình D-FINE
│ │ │ ├── classify.py # 2. CLASSIFY Node: Tính area_ratio, gán Severity & tra cứu RAG taxonomy
│ │ │ ├── decide.py # 3. DECIDE Node: Ma trận PASS/FAIL/HITL & tra cứu RAG reasoning
│ │ │ └── report.py # 4. REPORT Node: LLM giải thích chuyên môn tiếng Việt & ghi log SQLite
│ │ └── tools/ # Công cụ phục vụ Agent (ONNX detector wrapper, ChromaDB retrieval)
│ │ ├── detector_impl/ # ONNX Detector Wrapper (D-FINE) & Mock Fallback
│ │ ├── retrieval_classify.py # Tra cứu ChromaDB Taxonomy
│ │ └── retrieval_decide.py # Tra cứu ChromaDB Reasoning
│ ├── data/ # Tài liệu RAG Corpus: defect_taxonomy.md, defect_identification_reasoning.md
│ ├── db/ # Lưu trữ audit defect cases (defect_cases.db)
│ └── scripts/ # Scripts phân đoạn và đánh chỉ mục ChromaDB
│
├── web/ # 💻 Giao diện Người dùng (Next.js 14 App Router - Port 3000)
│ └── src/
│ ├── app/
│ │ ├── operator/ # Bàn làm việc của Kiểm định viên (Canvas, Review, Annotation)
│ │ ├── manager/ # Trung tâm Quản lý & Dashboard phân tích KPI
│ │ └── page.tsx # Màn hình Đăng nhập & Điều hướng vai trò
│ ├── components/ # UI Components tái sử dụng (Canvas, Modal, CorpusViewer...)
│ └── lib/ # API Client tương tác với Backend Gateway
│
├── models/ # 📦 Thư mục chứa trọng số mô hình Deep Learning (best_stg2.onnx)
├── docs/ # 📚 Tài liệu kỹ thuật kiến trúc, ER Diagram, Auth Guide
├── scripts/ # 🔌 Scripts khởi tạo dữ liệu mẫu, Deploy & Hook Logging
├── Dockerfile.unified # 🐳 Dockerfile đa tầng đóng gói toàn bộ hệ thống
└── docker-compose.unified.yml # 🐙 Orchestration chạy toàn bộ ứng dụng cục bộ
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
│ Phase 2 │ ───▶ │ Phase 3 │ ───▶ │ Phase 4 │
│ Camera RTSP Live│ │ Active Learning │ │ MES/ERP & Auto │
│ Stream Line │ │ Auto-Retrain │ │ Work Orders │
└─────────────────────┘ └─────────────────────┘ └─────────────────────┘
Tài liệu được biên soạn và cập nhật chuẩn xác theo kiến trúc hiện hành của hệ thống AmperQC (AI Visual Quality Inspection System).