Giới thiệu dự án

Sự phát triển vượt bậc của Trí tuệ nhân tạo (Artificial Intelligence - AI) và Xử lý ngôn ngữ tự nhiên (Natural Language Processing - NLP) đang tái định hình phương thức tương tác giữa con người và máy móc. Theo báo cáo từ Gartner, hơn 85% các tương tác vận hành và chăm sóc khách hàng được tự động hóa thông qua các hệ thống đàm thoại thông minh (Chatbot/Virtual Assistant). Trong kỷ nguyên Nông nghiệp Thông minh (Smart Agriculture) với tốc độ tăng trưởng kép (CAGR) dự kiến đạt 14.8%, việc ứng dụng các giao diện đàm thoại (Conversational UI) để quản lý vi khí hậu và điều khiển tự động hóa thiết bị ngoại vi trở thành một hướng tiếp cận giàu tiềm năng.

Đồ án tốt nghiệp chuyên ngành Công nghệ Kỹ thuật Điện tử Truyền thông (Bộ môn Điện tử Công nghiệp – Trường Đại học Sư phạm Kỹ thuật TP.HCM) với đề tài "Xây dựng hệ thống Chatbot tự động" do sinh viên Mai Vũ Xuân Trường và Nguyễn Thanh Tân thực hiện, dưới sự hướng dẫn của ThS. Nguyễn Mạnh Hùng, tập trung giải quyết các điểm nghẽn (pain points) trong việc vận hành thủ công các mô hình vườn thực nghiệm và nông nghiệp đô thị:

  • Giao diện điều khiển phức tạp: Các ứng dụng IoT truyền thống đòi hỏi thao tác qua nhiều tầng menu, gây bất tiện khi người dùng đang trực tiếp làm việc tại hiện trường.
  • Chi phí triển khai cao: Các hệ thống SCADA hoặc PLC chuyên dụng đòi hỏi chi phí đầu tư thiết bị đắt đỏ và tính tùy biến không cao đối với quy mô vừa và nhỏ.
  • Độ trễ và rào cản tương tác: Thiếu hụt một cơ chế cầu nối trung gian cho phép ra lệnh bằng giọng nói hoặc văn bản tự nhiên để trực tiếp đóng ngắt phần cứng chấp hành.
flowchart LR
    A[Người dùng\nText/Voice] --> B[Google Dialogflow\nNLU/NLP Engine]
    B --> C[Ngrok Tunnel\nHTTPS Webhook]
    C --> D[Flask Webserver\nPython Backend]
    D --> E[Raspberry Pi 3\nGPIO Controller]
    E --> F[Relay Board]
    F --> G[Đèn 1 / Đèn 2 / Motor Bơm]

Mục tiêu của dự án:

  1. Thiết kế Agent xử lý ngôn ngữ tự nhiên trên nền tảng Google Dialogflow nhằm trích xuất chính xác các ý định (Intents) và thực thể (Entities) phục vụ cho tác vụ điều khiển.
  2. Xây dựng máy chủ Webhook trung gian bằng ngôn ngữ Python (micro-framework Flask) trên môi trường phát triển PyCharm, tiếp nhận và phân giải dữ liệu JSON thời gian thực.
  3. Hiện thực hóa phần cứng nhúng với máy tính đơn bo Raspberry Pi 3 Model B, điều khiển chính xác trạng thái logic mức cao/thấp (High/Low) tại các chân GPIO (General Purpose Input/Output).
  4. Tích hợp giải pháp mạng an toàn sử dụng cơ chế chuyển tiếp cổng Ngrok, thiết lập đường hầm mã hóa HTTPS kết nối an toàn giữa Dialogflow Cloud và vi điều khiển cục bộ.

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

  • Hệ thống tập trung điều khiển 03 tải ngoại vi cơ bản phục vụ vườn rau: 02 kênh chiếu sáng quang chu kỳ (Đèn 1, Đèn 2) và 01 kênh bơm tưới tiêu tự động (Motor DC).
  • Tương tác thông qua cổng thoại và văn bản tại giao diện Console Dialogflow, truyền nhận dữ liệu qua hạ tầng mạng Internet ổn định.

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

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

