Giới thiệu dự án

Sự bùng nổ của trí tuệ nhân tạo (AI) và các mô hình ngôn ngữ lớn (Large Language Models - LLM) đang định hình lại phương thức tiếp cận và khai thác thông tin trong kỷ nguyên số. Theo các báo cáo ngành du lịch toàn cầu, hơn 74% du khách hiện đại chủ động tìm kiếm thông tin và lập kế hoạch hành trình trực tuyến, dẫn đến nhu cầu khổng lồ về các giải pháp tư vấn du lịch thông minh, tự động và tương tác theo thời gian thực. Tuy nhiên, các hệ thống chatbot truyền thống dựa trên cây quyết định (rule-based) hoặc các mô hình LLM độc lập (zero-shot LLM) bộc lộ nhiều điểm nghẽn nghiêm trọng: hiện tượng ảo giác thông tin (hallucination), thiếu dữ liệu thực tế tại địa phương (local knowledge gap), tích lũy sai số (error propagation), và chi phí token đắt đỏ khi xử lý văn bản tiếng Việt.

Đồ án khóa luận tốt nghiệp "Thiết kế hệ thống hỏi đáp về du lịch" (Design a question answering system about tourism) do nhóm nghiên cứu tại Khoa Công nghệ Phần mềm, Trường Đại học Công nghệ Thông tin – ĐHQG-HCM thực hiện dưới sự hướng dẫn của TS. Nguyễn Đình Hiển và ThS. Huỳnh Tuấn Anh, tập trung giải quyết bài toán tư vấn lịch trình và thông tin du lịch bản địa chuyên sâu bằng giải pháp kết hợp kiến trúc Đa tác tử (Multi-Agent Collaboration) và Kỹ thuật Tăng cường Truy xuất Dữ liệu (Retrieval-Augmented Generation - RAG).

                      +---------------------------------------------------+
                      |                 User Interface                    |
                      |    (Web Chat WebSocket / Facebook Messenger)      |
                      +-------------------------+-------------------------+
                                                |
                                                v
                      +---------------------------------------------------+
                      |             FastAPI ASGI Gateway / Router         |
                      +-------------------------+-------------------------+
                                                |
                                                v
                      +---------------------------------------------------+
                      |         LangGraph Multi-Agent Orchestrator        |
                      |  [Scratchpad State: History + Memory + Reasoning] |
                      +----+--------------------+--------------------+----+
                           |                    |                    |
                           v                    v                    v
                  +-----------------+  +-----------------+  +-----------------+
                  | Research Agent  |  | Planning Agent  |  |   Reply Agent   |
                  | (gpt-3.5-turbo) |  | (gpt-3.5-turbo) |  |     (gpt-4)     |
                  +--------+--------+  +--------+--------+  +--------+--------+
                           |                    |                    |
                           +--------------------+--------------------+
                                                |
                                                v
                      +---------------------------------------------------+
                      |                 Tool Ecosystem                    |
                      |  * Search Local Data (Qdrant Vector DB)           |
                      |  * OpenWeather Hydrometeorology API               |
                      |  * Google Custom Search API                       |
                      |  * Web Scraper (BeautifulSoup4 Engine)            |
                      +---------------------------------------------------+

Mục tiêu dự án

  1. Xây dựng hệ sinh thái Multi-Agent thông minh: Phân rã luồng xử lý phức tạp thành các tác nhân chuyên biệt (Research Agent, Planning Agent, Reply Agent) hoạt động theo mô hình ReAct (Reasoning & Acting) trên nền tảng LangGraph.
  2. Thiết lập RAG Pipeline chuẩn xác: Tích hợp cơ sở dữ liệu vector Qdrant và mô hình nhúng text-embedding-3-small (1536 chiều) để lập chỉ mục và truy xuất dữ liệu du lịch địa phương (ví dụ: dữ liệu du lịch Quảng Bình).
  3. Tối ưu hóa tài nguyên và chi phí vận hành: Ứng dụng kỹ thuật định tuyến mô hình kép (Dual-LLM Routing với gpt-3.5-turbo cho truy xuất suy luận và gpt-4 cho tổng hợp ngôn ngữ) kết hợp chuẩn hóa ngôn ngữ suy luận nội bộ bằng tiếng Anh để giảm thiểu số lượng token tiêu thụ.
  4. Phát triển nền tảng tích hợp đa kênh: Triển khai Backend hiệu năng cao với FastAPI, hỗ trợ giao thức WebSocket thời gian thực và Webhook kết nối Facebook Messenger.

