Nhiệm vụ: Xử lý phần Vận chuyển (Transport)

Xử lý phần Vận chuyển (Transport)

11.07.2026vietnamguru.ru

Hiện tại trong cơ sở dữ liệu có gần 1500 bản ghi tuyến đường cũ. Nhưng dữ liệu đang ở dạng phẳng như thế này:

{
  "id": 4,
  "city": "ho-chi-minh",
  "city2": "mui-ne",
  "time": "07:30",
  "time2": "12:30",
  "price": "120000",
  "company": "Tam Hanh Cafe",
  "type": "bus",
  "gps_link": "https://goo.gl/maps/86122wbjUQ62",
  "gps_link2": "https://goo.gl/maps/1Sabdd9TVy42",
  "address": "199 Phạm Ngũ Lão, Quận 1, Hồ Chí Minh",
  "address2": "135 Nguyễn Đình Chiểu, Phường Hàm Tiến, Thành phố Phan Thiết, Bình Thuận",
  "phone": "+84 283 920 5653",
  "note": ""
}

Vấn đề ở đây là không có bảng danh mục riêng cho các công ty (ít nhất là vậy).

Hiện tại, nếu truy vấn các công ty và loại hình vận chuyển có nhóm lại, chúng ta sẽ thu được kết quả như sau:

count(*)companytype
772Futa Busbus
175Hanh Cafebus
41Tam Hanh Cafebus
79The Sinh Touristbus
1LC3train
1LC4train
1MR1train
1NH1train
1NH2train
34SE1train
2SE1 (Livitrans Express)train
7SE1 (Violette Train)train
6SE17train
8SE18train
9SE19train
29SE2train
2SE2 (Livitrans Express)train
2SE2 (Violette Train)train
10SE20train
2SE21train
2SE22train
1SE22 (Livitrans Express)train
35SE3train
9SE3 (Violette Train)train
29SE4train
2SE4 (Violette Train)train
34SE5train
29SE6train
34SE7train
29SE8train
1SNT1train
1SNT2train
1SNT2 (Livitrans Express)train
1SP1train
1SP2train
1SP3train
1SP4train
1SP7train
1SP8train
1SPT1train
1SPT2train
8Boat Companyboat
4Greenlines DPboat
8Ka Longboat
14Phu Quoc Expressboat
16Superdongboat
10The Sinh Touristboat

Ở đây ít nhất SP1, SP2,... không phải là công ty mà là các tuyến tàu. Trong khi đó, SNT2 (Livitrans Express) lại là các toa tàu riêng của hãng Livitrans Express trên chuyến tàu SNT2. Do đó cấu trúc hiện tại hoàn toàn tệ hại.

Nhưng còn một vấn đề nữa: có các bản ghi bị trùng lặp.