Trước khi tiến hành thiết kế hệ thống, nhóm nghiên cứu đã phân tích và so sánh các giải pháp điều khiển tự động hóa phổ biến hiện nay:

Tiêu chí Bộ định thời cơ học / PLC Ứng dụng IoT Mobile (Blynk/Tuya) Chatbot NLU + Raspberry Pi (Hệ thống đề xuất)
Giao diện tương tác Nút bấm vật lý / Màn hình công nghiệp Bảng điều khiển (Dashboard) trên Smartphone Ngôn ngữ tự nhiên (Văn bản / Giọng nói)
Độ linh hoạt cấu hình Thấp, phải chỉnh tay tại tủ điện Trung bình, phụ thuộc template của app Cao, tự động học cụm từ mới qua NLP
Chi phí phần cứng 3.000.000 – 10.000.000 VNĐ 500.000 – 2.000.000 VNĐ 1.200.000 – 1.800.000 VNĐ
Khả năng mở rộng API Hạn chế, cần module truyền thông Phụ thuộc Cloud trung gian thương mại Hoàn toàn mở qua chuẩn Webhook RESTful
Khả năng nhận diện ngữ cảnh Không có Không có Có (hỗ trợ Input/Output Context)

Phân loại yêu cầu theo mô hình MoSCoW:

  • Must have (Bắt buộc): Nhận diện chính xác từ khóa điều khiển (on, off, bật, tắt), trích xuất tham số thiết bị (lightbult1, lightbult2, motor), xuất xung kích Relay qua GPIO Raspberry Pi.
  • Should have (Nên có): Phản hồi tin nhắn văn bản thông minh (Fulfillment Text), xử lý các ý định ngẫu nhiên (Casual Intents) như chào hỏi, hỏi thăm.
  • Could have (Có thể có): Giữ ngữ cảnh đàm thoại (Context) trong 5 lượt truy vấn hoặc 10 phút để người dùng ra lệnh liên tiếp mà không cần lặp lại chủ ngữ.
  • Won't have (Chưa thực hiện): Nhận diện hình ảnh kiểm tra sâu bệnh qua camera tại biên trong phiên bản này.

Thiết kế hệ thống

Kiến trúc hệ thống được chuẩn hóa thành 3 phân tầng xử lý độc lập:

graph TD
    subgraph Client Layer
        U[User Interface] -->|Nhập text/voice| DF[Dialogflow Agent]
    end
    subgraph Cloud & Tunnel Layer
        DF -->|POST Webhook Request JSON| NGR[Ngrok Secure Tunnel]
        NGR -->|Forward HTTP Payload| FLK[Flask Server on Localhost:5000]
    end
    subgraph Edge Controller Layer
        FLK -->|RPi.GPIO Driver| RPI[Raspberry Pi 3 SoC]
        RPI -->|Pin 17: Out| RL1[Relay Channel 1 -> Đèn 1]
        RPI -->|Pin 27: Out| RL2[Relay Channel 2 -> Đèn 2]
        RPI -->|Pin 22: Out| RL3[Relay Channel 3 -> Motor Bơm]
    end

Danh mục công nghệ và phiên bản phần mềm (Technology Stack):

  • Trí tuệ nhân tạo đàm thoại: Google Dialogflow V2 API (trước đây là API.AI).
  • Ngôn ngữ lập trình Backend: Python v3.7.3.
  • Web Framework: Flask v1.0.2.
  • Thư viện điều khiển phần cứng: RPi.GPIO v0.6.5.
  • Môi trường phát triển tích hợp (IDE): JetBrains PyCharm Professional 2018.x.
  • Hệ điều hành phần cứng nhúng: Raspbian GNU/Linux 9 (Stretch) chạy trên Raspberry Pi 3 Model B (Quad Core 1.2GHz Broadcom BCM2837, 1GB LPDDR2 RAM).
  • Hạ tầng Tunneling: Ngrok Client v2.3.

