№ 47
X-One - trợ lý hỗ trợ đặt dịch vụ. Hỗ trợ bạn trong mọi thứ, từ bữa ăn, chuyến xe đến cuộc hẹn. Nhanh gọn, dễ dàng. Tất cả mọi thứ trong cái chớp mắt
Loại tài liệu: Phân tích sản phẩm và kỹ thuật
Phạm vi: X-One Assistant / AI Concierge
Mốc phân tích: 24/08/2026
X-One là một AI Concierge đa dịch vụ cho phép người dùng thực hiện các tác vụ đời sống thông qua một giao diện hội thoại thống nhất thay vì phải chuyển qua nhiều ứng dụng riêng biệt. Ở trạng thái hiện tại, hệ thống tập trung vào bốn domain chính:
Giá trị cốt lõi của X-One không nằm ở việc “chat với AI”, mà ở khả năng chuyển một yêu cầu ngôn ngữ tự nhiên thành một workflow giao dịch an toàn có thể hoàn thành từ đầu đến cuối. Ví dụ, thay vì chỉ trả lời “đây là một số nhà hàng phù hợp”, hệ thống phải hiểu ngân sách, khu vực, số người và thời gian; tìm dữ liệu thật trong hệ thống; cho người dùng chọn; xác nhận điều khoản; đặt bàn; sau đó nếu người dùng yêu cầu, tiếp tục đặt xe tới chính nhà hàng đã chọn mà không hỏi lại những thông tin đã biết.
Về kỹ thuật, codebase hiện tại đã đi xa hơn một chatbot LLM đơn giản. X-One sử dụng:
Kiến trúc này phù hợp với bài toán vì nó tách rõ ba loại trách nhiệm:
Đây là điểm rất quan trọng: LLM không được quyền tự khẳng định giá, trạng thái thanh toán, lịch trống hoặc kết quả booking. Những dữ liệu đó phải đến từ backend/domain authoritative.
Xét về tính khả thi, dự án có tính khả thi kỹ thuật cao cho MVP/sandbox vì phần lớn nền tảng đã tồn tại và đã có bằng chứng test/runtime. Tuy nhiên, để trở thành sản phẩm production thực sự, độ khó lớn nhất không còn là “viết thêm API” mà là bốn vấn đề:
Hướng phát triển hợp lý nhất là không tiếp tục thêm nhiều tầng AI phức tạp, mà tập trung vào: eval → phân nhóm failure → sửa understanding/context/planning → đồng bộ Gateway/domain contract → cải thiện UI → kiểm thử end-to-end. X-One sẽ mạnh hơn nhờ sự chính xác và tính nhất quán của toàn pipeline, không phải nhờ biến hệ thống thành một “multi-agent swarm”.
Trong một hành trình đời sống thông thường, người dùng thường phải tương tác với nhiều dịch vụ độc lập. Ví dụ:
“Tối mai tìm giúp tôi một nhà hàng Nhật gần Hồ Tây cho 4 người, khoảng dưới 2 triệu. Nếu còn bàn thì đặt lúc 19:00. Sau đó gọi xe từ nhà, ghé Cầu Giấy đón Minh rồi đi tới nhà hàng. Nếu giá xe trên 300.000 đồng thì hỏi lại tôi.”
Để hoàn thành yêu cầu này theo cách truyền thống, người dùng có thể phải:
Vấn đề không phải là thiếu ứng dụng. Vấn đề là mỗi ứng dụng chỉ hiểu một phần của mục tiêu tổng thể.
X-One giải quyết sự phân mảnh này bằng một lớp orchestration hội thoại nằm phía trên các dịch vụ.
Người dùng phải ghi nhớ và truyền lại cùng một context giữa nhiều ứng dụng: địa chỉ nhà, điểm đến, số người, thời gian, ngân sách, yêu cầu đặc biệt.
Một assistant kém sẽ hỏi lại dữ liệu đã có. Feedback thực tế của dự án cho thấy các trường hợp:
Đây là lỗi context/state, không chỉ là lỗi prompt.
Người dùng không nói theo schema. Họ có thể viết:
Hệ thống phải xử lý được:
Một chatbot thông thường có thể trả lời một danh sách. X-One phải hỗ trợ một chuỗi:
Hiểu nhu cầu
↓
Tìm resource phù hợp
↓
Đề xuất lựa chọn
↓
Cho phép chỉnh sửa
↓
Xác nhận điều khoản
↓
Thực thi backend
↓
Theo dõi trạng thái
↓
Hủy / sửa / khôi phục nếu cần
Do đó, đây là bài toán transactional AI agent, không phải chatbot FAQ.
AI có thể hiểu sai. Trong các tác vụ chỉ đọc thông tin, một sai sót đôi khi chỉ gây khó chịu. Nhưng trong các tác vụ như:
một sai sót có thể tạo ra giao dịch thật.
Vì vậy X-One phải giải bài toán kép:
Làm cho AI đủ linh hoạt để hiểu ngôn ngữ tự nhiên nhưng không trao cho AI quyền tự quyết các giao dịch quan trọng.
Đây là lý do kiến trúc hiện tại đặt confirmation, authority, idempotency và domain validation bên ngoài LLM.
Điểm khác biệt tiềm năng của X-One là khả năng hiểu một yêu cầu gồm nhiều dịch vụ.
Có ba loại workflow chính.
Ví dụ:
“Đặt đồ ăn cho tôi và tìm lịch khám thần kinh sáng mai.”
Hai task có thể chạy tương đối độc lập.
Ví dụ:
“Đặt bàn nhà hàng rồi gọi xe tới đó.”
Ride phụ thuộc vào nhà hàng được chọn.
Ví dụ:
“Nếu chuyến xe dưới 200.000 thì đặt, nếu cao hơn thì hỏi lại tôi.”
Hệ thống cần hiểu điều kiện nhưng không được biến ngôn ngữ của user thành mã tùy ý để thực thi.
Xây dựng một Web application có thể demo ổn định các workflow chính:
Biến X-One từ demo thành một service orchestration platform có thể tích hợp provider thật.
X-One có thể trở thành một “personal service layer” nơi người dùng không cần biết mỗi nhu cầu được thực hiện bởi ứng dụng/provider nào. Người dùng mô tả mục tiêu; hệ thống lập kế hoạch, đề xuất phương án và thực hiện các bước sau khi được xác nhận.
Các năng lực codebase hướng tới/đã có gồm:
Các vấn đề UX từng được ghi nhận gồm danh sách món bị cắt hoặc quá dài, pagination chưa rõ, map detail không ổn định, phí giao hàng hiển thị không nhất quán và việc chọn địa chỉ/current location chưa thuận tiện.
Năng lực chính:
Các vấn đề thực tế tập trung ở:
Năng lực chính:
UX cần ưu tiên:
Năng lực chính:
Healthcare có boundary đặc biệt: X-One hỗ trợ discovery, thông tin dịch vụ và booking, không phải hệ thống chẩn đoán hay kê đơn.
Các lỗi behavior từng xuất hiện gồm chọn sai chuyên khoa khi câu hỏi mơ hồ và xử lý các yêu cầu vô lý/out-of-scope chưa tự nhiên.
flowchart TB
U[Người dùng] --> W[Next.js Web]
W --> G[NestJS API Gateway]
G --> A[Agent Service\nFastAPI + LangGraph + Gemini]
G --> F[Food Service]
G --> R[Ride Service]
G --> RS[Restaurant Service]
G --> H[Healthcare Service]
G --> CDB[(Core DB)]
A --> ADB[(Agent metadata DB / workflow state)]
F --> FDB[(Food DB)]
R --> RDB[(Ride DB)]
RS --> RSDB[(Restaurant DB)]
H --> HDB[(Healthcare DB)]
Nguyên tắc kiến trúc:
Web frontend đóng vai trò presentation layer, không phải business authority.
Các trách nhiệm chính:
Một nguyên tắc quan trọng là UI không được tự suy ra trạng thái booking từ dữ liệu local. Ví dụ, nút “Đã đặt thành công” chỉ được hiển thị sau khi backend authoritative trả về trạng thái tương ứng.
Authenticated app nên tiến gần mô hình:
┌───────────┬──────────────────────────────┬───────────────────┐
│ Navigation│ Conversation │ Current activity │
│ │ │ / Context rail │
│ │ │ │
│ │ │ │
├───────────┴──────────────────────────────┴───────────────────┤
│ Sticky composer │
└───────────────────────────────────────────────────────────────┘
Ở màn hình nhỏ, context rail chuyển thành drawer/collapsible section.
Gateway là trung tâm của hệ thống giao dịch.
Gateway đảm nhiệm:
Nếu LLM gọi thẳng domain service:
Gateway biến proposal từ AI thành một request đã được kiểm soát.
X-One không nên dùng LLM như “bộ não toàn quyền”. LLM phù hợp nhất với:
LLM không nên sở hữu:
Kiến trúc hiện tại đã tiến tới mô hình typed understanding + deterministic planning.
flowchart TB
M[User message] --> CN[Context Normalizer]
UI[UI context / selected resource] --> CN
CS[Conversation state] --> CN
LOC[Current / saved location] --> CN
CN --> UB[Understanding Layer\nGemini structured output / deterministic fallback]
UB --> ST[Typed Semantic Delta / SemanticTurn]
ST --> SV[Semantic validation]
SV --> PA[Core-A deterministic planner]
PA --> PV[Plan / capability validation]
PV --> GW[Gateway Orchestrator]
GW --> DS[Domain services]
DS --> RN[Authoritative result normalization]
RN --> RC[Grounded response composer]
RC --> OUT[Text + Cards + Actions]
AI không cần quyết định toàn bộ workflow bằng text. Nó chỉ cần chuyển câu nói thành một representation có cấu trúc.
Ví dụ:
“tìm quán Nhật gần Hồ Tây cho 4 người tối mai, dưới 2 triệu”
có thể được hiểu thành:
intent: restaurant_search
party_size: 4
location:
text: Hồ Tây
cuisine:
value: Japanese
strength: HARD
budget:
comparator: MAX
max: 2000000
basis: TOTAL
time:
date: tomorrow
daypart: evening
Sau đó planner deterministic quyết định thiếu gì, tool nào hợp lệ và bước nào cần confirmation.
Một hội thoại không nên được xử lý như chuỗi message độc lập.
Ví dụ:
User: Đặt bàn 2 người lúc 7 giờ tối mai.
AI: ...
User: Không, 4 người cơ.
Turn thứ hai không phải một booking mới. Nó là amendment cho task hiện tại.
Representation nên thể hiện delta:
party_size: SET 4
restaurant: KEEP
location: KEEP
time: KEEP
Nếu user nói:
“Bỏ địa điểm cũ đi.”
thì đó là CLEAR, không phải KEEP.
Cơ chế SET/CLEAR/KEEP giúp tránh lỗi phổ biến khi slot mới ghi đè hoặc làm mất context cũ.
X-One cần hiểu các reference như:
Reference chỉ hợp lệ nếu có authoritative candidate/resource context.
Ví dụ, trong conversation mới, nếu user nói:
“Chọn cái thứ hai.”
system phải hỏi lại, không được tự bịa candidate.
Ngôn ngữ người dùng có hard và soft constraint.
“phải là quán Nhật” → HARD
“ưu tiên quán Nhật” → SOFT
Nếu hệ thống không phân biệt hai loại này, ranking sẽ dễ vi phạm ý user.
Các constraint quan trọng:
Feedback người dùng cho thấy ngân sách là một thông tin rất quan trọng.
Một câu như:
“500k cho 2 người”
khác với:
“500k mỗi người”.
Do đó semantic money object cần có basis:
TOTAL;PER_PERSON;PER_ITEM;SERVICE_FARE.AI chỉ hiểu budget constraint. Giá thực tế vẫn phải đến từ domain.
Chatbot không nên trả lời cứng nhắc hoặc lặp một câu hardcode khi user hỏi ngoài luồng.
Ví dụ:
“Đặt lịch khám trên sao Hỏa.”
Một phản hồi tốt có thể là:
“Hiện X-One chỉ hỗ trợ các cơ sở y tế có trong hệ thống. Nếu bạn cho mình khu vực thực tế muốn khám, mình có thể tìm chuyên khoa và lịch phù hợp.”
Mẫu chung:
1. Acknowledge ngắn gọn.
2. Nêu giới hạn thật.
3. Không bịa dữ liệu.
4. Đưa người dùng trở lại capability phù hợp.
Đây nên là behavior policy, không phải một chuỗi hardcode cho từng câu test.
Tool Registry giúp Agent biết hệ thống thực sự có khả năng làm gì.
Mỗi capability cần xác định:
Ví dụ:
name: healthcare.confirm_appointment
owner: healthcare
risk: FINANCIAL_OR_FINAL
requires_confirmation: true
Điều này tốt hơn việc mô tả capability hoàn toàn bằng prompt vì:
Các giao dịch quan trọng nên sử dụng mô hình:
Proposal
↓
User xem chi tiết
↓
Confirmation #1
↓
Domain hold / prepare
↓
Payment / final terms
↓
Confirmation #2
↓
Final write
Không phải domain nào cũng cần thanh toán thật, nhưng nguyên tắc là user phải thấy điều khoản authoritative cuối cùng trước side effect quan trọng.
Nếu user đổi:
thì confirmation cũ phải bị invalidated.
Nếu không, người dùng có thể xác nhận một card cũ và tạo giao dịch với điều khoản không còn đúng.
Network có thể retry. User có thể double-click. Gateway có thể restart sau khi domain đã ghi thành công.
Do đó side effect cần idempotency.
Mục tiêu:
same actor
+ same operation
+ same key
+ same payload
→ same logical result
nhưng:
same key
+ changed payload
→ conflict
Đây là một điểm mạnh của kiến trúc hiện tại.
Một tình huống nguy hiểm:
Gateway gọi domain
Domain ghi thành công
Gateway chết trước khi lưu response
Client retry
Nếu không có idempotency/reconciliation, một booking có thể bị tạo hai lần.
X-One đã xây dựng migration/state cho confirmation execution, workflow reconciliation và recovery claims để xử lý lớp lỗi này.
Ví dụ:
flowchart LR
A[Search Restaurant] --> B[Select + Confirm Restaurant]
B --> C[Resolve Restaurant Location]
C --> D[Ride Quote]
D --> E{Fare <= limit?}
E -->|Yes| F[Prepare Ride]
E -->|No| G[Ask User]
Dependency phải dùng output authoritative của task trước. Không được lấy địa chỉ mà model tự nghĩ ra.
Một workflow nhiều dịch vụ không luôn có kết quả all-or-nothing.
Ví dụ:
Restaurant: CONFIRMED
Ride: NO_DRIVER
Kết quả hợp lý là:
PARTIAL_SUCCESS
Không nên tự động hủy bàn chỉ vì không có xe, trừ khi một compensation policy rõ ràng cho phép.
Nên giới hạn ba nhóm:
NONE;USER_CONFIRM_REQUIRED;AUTOMATIC_SAFE_COMPENSATION.Không cho LLM tự quyết một hành động rollback có side effect.
Codebase hiện sử dụng một PostgreSQL instance cho local development nhưng tách logical database/owner:
xone_core;xone_agent;xone_food;xone_ride;xone_restaurant;xone_healthcare.Đây là lựa chọn thực dụng cho MVP:
Gateway không được query trực tiếp database của Food để quyết định Restaurant hoặc Ride.
Mọi domain phải giao tiếp qua typed API.
Lợi ích:
Hiện sản phẩm là MVP/local sandbox. Catalog và seed data cho phép demo flow nhưng chưa tương đương provider production.
Do đó cần phân biệt:
“hệ thống có thể thực thi workflow”
với:
“hệ thống đang kết nối với thị trường thật”
Hai vấn đề khác nhau.
Map là một trong các nguồn bug UX lớn nhất vì nó liên quan đồng thời tới:
invalidateSize/equivalent nếu library yêu cầu;ETA phải tách:
Pickup ETA
Travel duration
Total estimated journey
Không nên dùng một con số hardcode cho mọi route.
Production cần provider routing/traffic phù hợp. Trong sandbox, ETA phải được ghi rõ là estimate và thuật toán fallback phải deterministic.
X-One nên là giao diện hội thoại kết hợp rich UI.
LLM thích hợp để hiểu ý. Nhưng user không nên phải gõ text cho mọi bước.
Ví dụ:
Khi Assistant render một proposal:
Điểm đi: VinUni
Điểm đến: Hồ Gươm
Xe: 4 chỗ
Giá: 140.000đ
user nên có thể bấm Chỉnh sửa và thay trực tiếp những field được phép thay đổi.
Sau mỗi material change:
Một danh sách 20 nhà hàng không nên đẩy chat dài hàng nghìn pixel.
Nên dùng:
Bug document nhắc nhiều lần việc thiếu spinner.
Các trạng thái bắt buộc thiết kế riêng:
Không nên chỉ disable button mà không cho user biết hệ thống đang làm gì.
Gateway hiện có các thành phần cho:
Các input sau đều phải coi là untrusted:
Không chuỗi text nào được tự biến thành permission.
Không gửi dữ liệu y tế không cần thiết vào model.
X-One không nên mở rộng sang:
Nếu tương lai xử lý dữ liệu sức khỏe thật, yêu cầu privacy/compliance sẽ tăng mạnh.
Hiện tại là sandbox. Production payment cần:
Không nên tự lưu full card number/CVV.
X-One là hệ thống phân tán. Một request assistant có thể đi qua:
Browser
→ Gateway
→ Agent
→ Gateway
→ Domain
→ Database
→ Gateway
→ Agent composer
→ Browser
Do đó cần correlation ID xuyên suốt.
Các metric quan trọng:
Một function có thể pass unit test nhưng sản phẩm vẫn lỗi khi user thực sự thao tác trên browser.
Vì vậy cần pyramid:
Unit
↓
Contract
↓
Integration
↓
Gateway/domain E2E
↓
Browser E2E
↓
AI behavioral evaluation
Không nên chỉ tạo test cho từng câu feedback.
Ví dụ feedback:
“đã gửi vị trí nhưng bot vẫn hỏi lại.”
Không chỉ thêm đúng một test câu đó. Nên tạo một cluster:
location from UI
location from device
saved address
explicit text location
conflicting locations
stale previous location
relative “ở đây”
location changed mid-flow
Tương tự với:
Playwright là lựa chọn phù hợp cho X-One vì có thể kiểm tra:
Các flow transaction có state nên chạy live E2E với worker thấp, tránh parallel tạo race giả.
Phần này mô tả bằng chứng có trong repository/current-state, không phải tuyên bố rằng hệ thống đã production-ready.
Codebase hiện đã có:
Các checkpoint gần đây trong tài liệu current-state ghi nhận các đợt test lớn với hàng trăm test Agent/Gateway/domain, mock Playwright và isolated Compose runtime. Một checkpoint 21/08 ghi nhận toàn bộ stack 8 container healthy và browser transaction harness chạy qua nhiều domain. Đây là bằng chứng mạnh rằng kiến trúc không chỉ tồn tại trên giấy.
Tuy nhiên, repository cũng chủ động ghi nhận các gate chưa hoàn toàn khép kín, đặc biệt ở:
Tập hợp bug/feedback người dùng cũng cho thấy product quality vẫn là bottleneck quan trọng. Các lỗi này chủ yếu nằm trong ba cluster:
Điều đó cho thấy dự án đã qua giai đoạn “có chạy hay không” và bước vào giai đoạn khó hơn: làm cho toàn bộ trải nghiệm đủ chính xác, nhất quán và dễ tin cậy.
Không có yếu tố kỹ thuật nào khiến ý tưởng X-One “không thể làm được”. Phần khó nằm ở chất lượng triển khai và tích hợp, không phải tính khả thi nền tảng.
LLM hiện nay đủ khả năng hỗ trợ semantic understanding cho bài toán này, nhưng không đủ đáng tin để tự làm transaction controller.
Kiến trúc hybrid của X-One là hợp lý:
LLM → semantic understanding
Code → policy/planning validation
Backend → transaction authority
Độ chính xác sẽ phụ thuộc chủ yếu vào:
Không cần một model cực lớn cho mọi turn. Có thể dùng routing:
simple/high-confidence
→ model nhanh/rẻ
complex/multi-intent/low-confidence
→ model mạnh hơn
still ambiguous
→ hỏi user
Điều này giúp tối ưu cả cost và accuracy.
Trong sandbox, seed/import data đủ để chứng minh workflow.
Production khó hơn vì cần:
Nếu không có provider thật, X-One chỉ là orchestration demo, chưa phải marketplace/service platform thực tế.
Docker Compose phù hợp local/MVP.
Để production cần chuyển dần tới:
Không nhất thiết phải dùng Kubernetes sớm. Với traffic ban đầu, một nền tảng container managed hoặc VPS chuẩn hóa có thể đủ.
Value proposition dễ hiểu:
“Một nơi để hoàn thành nhiều việc đời sống bằng một yêu cầu tự nhiên.”
Lợi ích:
Nhưng moat không nằm ở chatbot UI. Lợi thế bền vững sẽ đến từ:
| Rủi ro | Mức độ | Tác động | Giảm thiểu |
|---|---|---|---|
| AI hiểu sai yêu cầu | Cao | Giao dịch sai | Typed semantics, clarification, confirmation |
| Hallucinated price/availability | Cao | Mất niềm tin | Domain authority, grounding boundary |
| Duplicate side effect | Cao | Đặt/trừ tiền 2 lần | Idempotency + execution receipt |
| Stale confirmation | Cao | Xác nhận sai điều khoản | Revision binding + invalidation |
| Provider timeout | Cao | Workflow treo | Retry có giới hạn, recovery, partial state |
| Map/routing sai | Trung bình–Cao | ETA/trải nghiệm sai | Provider authoritative + fallback rõ |
| Dữ liệu catalog cũ | Cao | Search/availability sai | Freshness/versioning |
| UI state không đồng bộ | Cao | User bấm action cũ | Server-authoritative response spec |
| LLM cost tăng | Trung bình | Chi phí | Model routing, caching dữ liệu không nhạy cảm, giới hạn context |
| Latency cao | Trung bình–Cao | Drop conversion | Parallel read calls, model nhỏ cho turn đơn giản |
| Security/privacy | Cao | Rủi ro dữ liệu | Least privilege, token hygiene, audit, redaction |
| Healthcare scope creep | Cao | Rủi ro an toàn | Booking-only boundary, graceful refusal |
| Vendor lock-in | Trung bình | Khó đổi provider | Adapter + typed contract |
Đưa Web app tới trạng thái demo ổn định, không có lỗi UX rõ ràng.
Assistant hiểu đúng hơn, hỏi ít hơn và không mất context.
Không hardcode theo từng câu feedback.
Mỗi lỗi phải được biến thành failure family + regression set.
Hỗ trợ tốt:
Restaurant → Ride
Healthcare → Ride
Food + Healthcare độc lập
multi-stop Ride phụ thuộc resource trước
condition theo budget/fare
partial success
Không cần generic arbitrary workflow language. Chỉ hỗ trợ các condition class được review.
Từng domain nên có adapter interface.
Domain interface
↓
Sandbox adapter
↓
Provider A
↓
Provider B
Không để provider-specific schema lan vào Agent.
Ưu tiên integration:
Chỉ nên làm sau khi transaction core ổn định.
Có thể ghi nhớ khi user cho phép:
Cần UI để:
Không nên dùng vector DB chỉ vì “AI app cần vector DB”. Với preference structured, relational storage thường đủ.
Mobile hiện không nên là ưu tiên trước Web quality.
Sau khi Web ổn định có thể:
Voice có thể là roadmap xa hơn nhưng không cần để chứng minh core value.
X-One không tự động tốt hơn chỉ vì thêm nhiều thành phần “AI”.
Chưa có lý do mạnh để thêm:
Các thành phần này chỉ nên xuất hiện khi có một bottleneck cụ thể được đo lường.
| KPI | Mục tiêu MVP ổn định |
|---|---|
| Domain classification accuracy | > 95% trên corpus representative |
| Required-slot recall | > 95% |
| Unnecessary clarification rate | < 10% |
| Reference resolution accuracy | > 95% |
| Hard-constraint violation | < 1% |
| Hallucinated authoritative fact | ~0% |
| Unsafe action without confirmation | 0% |
| KPI | Mục tiêu |
|---|---|
| Task completion rate | tăng theo từng domain |
| Median turns to completion | giảm dần |
| Search → selection rate | theo dõi theo domain |
| Confirmation abandonment | theo dõi và phân tích |
| Cancellation success | gần 100% khi policy cho phép |
| UI error-free session | > 99% cho demo path |
| KPI | Mục tiêu ban đầu |
|---|---|
| Gateway API p95 | < 500 ms cho non-LLM read đơn giản |
| Assistant first useful response | tối ưu < vài giây tùy provider |
| 5xx rate | < 1% |
| Duplicate side effect | 0 |
| Recovery convergence | 100% cho scenario được hỗ trợ |
Các ngưỡng production phải được điều chỉnh bằng dữ liệu thực thay vì giữ cứng theo tài liệu MVP.
Một domain mới không nên yêu cầu sửa toàn bộ Agent.
Quy trình:
1. Define domain ownership
2. Define OpenAPI contract
3. Implement domain service
4. Add capability to Tool Registry
5. Generate/update typed client
6. Add Agent semantic capability mapping
7. Add Gateway orchestration policy
8. Add confirmation/risk classification
9. Add UI card/form
10. Add tests/eval
Ví dụ domain tương lai:
Điểm mạnh của X-One khi đó là một orchestration framework dùng chung, không phải một prompt khổng lồ chứa logic của tất cả dịch vụ.
X-One không nên định vị là:
“ChatGPT nhưng có nút đặt xe.”
Định vị mạnh hơn là:
Một lớp điều phối dịch vụ cá nhân bằng ngôn ngữ tự nhiên, kết nối nhiều quy trình và luôn giữ người dùng trong vòng kiểm soát giao dịch.
Ba thuộc tính cần giữ:
Không hỏi lại thông tin đã biết và hiểu các reference giữa UI + conversation.
Không tự ý thực hiện side effect. Luôn dựa trên backend authority.
Có thể lập kế hoạch xuyên nhiều dịch vụ và quản lý partial failure.
Nếu cần giải thích dự án trong buổi demo, không nên chỉ nói “dùng Gemini + LangGraph”. Các điểm đáng nhấn mạnh hơn là:
Đây là các đặc điểm khiến X-One gần một transactional agent platform hơn một chatbot demo.
Một kiến trúc hợp lý cho X-One trong vài vòng phát triển tới là:
Context Normalizer
↓
Typed Understanding
↓
Semantic Validator
↓
Deterministic Planner / Policy
↓
Gateway Orchestrator
↓
Domain Authority
↓
Grounded Result
↓
Natural Response + Structured UI
Kèm theo:
Đây đã là một kiến trúc đủ mạnh để tiếp tục mở rộng mà chưa bị overengineering.
Nếu accuracy vẫn thấp sau khi đạt cấu trúc này, bước tiếp theo không nên là thêm một “agent” mới. Bước đúng hơn là:
Eval
→ tìm failure cluster
→ xác định layer gây lỗi
→ sửa schema/context/prompt/model/contract
→ regression test
X-One giải một bài toán thực tế và có giá trị: biến các dịch vụ rời rạc thành một hành trình thống nhất có thể điều khiển bằng ngôn ngữ tự nhiên.
Codebase hiện tại cho thấy dự án đã có nền tảng kỹ thuật đáng kể: Web, Gateway, AI Agent, bốn domain service, persistence, typed contracts, transaction safeguards, test suite và local runtime. Vì vậy, tính khả thi của MVP đã được chứng minh ở mức kỹ thuật.
Thách thức lớn nhất từ đây không phải “xây thêm nhiều module” mà là hoàn thiện ba lớp chất lượng:
Nếu giải quyết tốt ba lớp này, X-One có thể chuyển từ một dự án AI demo sang một nền tảng service orchestration có khả năng phát triển thực tế.
Định hướng tối ưu là tiếp tục đào sâu chất lượng trên kiến trúc hiện có, mở rộng theo contract và bằng evidence, thay vì tăng độ phức tạp kiến trúc một cách không cần thiết.
| Thành phần | Trách nhiệm | Không được làm |
|---|---|---|
| Web | UI, interaction, local presentation state | Tự quyết booking/payment truth |
| API Gateway | Public API, auth, orchestration, confirmation, idempotency, audit | Sở hữu domain invariant bằng cross-domain SQL |
| Agent | Understanding, semantic plan/proposal, natural response | Final side effect, authoritative price/status |
| Food | Food catalog/order truth | Sửa Ride/Restaurant/Healthcare state |
| Ride | Ride quote/booking/tracking truth | Tin route/price do LLM tự tạo |
| Restaurant | Availability/reservation truth | Dùng Food order model làm authority |
| Healthcare | Appointment/slot truth | Chẩn đoán/kê thuốc qua Agent |
| Core DB | Conversation/auth/confirmation/payment sandbox/workflow metadata | Sở hữu bảng nghiệp vụ của domain khác |
“Tối mai tìm nhà hàng Nhật gần Hồ Tây cho 4 người, tổng khoảng 2 triệu. Nếu còn bàn lúc 7h thì đặt. Sau đó gọi xe từ nhà, ghé Cầu Giấy đón Minh rồi tới quán. Nếu xe quá 300k thì hỏi lại tôi.”
tasks:
- type: restaurant
operation: search_and_reserve
constraints:
cuisine: Japanese
location: Hồ Tây
party_size: 4
budget:
comparator: MAX
max: 2000000
basis: TOTAL
time: tomorrow 19:00
- type: ride
operation: quote_and_book
depends_on: restaurant.selected_resource
route:
pickup: saved_address.home
waypoints:
- Cầu Giấy / Minh
destination: restaurant.selected_resource
constraints:
max_fare: 300000
Search restaurant
→ authoritative candidates
→ user selects
→ check availability
→ show reservation confirmation
→ user confirms
→ reserve
→ resolve selected restaurant location
→ route quote with ordered waypoint
→ if fare > 300k: ask user
→ otherwise show ride confirmation
→ user confirms
→ book ride
→ track both resources
NO_DRIVER trừ khi policy cho phép;Đây là loại workflow thể hiện rõ nhất giá trị dài hạn của X-One.