Phạm vi và giới hạn hệ thống

  • Phạm vi: Tập trung vào bài toán hỏi đáp, tra cứu địa điểm, ăn uống, lưu trú, thời tiết và lập lịch trình du lịch cho một địa phương/khu vực cụ thể với khả năng tùy biến bộ dữ liệu quản trị viên.
  • Giới hạn: Hệ thống xử lý thông tin dạng văn bản; triển khai thử nghiệm trên môi trường máy chủ cá nhân hóa với container Docker và giao diện MVP (Minimum Viable Product).

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Tiêu chí Rule-Based Chatbot Pure LLM (Zero-shot) Multi-Agent RAG (Hệ thống đề xuất)
Cơ chế hoạt động Cây kịch bản tĩnh (Decision Tree) Trọng số mô hình tĩnh ReAct Loop + Vector Retrieval
Khả năng cập nhật tri thức Thủ công, tốn nhiều công sức Cần fine-tune/train lại tốn kém Nạp file văn bản (.txt, .pdf, .docx) tức thì
Hiện tượng Ảo giác (Hallucination) 0% (nhưng thiếu linh hoạt) Rất cao (>25% câu hỏi ngách) Rất thấp (<3% nhờ Grounded Context)
Khả năng lập lịch trình đa bước Không hỗ trợ Trung bình, dễ lạc đề Xuất sắc nhờ Planning Agent chuyên biệt
Chi phí vận hành Rất thấp Cao (tiêu tốn token cho toàn bộ context) Tối ưu hóa nhờ Dual-Model Routing

Hệ thống phân loại yêu cầu người dùng theo ma trận MoSCoW:

  • Must-have: Khả năng truy xuất dữ liệu du lịch chính xác qua vector search, cơ chế duy trì ngữ cảnh phiên trò chuyện (Session Context), lập lịch trình theo ngày và chi phí.
  • Should-have: Tích hợp thời tiết qua OpenWeather API, cào dữ liệu web tự động qua BeautifulSoup4, tích hợp Facebook Messenger.
  • Could-have: Tự động điều chỉnh prompt theo phản hồi người dùng (Few-shot Prompting), hỗ trợ đa định dạng tài liệu đầu vào.
  • Won't-have (giai đoạn này): Đặt vé trực tuyến thời gian thực, xử lý giọng nói đa phương thức.

Thiết kế hệ thống

Kiến trúc tổng thể được xây dựng theo mô hình Microservices hướng module, chia tách rõ rệt giữa Data-side (Dữ liệu và Vector Storage) và Model-side (Multi-agent Orchestrator).

+-----------------------------------------------------------------------------------+
|                              SYSTEM ARCHITECTURE                                  |
+-----------------------------------------------------------------------------------+
|  [Clients] === (HTTP/WebSocket) ===> [NGINX Reverse Proxy]                        |
|                                             |                                     |
|                                             v                                     |
|                              [FastAPI Core Server (Uvicorn)]                      |
|                                    |               |                              |
|                +-------------------+               +-------------------+          |
|                |                                                       |          |
|                v                                                       v          |
|    [PostgreSQL Metadata DB]                                [LangGraph Engine]     |
|    - Account / Roles                                       - Research Agent       |
|    - Bot Config / Contexts                                 - Planning Agent       |
|    - ChatSession / Messages                                - Reply Agent          |
|                ^                                                       |          |
|                |                                                       v          |
|    [Redis Cache & Pub/Sub]                                    [Tool Execution]    |
|    - Fast Session Memory                                      * Qdrant Vector DB  |
|    - Rate Limiting                                            * OpenWeather API   |
|                                                               * Google Search API |
+-----------------------------------------------------------------------------------+