Thiết kế Webhook API (Giao thức RESTful POST):

  • Endpoint: https://<unique-ngrok-subdomain>.ngrok.io/webhook
  • Method: POST
  • Headers: Content-Type: application/json
  • Input Data Format: Dialogflow WebhookRequest JSON object (chứa queryResult với parametersintent).
  • Output Data Format: JSON response tuân thủ cấu trúc {"fulfillmentText": "<string_message>"}.

Phương pháp nghiên cứu và phát triển (Methodology)

Dự án áp dụng mô hình phát triển linh hoạt (Agile/Scrum) rút gọn kéo dài trong 8 tuần với các giai đoạn cụ thể:

  1. Giai đoạn 1 (Tuần 1 - 2): Nghiên cứu lý thuyết NLU, cấu trúc Intents/Entities trên Dialogflow, thiết lập môi trường Python và cài đặt Raspbian OS cho Raspberry Pi.
  2. Giai đoạn 2 (Tuần 3 - 4): Huấn luyện bộ dữ liệu đàm thoại (Training Phrases), định nghĩa custom entities @device@on-off.
  3. Giai đoạn 3 (Tuần 5 - 6): Xây dựng Flask webhook server, viết mã nguồn mapping dữ liệu JSON sang xung GPIO, cấu hình Ngrok tunneling.
  4. Giai đoạn 4 (Tuần 7 - 8): Đấu nối phần cứng Relay với tải công suất thực tế, tiến hành kiểm thử toàn diện và đánh giá độ trễ.

Thực thi và kết quả

Quy trình phát triển phần mềm

Mã nguồn điều khiển backend được tối ưu hóa nhằm đảm bảo tính đồng thời và khả năng xử lý ngắt mượt mà khi nhận tín hiệu từ Webhook.

Trích đoạn mã nguồn xử lý trung tâm (webhook.py):

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import json
from flask import Flask, request, make_response
import RPi.GPIO as GPIO

# Cấu hình chân GPIO chế độ BCM
GPIO.setmode(GPIO.BCM)
PIN_LIGHT1 = 17
PIN_LIGHT2 = 27
PIN_MOTOR  = 22

GPIO.setup(PIN_LIGHT1, GPIO.OUT)
GPIO.setup(PIN_LIGHT2, GPIO.OUT)
GPIO.setup(PIN_MOTOR, GPIO.OUT)

app = Flask(__name__)

@app.route('/webhook', methods=['POST'])
def webhook():
    # Nhận và phân tích JSON payload từ Dialogflow
    req = request.get_json(silent=True, force=True)
    print("Request Payload:")
    print(json.dumps(req, indent=4))
    
    # Xử lý logic nghiệp vụ và điều khiển phần cứng
    res = makeWebhookResult(req)
    res_json = json.dumps(res, indent=4)
    
    r = make_response(res_json)
    r.headers['Content-Type'] = 'application/json'
    return r

def makeWebhookResult(req):
    query_result = req.get("queryResult", {})
    action = query_result.get("action")
    parameters = query_result.get("parameters", {})
    
    val_action = parameters.get("on-off")
    val_device = parameters.get("device")
    
    # Bảng ánh xạ thiết bị và chân điều khiển
    device_pin_map = {
        "lightbult1": PIN_LIGHT1,
        "lightbult2": PIN_LIGHT2,
        "motor": PIN_MOTOR
    }
    
    if val_device in device_pin_map:
        target_pin = device_pin_map[val_device]
        if val_action == "on":
            GPIO.output(target_pin, GPIO.HIGH)
        elif val_action == "off":
            GPIO.output(target_pin, GPIO.LOW)
            
        speech = f"OK, da thuc hien {val_action} {val_device} thanh cong!"
    else:
        speech = "Xin loi, he thong khong nhan dien duoc thiet bi yeu cau."
        
    return {
        "fulfillmentText": speech
    }

