№ 32
V-Valet được xây dựng như một hệ thống điều phối bãi đỗ xe thông minh, giúp tài xế tìm được vị trí phù hợp và giúp ban quản lý kiểm soát quá trình cấp chỗ một cách rõ ràng, an toàn và có thể kiểm chứng. Hệ thống không chỉ hiển thị số ô còn trống mà còn xử lý toàn bộ luồng từ tiếp nhận nhu cầu, kiểm tra điều kiện, lựa chọn vị trí, giữ chỗ đến dẫn đường và lưu lại lịch sử quyết định. Hiện tại, V-Valet đã có cơ chế giữ chỗ an toàn để hai xe không được cấp cùng một ô; xử lý việc gửi lại yêu cầu mà không tạo dữ liệu trùng; tiếp tục hoặc khôi phục quy trình khi xảy ra lỗi; lưu nhật ký ; quản lý quy định; phân quyền theo vai trò; và bảo đảm mỗi tài xế chỉ truy cập được phiên đỗ xe của mình. Tuy nhiên, để có thể vận hành trong môi trường thực tế, hệ thống vẫn cần hoàn thiện việc lưu danh tính và quyền sở hữu phiên khi chạy trên nhiều máy chủ; hỗ trợ khôi phục tài khoản; kết nối camera, barrier và cảm biến thật; lưu bền vững toàn bộ dữ liệu quan trọng; bảo vệ kênh MQTT; quản lý mật khẩu và khóa bí mật; giới hạn số lượng yêu cầu; theo dõi sức khỏe hệ thống; cảnh báo sự cố; sao lưu dữ liệu; và diễn tập quay lại phiên bản cũ khi bản triển khai mới gặp lỗi. Điểm cốt lõi là AI chỉ hỗ trợ hiểu và diễn đạt, không trực tiếp quyết định dữ liệu vận hành. Mã ô, con số và trạng thái quan trọng được đối chiếu với dữ liệu hệ thống; khi AI API không khả dụng, luồng chính vẫn chạy bằng luật và template. V-VALET đã có cơ chế chống cấp trùng, idempotency, recovery workflow, audit, policy versioning và RBAC. Trước khi triển khai thực tế, hệ thống vẫn cần authentication và session ownership đầy đủ, cảm biến thật, persistence production, bảo mật MQTT, quản lý bí mật, giám sát và các lớp hardening vận hành.
V-Valet là hệ thống hỗ trợ tài xế tìm và sử dụng chỗ đỗ phù hợp trong các bãi xe lớn hoặc có nhiều tầng. Đồng thời, hệ thống cung cấp cho ban quản lý công cụ để tạo kịch bản, quan sát tình trạng bãi, xử lý ngoại lệ và truy vết các quyết định đã xảy ra.
V-Valet không chỉ trả lời câu hỏi “còn bao nhiêu ô trống?”. Hệ thống tập trung giải quyết các câu hỏi nghiệp vụ quan trọng hơn:
Mục tiêu của V-Valet là tạo ra một quy trình điều phối rõ ràng, có thể giải thích và có thể kiểm chứng.
Trong một bãi xe lớn, tài xế thường phải tự chạy vòng quanh để tìm chỗ. Việc này làm tăng thời gian tìm kiếm, gây ùn tắc trong bãi và khiến tài xế khó lựa chọn được vị trí phù hợp với nhu cầu.
Một hệ thống chỉ hiển thị số ô trống vẫn chưa giải quyết được các vấn đề như:
V-Valet giải quyết các vấn đề này bằng một chuỗi xử lý có thứ tự:
Hiểu nhu cầu → kiểm tra điều kiện → xếp hạng ứng viên → giữ chỗ → dẫn đường → theo dõi → giải thích và lưu vết.
V-Valet hiện mô phỏng chi tiết hai nhóm người dùng chính.
Tài xế sử dụng Driver App để:
Mỗi tài xế có một môi trường Godot riêng. Xe, camera, barrier, tuyến đường và hành trình trong môi trường này thuộc về phiên của tài xế đó.
Ban quản lý sử dụng Operations Console và Scenario Lab để:
Driver và BQL là hai môi trường mô phỏng độc lập.
PEAK_HOUR của BQL không tự động tạo xe NPC trong Godot của Driver.Hai môi trường chỉ dùng chung:
Chúng không nên dùng chung trạng thái xe, camera, session hoặc simulator runtime.
V-Valet sử dụng kiến trúc modular monolith.
Điều này có nghĩa là hệ thống được chia thành nhiều module có trách nhiệm riêng, nhưng phần backend chính vẫn được triển khai như một ứng dụng thống nhất.
Cách tổ chức này giúp:
Các nhóm chức năng chính gồm:
Một yêu cầu tìm chỗ đi qua các bước sau:
Trong đó, “giữ nguyên tử” có nghĩa là việc kiểm tra và giữ ô được thực hiện như một thao tác không thể bị chen ngang. Nếu hai xe cùng yêu cầu một ô, chỉ một xe được giữ thành công.
LangGraph được sử dụng như một máy điều phối trạng thái:
intent
→ eligibility
→ allocation
→ approval
→ reservation
→ routing
LangGraph không tự chọn ô và không tự quyết định business rule.
Mỗi bước được giao cho module chuyên trách:
| Bước | Thành phần quyết định |
|---|---|
| Hiểu nhu cầu | M09 Intent Parser |
| Kiểm tra điều kiện | M05 Eligibility Engine |
| Xếp hạng | M06 Allocation Engine |
| Kiểm tra phê duyệt | Approval Policy và M14 |
| Giữ chỗ | M07 Reservation Engine |
| Tìm đường | M08 Routing Engine |
Workflow có thể dừng ở trạng thái chờ phê duyệt. Hệ thống không giữ ô nhạy cảm trước khi yêu cầu được xác nhận theo policy.
AI được sử dụng ở lớp giao tiếp để:
AI không được:
Việc chọn ô, giữ chỗ, dẫn đường và cập nhật trạng thái vẫn do backend và các engine tất định thực hiện.
Kết quả từ model được giới hạn bằng:
Grounding guard kiểm tra:
Nếu model thêm mã hoặc số liệu không có nguồn, hoặc diễn đạt trái với fact đã nhận, toàn bộ bản diễn đạt của model bị loại. Hệ thống quay lại câu trả lời template tất định.
Khi không có fact đã được phê duyệt, hệ thống phải trả trạng thái không đủ dữ liệu thay vì tự suy đoán.
Khi LLM bị tắt, timeout hoặc không có kết nối Internet:
Nhờ đó, AI không nằm trên đường găng của luồng điều phối.
Trước khi chấm điểm, hệ thống loại những ô không đáp ứng điều kiện bắt buộc.
Các điều kiện hiện có gồm:
Mỗi vi phạm đều có reason code. Nếu một ô vi phạm nhiều điều kiện, hệ thống có thể ghi nhận đầy đủ nhiều lý do thay vì chỉ giữ lý do đầu tiên.
Giới hạn hiện tại: rule kích thước mới được triển khai rõ nhất cho ô xe máy và xe cỡ S; hệ thống chưa có mô hình hình học đầy đủ cho mọi loại xe lớn.
Các ô vượt qua eligibility được chấm điểm theo công thức:
total_score = Σ(weight_i × normalized_score_i)
Các điểm thành phần nằm trong khoảng từ 0 đến 1.
| Chiều điểm | Ý nghĩa |
|---|---|
distance | Ưu tiên thời gian di chuyển tới ô; nếu không có thời gian thì dùng khoảng cách lái xe |
congestion | Ưu tiên khu vực hoặc làn ít ùn tắc |
preference | Mức phù hợp với loại xe, pin, loại sạc, urgency và độ tin cậy trạng thái |
fairness | Tín hiệu hỗ trợ phân bổ công bằng |
poi | Khoảng cách thẳng tới loại điểm tiện ích được policy chọn |
corner | Mức độ gần biên hoặc góc của khu vực |
isolation | Mức độ tách khỏi các luồng giao thông chính |
Baseline Sprint 1 sử dụng:
distance = 0.40
congestion = 0.30
preference = 0.20
fairness = 0.10
poi = 0.00
corner = 0.00
isolation = 0.00
Policy spatial hiện hành sử dụng:
distance = 0.384
congestion = 0.288
preference = 0.192
fairness = 0.096
poi = 0.000
corner = 0.020
isolation = 0.020
Congestion và fairness hiện chủ yếu dùng giá trị trung lập do chưa có dữ liệu vận hành thật đầy đủ nối vào ranking.
Hệ thống trả tối đa ba ứng viên tốt nhất.
Nếu hai ô có cùng tổng điểm, mã ô tăng dần được dùng làm tiêu chí phụ. Vì vậy, cùng một dữ liệu đầu vào và cùng một policy sẽ cho cùng một thứ tự kết quả.
Topology đã có dữ liệu về:
M21 cũng có thể đọc dữ liệu này để trả lời câu hỏi về các vị trí gần tiện ích.
Tuy nhiên, trong Driver allocation hiện tại:
near_elevator chưa tác động trực tiếp vào ranking;near_exit chưa tác động trực tiếp vào ranking;poi vẫn bằng 0.Driver App phải hiển thị giới hạn này trung thực, không được tuyên bố rằng hệ thống đã chọn ô gần thang máy nếu preference đó chưa tác động tới kết quả.
Dijkstra được dùng để tìm đường theo chi phí thời gian traversal_seconds.
Nếu một cạnh không khai báo thời gian riêng, hệ thống suy ra thời gian từ:
Điều này giúp dốc hoặc đoạn di chuyển chậm có chi phí cao hơn một đoạn đường phẳng cùng chiều dài.
Khoảng cách hiển thị cho tài xế vẫn là mét thật, không bị tăng giả để biểu diễn độ khó.
Đối với đường ra, hệ thống có thể dùng A* với heuristic free-flow đã tính trước.
Heuristic được tạo bằng reverse multi-source Dijkstra từ các cổng ra. Vì chi phí ùn tắc chỉ làm đường đắt hơn, heuristic free-flow không vượt quá chi phí thật và vẫn bảo toàn tính tối ưu.
Hệ thống sử dụng:
atan2 để phân loại đi thẳng, rẽ trái hoặc rẽ phải;floor_id để phân biệt lên dốc và xuống dốc.Các phép tính hình học này chủ yếu được thực hiện khi nạp topology và xây dựng slot hints, không phải chạy lại toàn bộ trong mỗi request allocation.
Các topology hiện tại chủ yếu có một đường duy nhất từ cổng tới từng ô.
Vì vậy:
Để đánh giá khả năng tránh ùn tắc hoặc chọn đường khác, topology tương lai cần có vòng giao thông hoặc nhiều đường hợp lệ dẫn tới cùng một khu vực.
V-Valet hiện đã có các nền tảng sau:
Việc giữ ô được thực hiện nguyên tử. Hai request đồng thời không thể cùng giữ thành công một ô.
Mỗi hành động quan trọng có thể mang idempotency key. Khi cùng một request được gửi lại, hệ thống trả lại kết quả đã có thay vì tạo thêm một quyết định hoặc một chỗ giữ mới.
Workflow lưu trạng thái sau các bước quan trọng để có thể:
Audit là append-only: sự kiện mới được ghi thêm, không âm thầm sửa lịch sử cũ.
Audit lưu các thông tin như:
Mỗi quyết định gắn với một policy version cụ thể. Khi quy định mới được phát hành, quyết định cũ vẫn có thể được giải thích theo đúng phiên bản đã sử dụng lúc đó.
Hệ thống đã có:
Phiên bản demo hiện nhằm chứng minh:
Demo chưa phải bằng chứng rằng hệ thống đã sẵn sàng triển khai trong một bãi xe thực tế.
Cần hoàn thiện:
Cần kết nối:
Một số dữ liệu đã có adapter PostgreSQL hoặc Redis, nhưng chưa phải toàn bộ critical state đều có khả năng:
MQTT production cần:
API key, mật khẩu và chứng chỉ cần được:
Cần bổ sung:
Cần có:
Cần chứng minh:
V-Valet hiện đã chứng minh được kiến trúc và luồng điều phối cốt lõi của một hệ thống bãi đỗ xe thông minh.
Điểm mạnh chính của hệ thống là:
Những công việc còn lại không chỉ là bổ sung giao diện. Chúng tập trung vào việc biến một hệ thống đã chạy được trong môi trường demo thành một sản phẩm có thể vận hành ổn định, an toàn và lâu dài trong bãi xe thực tế.