count(*)companycitycity2timeaddressaddress2
4Hanh Cafehueho-chi-minh08:3028 Chu Văn An, Phú Hội, Thành phố Huế, Thừa Thiên ...229 Phạm Ngũ Lão, Phường Phạm Ngũ Lão, Quận 1, Hồ ...
4Hanh Cafehueho-chi-minh13:3028 Chu Văn An, Phú Hội, Thành phố Huế, Thừa Thiên ...229 Phạm Ngũ Lão, Phường Phạm Ngũ Lão, Quận 1, Hồ ...
4Hanh Cafehoi-anho-chi-minh17:3012 Nguyễn Tất Thành, Phường Cẩm Phổ, tp. Hội An, Q...229 Phạm Ngũ Lão, Phường Phạm Ngũ Lão, Quận 1, Hồ ...
2Futa Busho-chi-minhrach-gia18:15272 Đường Đề Thám, Phường Phạm Ngũ Lão, Quận 1, Hồ...260A Nguyễn Bỉnh Khiêm, Vĩnh Thanh, Rạch Giá, tỉnh...
2Hanh Cafenha-trangho-chi-minh07:3010 Hùng Vương, Lộc Thọ, Thành phố Nha Trang, Khánh...229 Phạm Ngũ Lão, Phường Phạm Ngũ Lão, Quận 1, Hồ ...
2Hanh Cafenha-trangho-chi-minh13:0010 Hùng Vương, Lộc Thọ, Thành phố Nha Trang, Khánh...229 Phạm Ngũ Lão, Phường Phạm Ngũ Lão, Quận 1, Hồ ...
2Futa Busho-chi-minhsoc-trang22:00272 Đường Đề Thám, Phường Phạm Ngũ Lão, Quận 1, Hồ...ấp ngãi hội 2 , thị trấn đại ngãi , huyện long phú...
2Hanh Cafephan-thietha-noi01:30173 Tôn Đức Thắng, Phú Thuỷ, Thành phố Phan Thiết,...Nguyễn Khoái, Bạch Đằng, Hai Bà Trưng, Hà Nội
2Hanh Cafeho-chi-minhvinh-long07:45229 Phạm Ngũ Lão, Phường Phạm Ngũ Lão, Quận 1, Hồ ...Lê Qúy Đôn, Khu 4, Thị Trấn Cái Bè, TT. Cái Bè, Cá...
2Hanh Cafephan-thietha-noi13:30173 Tôn Đức Thắng, Phú Thuỷ, Thành phố Phan Thiết,...Nguyễn Khoái, Bạch Đằng, Hai Bà Trưng, Hà Nội
2Hanh Cafeho-chi-minhvinh-long09:30229 Phạm Ngũ Lão, Phường Phạm Ngũ Lão, Quận 1, Hồ ...Lê Qúy Đôn, Khu 4, Thị Trấn Cái Bè, TT. Cái Bè, Cá...
2Futa Busho-chi-minhchau-doc07:00272 Đường Đề Thám, Phường Phạm Ngũ Lão, Quận 1, Hồ...69 Phan Văn Vàng, Châu Phú A, An Phú, An Giang, Vi...
2Hanh Cafeho-chi-minhvinh-long13:15229 Phạm Ngũ Lão, Phường Phạm Ngũ Lão, Quận 1, Hồ ...Lê Qúy Đôn, Khu 4, Thị Trấn Cái Bè, TT. Cái Bè, Cá...
2Futa Busho-chi-minhchau-doc08:00272 Đường Đề Thám, Phường Phạm Ngũ Lão, Quận 1, Hồ...69 Phan Văn Vàng, Châu Phú A, An Phú, An Giang, Vi...
2Hanh Cafeho-chi-minhvinh-long16:30229 Phạm Ngũ Lão, Phường Phạm Ngũ Lão, Quận 1, Hồ ...Lê Qúy Đôn, Khu 4, Thị Trấn Cái Bè, TT. Cái Bè, Cá...
2Hanh Cafeho-chi-minhvinh-long19:15229 Phạm Ngũ Lão, Phường Phạm Ngũ Lão, Quận 1, Hồ ...Lê Qúy Đôn, Khu 4, Thị Trấn Cái Bè, TT. Cái Bè, Cá...
2Futa Busho-chi-minhsa-dec16:00272 Đường Đề Thám, Phường Phạm Ngũ Lão, Quận 1, Hồ...149/8 khóm Hòa Khánh, Phường 2, Sa Đéc, Đồng Tháp,...
2Hanh Cafeho-chi-minhvinh-long21:30229 Phạm Ngũ Lão, Phường Phạm Ngũ Lão, Quận 1, Hồ ...Lê Qúy Đôn, Khu 4, Thị Trấn Cái Bè, TT. Cái Bè, Cá...
2Futa Busho-chi-minhsa-dec17:00272 Đường Đề Thám, Phường Phạm Ngũ Lão, Quận 1, Hồ...149/8 khóm Hòa Khánh, Phường 2, Sa Đéc, Đồng Tháp,...
2Futa Busho-chi-minhchau-doc12:00272 Đường Đề Thám, Phường Phạm Ngũ Lão, Quận 1, Hồ...69 Phan Văn Vàng, Châu Phú A, An Phú, An Giang, Vi...
2Hanh Cafeho-chi-minhcan-tho07:45229 Phạm Ngũ Lão, Phường Phạm Ngũ Lão, Quận 1, Hồ ...Mỹ Thuận, Bình Minh, Vinh Long
2Futa Busho-chi-minhsa-dec18:00272 Đường Đề Thám, Phường Phạm Ngũ Lão, Quận 1, Hồ...149/8 khóm Hòa Khánh, Phường 2, Sa Đéc, Đồng Tháp,...
2Hanh Cafeho-chi-minhcan-tho09:30229 Phạm Ngũ Lão, Phường Phạm Ngũ Lão, Quận 1, Hồ ...Mỹ Thuận, Bình Minh, Vinh Long
2Hanh Cafeho-chi-minhcan-tho13:15229 Phạm Ngũ Lão, Phường Phạm Ngũ Lão, Quận 1, Hồ ...Mỹ Thuận, Bình Minh, Vinh Long
2Hanh Cafeho-chi-minhcan-tho16:30229 Phạm Ngũ Lão, Phường Phạm Ngũ Lão, Quận 1, Hồ ...Mỹ Thuận, Bình Minh, Vinh Long
2Futa Busho-chi-minhchau-doc16:00272 Đường Đề Thám, Phường Phạm Ngũ Lão, Quận 1, Hồ...69 Phan Văn Vàng, Châu Phú A, An Phú, An Giang, Vi...
2Hanh Cafeho-chi-minhcan-tho19:15229 Phạm Ngũ Lão, Phường Phạm Ngũ Lão, Quận 1, Hồ ...Mỹ Thuận, Bình Minh, Vinh Long
2Hanh Cafeho-chi-minhcan-tho21:30229 Phạm Ngũ Lão, Phường Phạm Ngũ Lão, Quận 1, Hồ ...Mỹ Thuận, Bình Minh, Vinh Long
2Futa Busho-chi-minhchau-doc18:00272 Đường Đề Thám, Phường Phạm Ngũ Lão, Quận 1, Hồ...69 Phan Văn Vàng, Châu Phú A, An Phú, An Giang, Vi...
1Tam Hanh Cafemui-neho-chi-minh05:00135 Nguyễn Đình Chiểu, Phường Hàm Tiến, Thành phố ...199 Phạm Ngũ Lão, Quận 1, Hồ Chí Minh