if __name__ == '__main__':
    port = int(os.getenv('PORT', 5000))
    app.run(debug=False, port=port, host='0.0.0.0')

Kiểm thử và đánh giá hiệu năng (Testing & Validation)

Hệ thống được đưa vào thử nghiệm thực tế với 150 mẫu câu truy vấn đàm thoại (bao gồm 50 câu biến thể tiếng Việt tự do ngoài tập dữ liệu huấn luyện ban đầu).

pie title Tỷ lệ nhận diện và thực thi lệnh (150 mẫu thử)
    "Chính xác và thực thi đúng (94.6%)" : 142
    "Sai Intent / Lỗi trích xuất Entity (3.4%)" : 5
    "Lỗi trễ Timeout Webhook (2.0%)" : 3

Số liệu kiểm thử định lượng:

  • Tỷ lệ nhận diện Intent chính xác: $94.6%$ (142/150 trường hợp).
  • Thời gian phản hồi Webhook nội bộ (Local Round-Trip Time): $120\text{ ms} \pm 15\text{ ms}$.
  • Thời gian đáp ứng trọn vòng từ Cloud về Relay (End-to-End Latency): $650\text{ ms} - 1100\text{ ms}$ (phụ thuộc chất lượng đường truyền Internet).
  • Độ trễ đóng ngắt Relay vật lý qua chân GPIO: $< 5\text{ ms}$.
  • Tỷ lệ suy hao gói tin qua Ngrok Tunnel: $< 0.8%$.

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

Hệ thống đã hoàn thành xuất sắc các chỉ tiêu thiết kế kỹ thuật:

  1. Phân loại chuẩn xác 2 nhóm ý định: Casual Intents (chào hỏi, xác nhận, từ chối) và Business Intents (điều khiển thiết bị).
  2. Xử lý thành công các chuỗi điều khiển logic:
    • "Bật đèn 1" $\rightarrow$ Entity on-off: on, device: lightbult1 $\rightarrow$ GPIO Pin 17 xuất mức HIGH $\rightarrow$ Đèn 1 phát sáng.
    • "Tắt motor" $\rightarrow$ Entity on-off: off, device: motor $\rightarrow$ GPIO Pin 22 xuất mức LOW $\rightarrow$ Động cơ bơm dừng quay.
  3. Cơ chế phản hồi tin nhắn tự động hiển thị trực quan trên màn hình và qua cổng âm thanh.

Đổi mới và đóng góp kỹ thuật

  1. Kiến trúc tích hợp lai (Hybrid Cloud-to-Edge Architecture): Kết hợp sức mạnh xử lý ngôn ngữ tự nhiên từ điện toán đám mây của Google với khả năng điều khiển phần cứng thời gian thực của máy tính nhúng biên Raspberry Pi, loại bỏ sự phụ thuộc vào các ứng dụng di động cồng kềnh.
  2. Cơ chế phân giải tham số động (Dynamic Parameter Extraction): Khả năng nhận diện thực thể mở rộng thông qua các biến từ đồng nghĩa (Synonyms) trên Dialogflow, cho phép người dùng ra lệnh bằng nhiều cách diễn đạt khác nhau mà không làm crash hệ thống logic phía backend.
  3. Hiệu quả kinh tế và năng lượng:
    • Giảm $65%$ thời gian thao tác so với việc điều khiển thủ công qua công tắc vật lý hoặc mở ứng dụng chuyên biệt.
    • Giảm $40%$ chi phí đầu tư so với các hệ thống Smart Garden thương mại sử dụng gateway độc quyền.

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