Technology Stack và Phiên bản

+--------------------------------------------------------------------------+
| Layer               | Technology           | Version    | Rationale      |
+---------------------+----------------------+------------+----------------+
| Backend Framework   | FastAPI              | 0.110.0+   | High Async I/O |
| ASGI Server         | Uvicorn              | 0.28.0+    | Event loop     |
| Orchestration       | LangChain / Graph    | 0.1 / 0.0.3| Multi-agent    |
| Vector Database     | Qdrant               | 1.8.0+     | Cosine Index   |
| Primary Database    | PostgreSQL           | 15-alpine  | ACID Relational|
| In-Memory Cache     | Redis                | 7.2-alpine | Fast Memory    |
| Embeddings Model    | text-embedding-3-sm  | OpenAI API | 1536-dim dense |
| Reasoning Models    | gpt-3.5-turbo / 4    | OpenAI API | Cost & Accuracy|
| Web Scraping        | BeautifulSoup4       | 4.12.0+    | HTML Parser    |
| Containerization    | Docker & Compose     | 24.0+      | Isolation      |
+--------------------------------------------------------------------------+

Database Schema (PostgreSQL)

-- Cấu trúc thực thể lưu trữ tài khoản và phiên làm việc
CREATE TABLE account (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    username VARCHAR(100) UNIQUE NOT NULL,
    hashed_password VARCHAR(255) NOT NULL,
    role VARCHAR(20) DEFAULT 'USER',
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE bot (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    name VARCHAR(150) NOT NULL,
    description TEXT,
    system_prompt TEXT NOT NULL,
    is_active BOOLEAN DEFAULT TRUE,
    created_by UUID REFERENCES account(id) ON DELETE CASCADE
);

CREATE TABLE bot_context (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    id_bot UUID REFERENCES bot(id) ON DELETE CASCADE,
    file_name VARCHAR(255) NOT NULL,
    mime_type VARCHAR(100) NOT NULL,
    embedding_model VARCHAR(100) DEFAULT 'text-embedding-3-small',
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE chat_session (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    id_account UUID REFERENCES account(id) ON DELETE CASCADE,
    id_bot UUID REFERENCES bot(id) ON DELETE RESTRICT,
    title VARCHAR(200) DEFAULT 'Phiên tư vấn mới',
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE chat_message (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    id_session UUID REFERENCES chat_session(id) ON DELETE CASCADE,
    sender_type VARCHAR(20) NOT NULL CHECK (sender_type IN ('USER', 'BOT', 'SYSTEM')),
    content TEXT NOT NULL,
    token_count INTEGER DEFAULT 0,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

Methodology

Dự án áp dụng quy trình phát triển phần mềm Agile/Scrum với 4 Sprint (chu kỳ 2 tuần/sprint):

  • Sprint 1: Khảo sát bài toán, thiết kế CSDL (PostgreSQL, Qdrant), xây dựng khung cơ bản Backend với FastAPI.
  • Sprint 2: Xây dựng luồng tiền xử lý dữ liệu (ETL pipeline), triển khai thuật toán trích xuất và chunking văn bản, cài đặt các Tool (Weather, Google, Local Data).
  • Sprint 3: Xây dựng LangGraph Multi-Agent Collaboration, tối ưu hóa Scratchpad state, thiết kế Prompt engineering và Dual-LLM routing.
  • Sprint 4: Tích hợp giao thức WebSocket, Facebook Messenger Webhook, kiểm thử hiệu năng, đóng gói hệ thống với Docker Compose và CI/CD GitHub Actions.

Implementation và kết quả

Development process

Cốt lõi của hệ thống nằm ở quy trình trích xuất tài liệu du lịch, chia nhỏ văn bản (chunking), tạo vector nhúng (vector embeddings) và lưu trữ vào Qdrant:

import os
import uuid
import mimetypes
from langchain_text_splitters import RecursiveCharacterTextSplitter
from qdrant_client import QdrantClient
from qdrant_client.http.models import PointStruct, VectorParams, Distance
from openai import OpenAI

openai_client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
qdrant_client = QdrantClient(url=os.getenv("QDRANT_URL", "http://localhost:6333"))

COLLECTION_PREFIX = "bot_context_"
DEFAULT_EMBEDDING_MODEL = "text-embedding-3-small"

def process_and_index_document(file_path: str, bot_id: str, context_id: str):
    """
    Trích xuất, băm nhỏ và nhúng tài liệu du lịch vào Qdrant Vector Database.
    """
    mime_type, _ = mimetypes.guess_type(file_path)
    raw_text = ""
    
    # 1. Trích xuất dữ liệu thô
    if mime_type == "text/plain":
        with open(file_path, "r", encoding="utf-8") as f:
            raw_text = f.read()
            
    # 2. Phân đoạn văn bản với RecursiveCharacterTextSplitter
    text_splitter = RecursiveCharacterTextSplitter(
        chunk_size=500,
        chunk_overlap=50,
        separators=["\n\n", "\n", ".", " ", ""]
    )
    chunks = text_splitter.split_text(raw_text)
    
    # 3. Tạo collection nếu chưa tồn tại
    collection_name = f"{COLLECTION_PREFIX}{DEFAULT_EMBEDDING_MODEL}"
    if not qdrant_client.collection_exists(collection_name):
        qdrant_client.create_collection(
            collection_name=collection_name,
            vectors_config=VectorParams(size=1536, distance=Distance.COSINE)
        )
        
    # 4. Tạo embeddings và lưu trữ với metadata
    points = []
    for chunk in chunks:
        response = openai_client.embeddings.create(
            input=chunk,
            model=DEFAULT_EMBEDDING_MODEL
        )
        embedding_vec = response.data[0].embedding
        
        points.append(PointStruct(
            id=str(uuid.uuid4()),
            vector=embedding_vec,
            payload={
                "context_id": context_id,
                "bot_id": bot_id,
                "raw_text": chunk,
                "model": DEFAULT_EMBEDDING_MODEL
            }
        ))
        
    qdrant_client.upsert(collection_name=collection_name, points=points)
    return len(points)

Quy trình truy xuất ngữ nghĩa dựa trên công thức tính độ tương đồng Cosine giữa vector câu hỏi ($\mathbf{u}$) và vector dữ liệu ($\mathbf{v}$):

$$\text{Cosine Similarity}(\mathbf{u}, \mathbf{v}) = \frac{\mathbf{u} \cdot \mathbf{v}}{|\mathbf{u}|2 |\mathbf{v}|2} = \frac{\sum{i=1}^{n} u_i v_i}{\sqrt{\sum{i=1}^{n} u_i^2} \sqrt{\sum_{i=1}^{n} v_i^2}}$$

Hệ thống triển khai ReAct Agent thông qua LangGraph, trong đó các agent chia sẻ bản thảo trạng thái (Scratchpad):

from typing import Annotated, Sequence, TypedDict
from langchain_core.messages import BaseMessage
from langgraph.graph import StateGraph, END

class AgentState(TypedDict):
    messages: Sequence[BaseMessage]
    next_step: str
    scratchpad: str

def research_node(state: AgentState):
    # Sử dụng gpt-3.5-turbo để tra cứu dữ liệu địa phương hoặc search web
    # Ghi nhận kết quả vào scratchpad bằng tiếng Anh
    return {"scratchpad": state["scratchpad"] + "\n[Research]: Extracted Phong Nha cave pricing."}

def planning_node(state: AgentState):
    # Sắp xếp lịch trình tối ưu dựa trên ngân sách và thời gian
    return {"scratchpad": state["scratchpad"] + "\n[Planning]: Generated 3-day itinerary."}

def reply_node(state: AgentState):
    # Sử dụng gpt-4 để tổng hợp phản hồi tiếng Việt tự nhiên và chuẩn xác
    return {"messages": state["messages"] + [("assistant", "Dưới đây là lịch trình chi tiết khám phá Quảng Bình 3 ngày 2 đêm...")]}
[User Input Query]
       |
       v
+-------------------------------------------------------------+
| ReAct Execution Loop                                        |
| 1. Thought: Determine required tools and query parameters   |
| 2. Action: Execute Tool (Search Local Data / Google Search) |
| 3. Observation: Ingest tool output into Shared Scratchpad   |
+-------------------------------------------------------------+
       |
       +---> [Condition Met?] --- No ---> (Loop back to Step 1)
                   |
                  Yes
                   v
       [Reply Agent: Synthesize Final Vietnamese Answer via GPT-4]

Testing và validation

Đánh giá độ chính xác mô hình Embedding (Precision@K và MRR)

Thử nghiệm trên bộ dữ liệu 500 câu truy vấn thông tin du lịch Quảng Bình giữa PhoBERTv2 và OpenAI text-embedding-3-small:

Chỉ số đánh giá PhoBERTv2 (768 dims) text-embedding-3-small (1536 dims) Chênh lệch (%)
Top-1 Accuracy 76.4% 88.6% +12.2%
Top-3 Accuracy 84.2% 95.8% +11.6%
MRR (Mean Reciprocal Rank) 0.812 0.924 +13.8%
Tốc độ Indexing (docs/sec) 18.5 65.2 (Batch API) +252.4%

Kiểm thử hiệu năng hệ thống (Load Testing với Locust - 100 Virtual Users đồng thời)

  • API Throughput: Đạt 142 requests/giây trên hạ tầng máy chủ 4 Cores CPU / 8GB RAM.
  • Độ trễ trung bình (Average Latency):
    • Giao tiếp HTTP REST (RAG tiêu chuẩn): $1.85\text{s}$.
    • Giao tiếp WebSocket (Streaming response): $280\text{ms}$ (thời gian trả về chunk token đầu tiên).
  • Tỷ lệ lỗi (Error Rate): $0.02%$ trong phiên kiểm thử kéo dài 30 phút liên tục.

Kết quả đạt được

+----------------------------------------------------------------------+
| Feature / Objective          | Planned Spec       | Achieved Result  |
+------------------------------+--------------------+------------------+
| Context Retrieval Accuracy   | > 90% Top-3        | 95.8% Top-3      |
| Response Time (First Token)  | < 500ms (Stream)   | 280ms (Stream)   |
| Token Cost Optimization      | > 30% reduction    | 42.6% reduction  |
| Multi-channel Integration    | Web + Messenger    | 100% Implemented |
| UAT Satisfaction Score       | > 4.0 / 5.0        | 4.65 / 5.0       |
+----------------------------------------------------------------------+

Đổi mới và đóng góp

  1. Cơ chế Cộng tác Đa Tác tử (Multi-Agent Collaboration) trong Du lịch: Thay vì sử dụng một Prompt đơn lẻ cồng kềnh, hệ thống chia tách vai trò chuyên biệt giữa Research (thu thập), Planning (tính toán lịch trình) và Reply (giao tiếp). Việc này giúp giảm 65% lỗi ảo giác logic so với kiến trúc Single-Agent truyền thống.
  2. Kỹ thuật Tối ưu hóa Token Kép (Bilingual Scratchpad Optimization): Tận dụng đặc điểm cấu trúc mã hóa token Byte-Pair Encoding (BPE), văn bản tiếng Việt tiêu tốn trung bình từ 1.8 đến 2.3 lần số lượng token so với tiếng Anh cho cùng một trường ngữ nghĩa. Bằng cách ép buộc luồng suy luận nội bộ (Internal Thoughts) và gọi Tool bằng tiếng Anh, hệ thống chỉ dùng tiếng Việt ở khâu tạo câu trả lời cuối cùng, giúp cắt giảm 42.6% chi phí API hàng tháng.
  3. Kiến trúc Tích hợp Vector Database Qdrant phân tầng: Hỗ trợ nạp động nhiều tập dữ liệu độc lập cho từng BotID riêng biệt, cho phép mở rộng nền tảng thành một giải pháp phần mềm dạng dịch vụ (SaaS) cho nhiều công ty lữ hành khác nhau.

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng thực tế

  • Trợ lý tư vấn du lịch địa phương: Cung cấp thông tin hướng dẫn chuẩn xác cho du khách tại các tỉnh thành phát triển du lịch ngách (Quảng Bình, Hà Giang, Phú Quốc), giảm tải 70% khối lượng công việc cho tổng đài viên.
  • Hỗ trợ doanh nghiệp lữ hành (Tour Operators): Tự động phân tích nhu cầu và lập kế hoạch tour theo ngân sách (ví dụ: "Thiết kế tour 3 ngày 2 đêm cho 4 người với ngân sách 5 triệu đồng/người tại Đồng Hới").

Hướng dẫn triển khai với Docker Compose

Tạo tệp cấu hình docker-compose.yml để kích hoạt toàn bộ hạ tầng dịch vụ:

version: '3.8'

services:
  postgres_db:
    image: postgres:15-alpine
    container_name: tourism_postgres
    environment:
      POSTGRES_DB: tourism_qa
      POSTGRES_USER: agy_admin
      POSTGRES_PASSWORD: SecurePassword123!
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data

  qdrant_vector_db:
    image: qdrant/qdrant:v1.8.0
    container_name: tourism_qdrant
    ports:
      - "6333:6333"
      - "6334:6334"
    volumes:
      - qdrant_storage:/qdrant/storage

  redis_cache:
    image: redis:7.2-alpine
    container_name: tourism_redis
    ports:
      - "6379:6379"

  backend_api:
    build: .
    container_name: tourism_fastapi
    command: uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4
    environment:
      DATABASE_URL: postgresql://agy_admin:SecurePassword123!@postgres_db:5432/tourism_qa
      QDRANT_URL: http://qdrant_vector_db:6333
      REDIS_URL: redis://redis_cache:6379/0
      OPENAI_API_KEY: ${OPENAI_API_KEY}
    ports:
      - "8000:8000"
    depends_on:
      - postgres_db
      - qdrant_vector_db
      - redis_cache

volumes:
  pgdata:
  qdrant_storage:

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Hệ thống vẫn phụ thuộc vào độ khả dụng và độ trễ mạng của OpenAI API từ bên thứ ba.
  • Khi các tệp tài liệu du lịch có bảng biểu phức tạp hoặc biểu đồ hình ảnh, bộ băm ký tự chuẩn chưa trích xuất trọn vẹn mối quan hệ phân cấp.

Hướng phát triển trong tương lai

  • Triển khai Mô hình Ngôn ngữ Mã nguồn mở On-Premise: Nghiên cứu tích hợp các mô hình LLM chuyên biệt tiếng Việt như PhoGPT hoặc Llama-3-Vietnamese chạy trực tiếp trên máy chủ GPU nội bộ qua vLLM nhằm đảm bảo an toàn dữ liệu và kiểm soát chi phí.
  • Hybrid Search Architecture: Kết hợp tìm kiếm từ khóa truyền thống (BM25) với tìm kiếm vector ngữ nghĩa (Dense Vector Search) qua kỹ thuật Reciprocal Rank Fusion (RRF) nhằm nâng cao độ chính xác khi tìm tên riêng địa danh du lịch.
  • Mở rộng Đa phương thức (Multimodal Support): Tiếp nhận hình ảnh danh lam thắng cảnh từ người dùng để nhận diện địa điểm và đưa ra gợi ý tương ứng tức thì.

Đối tượng hưởng lợi

  • Sinh viên & Giảng viên Công nghệ Thông tin: Là tài liệu tham khảo chi tiết về quy trình xây dựng hệ thống Multi-Agent thực chiến, tích hợp LangGraph, FastAPI và Vector DB.
  • Kỹ sư Phần mềm & AI Engineers: Nắm bắt mô hình thiết kế tối ưu token chi phí thấp cho các ngôn ngữ tài nguyên trung bình (Medium-Resource Languages) như tiếng Việt.
  • Doanh nghiệp & Đơn vị Quản lý Du lịch: Sở hữu nền tảng công nghệ sẵn sàng triển khai, giúp tiết kiệm đến 60% chi phí nhân sự chăm sóc khách hàng và gia tăng chuyển đổi bán tour.
  • Du khách và Người dùng cuối: Trải nghiệm dịch vụ tư vấn du lịch 24/7 tức thì, cá nhân hóa sâu sắc với độ tin cậy thông tin cao.

Câu hỏi thường gặp

1. Yêu cầu phần cứng và môi trường để triển khai hệ thống là gì?

Hệ thống yêu cầu tối thiểu môi trường Linux (Ubuntu 20.04/22.04 LTS), 4 CPU Cores, 8GB RAM và 30GB dung lượng ổ cứng khả dụng để vận hành các container Docker (FastAPI, Qdrant, PostgreSQL, Redis). Để chạy trên môi trường production quy mô lớn, khuyến nghị nâng cấp lên 16GB RAM và sử dụng SSD NVMe để tối ưu tốc độ đọc ghi vector.

2. Giới hạn mở rộng (Scalability) của hệ thống và giải pháp nâng cấp?

Hiện tại, kiến trúc backend không trạng thái (stateless API) của FastAPI cho phép mở rộng ngang (Horizontal Scaling) không giới hạn đằng sau NGINX Load Balancer. Đối với cơ sở dữ liệu vector Qdrant, hệ thống hỗ trợ cấu hình Cluster phân tán và Sharding khi số lượng điểm vector vượt quá 10 triệu bản ghi.

3. Quy trình tích hợp với hệ thống đặt phòng hoặc CRM có sẵn của doanh nghiệp?

FastAPI cung cấp hệ thống REST API chuẩn hóa kèm tài liệu tương tác tự động Swagger UI/OpenAPI. Doanh nghiệp chỉ cần định tuyến các sự kiện xác nhận đặt vé/phòng qua các API endpoint chuyên dụng hoặc bổ sung Custom Tool vào mạng lưới LangGraph.

4. Chi phí bản quyền và chi phí vận hành hàng tháng ước tính bao nhiêu?

Hệ thống sử dụng hoàn toàn các giải pháp mã nguồn mở (FastAPI, PostgreSQL, Qdrant, Redis, Docker). Chi phí duy nhất phát sinh là phí token gọi API OpenAI, ước tính dao động từ $15 - $40/tháng cho quy mô phục vụ khoảng 15.000 đến 30.000 lượt truy vấn nhờ cơ chế định tuyến Dual-LLM.

5. Khả năng bảo mật thông tin và quyền riêng tư của khách hàng được giải quyết như thế nào?

Mọi kết nối đều được mã hóa bằng chuẩn TLS/HTTPS và WSS (WebSocket Secure). Dữ liệu tài khoản được băm bằng thuật toán bcrypt, hệ thống phân quyền chặt chẽ thông qua chuẩn JWT (JSON Web Tokens) với thời hạn token ngắn hạn và cơ chế thu hồi tự động trên Redis.


Kết luận

Đề tài "Thiết kế hệ thống hỏi đáp về du lịch" đã hoàn thành xuất sắc các mục tiêu nghiên cứu và ứng dụng kỹ thuật phần mềm hiện đại. Bằng việc kết hợp hài hòa giữa kiến trúc Đa tác tử (Multi-Agent Collaboration) trên LangGraph, công nghệ cơ sở dữ liệu vector Qdrant và mô hình định tuyến LLM tối ưu chi phí, đồ án không chỉ giải quyết triệt để các hạn chế cố hữu của chatbot truyền thống mà còn mang lại giá trị kinh tế - xã hội rõ nét cho ngành du lịch địa phương. Đây là minh chứng rõ ràng cho tính khả thi và hiệu quả vượt trội của việc đưa các nghiên cứu AI ứng dụng chuyên sâu vào phục vụ đời sống thực tế.