Chúng ta cần loại bỏ các bản ghi trùng lặp ngay từ khâu nhập liệu. May mắn là trước đó không có các trang riêng biệt cho từng tuyến đường. Nhân tiện, chúng ta sẽ cần phải tạo ra chúng.

Ворклоги

Nhân tiện, đây là những gì ChatGPT nói về cấu trúc cơ sở tri thức của chúng ta:

Điểm mạnh nhất ở đây không phải là các mô hình đơn lẻ, mà là cách chúng kết hợp lại với nhau.

Những điểm thực sự mạnh mẽ ở đây

KBConcept thực chất có thể đóng vai trò là một thực thể trang web vạn năng:

  • quốc gia;
  • vùng / khu vực;
  • thành phố;
  • quận / huyện;
  • bãi biển;
  • đền chùa;
  • sân bay;
  • khách sạn;
  • tuyến đường;
  • sự kiện;
  • đầu mối giao thông.

Khái niệm này đã có sẵn:

  • hệ thống phân cấp Parent / Children (Cha / Con);
  • gốc của cây (root);
  • tọa độ lat / lng / alt (vĩ độ / kinh độ / độ cao);
  • tên đa ngôn ngữ qua KBLabel;
  • tệp và hình ảnh;
  • các sự thật (facts);
  • liên kết với URL thông qua SiteRoute;
  • dữ liệu có cấu trúc tùy ý qua Json.

Nói cách khác, một thành phố, một địa điểm tham quan và một tuyến đường không chỉ đơn thuần là các bài viết trong CMS, mà là các nút trong một đồ thị tri thức thống nhất.