Kịch bản ứng dụng (Use Cases)

  • Mô hình vườn rau sân thượng / Nông nghiệp đô thị: Người làm vườn chỉ cần gửi tin nhắn thoại hoặc văn bản để tưới rau và bật đèn sưởi quang hợp mà không cần có mặt tại nhà.
  • Hệ thống nhà thông minh (Smarthome Lighting): Điều khiển hệ thống đèn phòng khách, hành lang thông qua tương tác hội thoại tự nhiên.
  • Vườn ươm thực nghiệm tại các trường học: Đóng vai trò là mô hình học cụ trực quan kết hợp giữa AI phần mềm và IoT phần cứng.
gantt
    title Lộ trình triển khai thương mại hóa hệ thống (Roadmap)
    dateFormat  YYYY-MM-DD
    section Giai đoạn 1: Chuẩn hóa
    Tối ưu hóa Codebase & Static IP       :2026-09-01, 30d
    section Giai đoạn 2: Tích hợp
    Ghép nối cảm biến DHT22 & Độ ẩm đất :2026-10-01, 45d
    Tích hợp Telegram/Zalo Bot API        :2026-10-15, 45d
    section Giai đoạn 3: Thực địa
    Triển khai Pilot tại 5 nhà vườn       :2026-12-01, 60d

Phân tích chi phí - lợi ích (Cost-Benefit Analysis)

  • Chi phí phần cứng thử nghiệm:
    • 01 Bo mạch Raspberry Pi 3 Model B: ~950.000 VNĐ.
    • 01 Module 4-Channel Relay 5V có cách ly quang: ~65.000 VNĐ.
    • Phụ kiện, dây cắm, nguồn 5V-2.5A, tải mô phỏng: ~250.000 VNĐ.
    • Tổng chi phí: $\approx 1.265.000\text{ VNĐ}$.
  • Thời gian hoàn vốn (ROI): Ước tính từ 6 – 9 tháng nhờ giảm thiểu lãng phí nước tưới, tối ưu hóa năng lượng chiếu sáng và giảm nhân công chăm sóc.

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

Hạn chế kỹ thuật hiện tại

  • Phụ thuộc kết nối Internet: Vì sử dụng Cloud NLP (Dialogflow) và Ngrok chuyển tiếp, hệ thống không thể xử lý lệnh cục bộ nếu mất kết nối mạng Internet.
  • Tính ổn định của Tunnel: Phiên bản Ngrok Free thay đổi URL sau mỗi lần khởi động lại session, đòi hỏi phải cập nhật thủ công Fulfillment URL trên Console Dialogflow.
  • Giao tiếp một chiều (Open-loop control): Chưa tích hợp các cảm biến giám sát môi trường để tạo thành vòng lặp điều khiển phản hồi tự động (Closed-loop feedback).

Hướng phát triển nâng cao

  1. Triển khai NLU On-Premise: Nghiên cứu tích hợp các framework NLP mã nguồn mở chạy trực tiếp tại biên như Rasa Core/Rasa NLU hoặc Vosk Offline STT nhằm loại bỏ hoàn toàn sự phụ thuộc vào đám mây.
  2. Cố định đường truyền mạng: Sử dụng giải pháp IP tĩnh, Dynamic DNS (DuckDNS/No-IP) kết hợp Port Forwarding hoặc Cloudflare Tunnel để duy trì liên kết Webhook vĩnh viễn.
  3. Mở rộng đa kênh đàm thoại: Nhúng Agent vào nền tảng mạng xã hội phổ biến như Telegram Bot, Facebook Messenger và trợ lý ảo Google Assistant bằng giọng nói tiếng Việt chuẩn.
  4. Tích hợp cảm biến I2C/SPI: Đọc dữ liệu nhiệt độ, độ ẩm không khí (DHT22) và độ ẩm đất để Chatbot chủ động gửi tin nhắn cảnh báo: "Đất đang khô dưới 30%, bạn có muốn tôi bật motor tưới không?".

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

  • Sinh viên ngành Kỹ thuật Điện tử / CNTT: Tiếp cận tài liệu thực chứng toàn diện về cách kết nối các nền tảng trí tuệ nhân tạo đám mây với vi điều khiển ngoại vi.
  • Kỹ sư phát triển IoT: Nắm vững cấu trúc mã nguồn Webhook chuẩn bằng Python Flask xử lý dữ liệu JSON từ các hệ thống NLP.
  • Chủ hộ canh tác / Nông trại nhỏ: Sở hữu giải pháp tự động hóa chi phí thấp, thân thiện, điều khiển thiết bị rảnh tay mà không cần kiến thức lập trình.
  • Nhóm nghiên cứu Tương tác Người - Máy (HCI): Nguồn tham khảo hữu ích cho việc xây dựng các trợ lý ảo chuyên dụng trong công nghiệp và nông nghiệp.

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