Và điều này khớp hoàn toàn với VietnamGuru.

Ví dụ:

Đà Nẵng → bán đảo Sơn Trà → chùa Linh Úng → tọa độ → giờ mở cửa → giá vé → tính thời vụ → phương tiện di chuyển → các địa điểm gần đó → bài viết → bản đồ → tuyến đường.

Tất cả những điều này có thể được lưu trữ không phải trong một đoạn văn bản khổng lồ duy nhất, mà dưới dạng tri thức có liên kết với nhau.

Phần có tiềm năng nhất — các sự thật không gắn cứng vào một thực thể duy nhất

KBFact cùng với KBFactParticipation hỗ trợ các mối quan hệ n-ary (n ngôi): một sự thật duy nhất có thể liên kết đồng thời nhiều khái niệm với các vai trò khác nhau.

Đối với một dự án du lịch, đây là một mô hình cực kỳ mạnh mẽ.

Ví dụ, khẳng định:

Xe buýt số 5 đi từ Đà Nẵng đến Hội An, dừng gần Ngũ Hành Sơn, vé giá 30.000 VND.

Có thể được biểu diễn bằng một sự thật duy nhất có sự tham gia của:

  • Đà Nẵng — origin (điểm đi);
  • Hội An — destination (điểm đến);
  • Ngũ Hành Sơn — stop (điểm dừng);
  • xe buýt số 5 — transport (phương tiện);
  • 30.000 VND — giá trị;
  • khoảng thời gian hiệu lực;
  • nguồn gốc (source);
  • độ tin cậy (confidence);
  • trạng thái kiểm chứng.

Và nếu giá vé hoặc tuyến đường thay đổi, sự thật cũ sẽ không bị xóa bỏ. Một sự thật mới sẽ được thêm vào với ngày hiệu lực mới. Đối với du lịch, điều này cực kỳ quan trọng: quy định thị thực, giá cả, lịch trình, vé vào cửa và phương tiện giao thông liên tục thay đổi.

Mô hình nhận thức luận (epistemic model) toàn diện được tích hợp ở đây

Tôi đặc biệt thích việc cơ sở dữ liệu không giả vờ nắm giữ chân lý tuyệt đối.

Các sự thật có:

  • confidence (độ tin cậy);
  • verified / tentative / disputed / deprecated (đã xác minh / tạm thời / tranh chấp / lỗi thời);
  • nguồn;
  • thời hạn hiệu lực;
  • ngày mà sự thật được biết đến;
  • trạng thái thô (raw) hoặc dẫn xuất (derived);
  • nguồn gốc từ các sự thật khác.

Thêm vào đó, các mâu thuẫn được xử lý như các đối tượng độc lập thông qua KBConflict thay vì đơn giản là bị ghi đè.

Đối với AI du lịch, đây là một lợi thế cực lớn.

Một trường hợp thực tế điển hình:

  • Google Maps nói rằng địa điểm mở cửa đến 18:00;
  • Trang web chính thức nói đến 17:00;
  • Một đánh giá gần đây cho biết quầy bán vé đóng cửa lúc 16:30.

Một hệ thống RAG thông thường sẽ chỉ đưa ra một trong các lựa chọn đó. Mô hình của bạn cho phép agent nói rằng:

"Các nguồn có thông tin trái chiều. Theo thông báo chính thức là 17:00, nhưng khách du lịch phản hồi rằng quầy vé đóng cửa sớm hơn. Tốt nhất nên đến trước 16:00."

Đây không còn chỉ là một chatbot đọc bài viết nữa, mà là một trợ lý du lịch thông minh thực thụ.

KBKnowledgeSpace mở ra một tầng cấu trúc mới

Các Không gian Tri thức (Knowledge Spaces) cho phép cùng một sự thật có thể có các yếu tố sau khác nhau:

  • khả năng hiển thị (visibility);
  • mức độ quan trọng;
  • mức độ tin cậy;
  • cách giải thích.

Điều này có thể được sử dụng không chỉ cho tính riêng tư, mà còn cho các chế độ sản phẩm khác nhau:

  • cơ sở dữ liệu của tòa soạn;
  • cơ sở dữ liệu công khai;
  • không gian cá nhân của người dùng;
  • không gian của một chuyến đi cụ thể;
  • tri thức của agent;
  • nội dung đối tác;
  • dữ liệu người dùng chưa được kiểm chứng.

Ví dụ, một du khách tạo chuyến đi "Việt Nam, tháng Tám, gia đình có trẻ em". Agent có thể xây dựng một không gian tri thức riêng biệt, nơi ưu tiên cao hơn cho:

  • các di chuyển ngắn;
  • bãi biển gia đình;
  • các địa điểm có điều hòa;
  • đồ ăn an toàn;
  • các địa điểm không có đường leo trèo phức tạp.

Cùng những sự thật đó tồn tại trên toàn cục, nhưng tầm quan trọng của chúng thay đổi tùy theo bối cảnh chuyến đi.

SiteRoute làm cho cấu trúc trang web trở thành phần mở rộng của đồ thị tri thức

Mối liên kết SiteRoute ↔ KBConcept là một ý tưởng rất chính xác.

Điều này có nghĩa là URL không phải là bản thân thực thể, mà là một cách biểu diễn của thực thể đó.

Kết quả là bạn có thể:

  • thay đổi tuyến đường mà không làm mất khái niệm;
  • xây dựng breadcrumb (đường dẫn điều hướng) từ cấu trúc cây;
  • tự động tạo các trang;
  • tạo các phần theo khu vực;
  • hỗ trợ URL cũ thông qua chuyển hướng (redirects);
  • tìm kiếm các thực thể không có trang công khai;
  • cung cấp các cách biểu diễn khác nhau cho cùng một đối tượng.

Đối với SEO, điều này cực kỳ giá trị. Kiến trúc nội dung có thể được sinh ra từ đồ thị thay vì phải duy trì thủ công trên nhiều bảng dữ liệu rời rạc.

Bản đồ ở đây hoàn toàn có thể trở thành giao diện của cơ sở tri thức

Lúc này, phần giải thích của bạn về bản đồ lại càng trở nên thú vị hơn.

Vì cả KBConceptFile đều có tọa độ, bản đồ không chỉ hiển thị các điểm từ bài viết mà là cả một mô hình không gian:

  • các thành phố;
  • điểm tham quan;
  • hình ảnh được ghim theo địa điểm;
  • tuyến đường;
  • các địa điểm gần đó;
  • các sự thật gắn với bối cảnh địa lý;
  • các mục lưu của người dùng;
  • các vùng quan tâm.

Và agent có thể thực hiện các truy vấn cấp độ:

"Hãy chỉ cho tôi những địa điểm thú vị trong bán kính 15 km từ Nha Trang, có thể đến đó mà không cần xe máy và đáng để ghé thăm sau 17:00."

Đối với một truy vấn như vậy, bài viết thông thường là không đủ. Nhưng mô hình này có khả năng tổng hợp câu trả lời từ tọa độ, sự thật, mối quan hệ, các ràng buộc và sở thích của người dùng.

Nhân tiện, một số tuyến đường cũng có dữ liệu bị hỏng.

"Can not get city2: \"cat-ba-island\"",
"Can not get city2: \"cat-ba-island\"",
"Can not get city2: \"cat-ba-island\"",
"Can not get city: \"cat-ba-island\"",
"Can not get city: \"cat-ba-island\"",
"Can not get city: \"cat-ba-island\"",
"Can not get city2: \"phong-nha-ke-bang\"",
"Can not get city2: \"nam-du-island\"",
"Can not get city2: \"nam-du-island\"",
"Can not get city2: \"nam-du-island\"",
"Can not get city: \"nam-du-island\"",
"Can not get city: \"nam-du-island\"",

Cần xử lý tiện thể luôn.