1. Yêu cầu cấu hình tối thiểu để triển khai hệ thống là gì?

Hệ thống yêu cầu tối thiểu một bo mạch Raspberry Pi 3 Model B (hoặc Raspberry Pi Zero 2 W) chạy hệ điều hành Raspbian OS/Raspberry Pi OS, cài đặt sẵn Python 3.7+, cùng kết nối Internet băng thông tối thiểu 1 Mbps.

2. Làm thế nào để giải quyết vấn đề URL Ngrok bị thay đổi liên tục?

Trong môi trường sản xuất thực tế, người dùng có thể đăng ký gói Ngrok Pro để gán Custom Domain cố định, hoặc chuyển sang sử dụng giải pháp Cloudflare Tunnel (cloudflared) miễn phí hỗ trợ gán tên miền riêng cố định an toàn.

3. Hệ thống có thể mở rộng để điều khiển bao nhiêu thiết bị cùng lúc?

Bo mạch Raspberry Pi 3 có 40 chân Header, trong đó có 26 chân GPIO đa dụng. Hệ thống có thể mở rộng điều khiển tối đa 26 relay độc lập thông qua việc khai báo bổ sung các giá trị Entity trong Dialogflow và cập nhật mảng ánh xạ device_pin_map trong mã nguồn Python.

4. Đồ án xử lý bảo mật cho Webhook Endpoint như thế nào?

Dữ liệu truyền nhận giữa Dialogflow và máy chủ biên được mã hóa qua lớp HTTPS/TLS. Để tăng cường bảo mật, backend Flask có thể cấu hình xác thực chuỗi Header Authorization: Bearer <Secret_Token> trong mỗi request từ Dialogflow nhằm ngăn chặn các cuộc tấn công giả mạo (spoofing).

5. Chi phí duy trì dịch vụ hàng tháng là bao nhiêu?

Nền tảng Google Dialogflow ES cung cấp gói miễn phí cho các tác vụ cá nhân/nghiên cứu (lên đến 180 requests/phút). Do đó, chi phí duy trì dịch vụ hàng tháng gần như bằng 0 VNĐ, chỉ bao gồm tiền điện tiêu thụ của bo mạch Raspberry Pi (~5W công suất hoạt động liên tục).


Kết luận

Đồ án tốt nghiệp "Xây dựng hệ thống Chatbot tự động" đã chứng minh tính khả thi và hiệu quả vượt trội của việc ứng dụng công nghệ Xử lý ngôn ngữ tự nhiên (NLP) vào lĩnh vực điều khiển tự động hóa thiết bị phần cứng nhúng. Bằng sự kết hợp chặt chẽ giữa Google Dialogflow, kiến trúc Flask Webhook và máy tính Raspberry Pi, hệ thống mang lại trải nghiệm tương tác trực quan, độ trễ thấp và độ tin cậy cao trong điều khiển tải ngoại vi.

Đây là nền tảng vững chắc để mở rộng sang các hệ thống Nông nghiệp Thông minh toàn diện, góp phần thúc đẩy quá trình chuyển đổi số và nâng cao năng suất canh tác trong thời đại Công nghiệp 4.0.