Hugging Face in Python (Phần 2)
Haha, bạn "bắt bài" nhanh quá! Đã hứa ở cuối bài trước là làm, chào mừng bạn đến với Phần 2 của series hướng dẫn.
Ở bài trước, chúng ta đã nắm lý thuyết và chạy thử vài đoạn code cơ bản. Hôm nay, chúng ta sẽ làm một dự án thực tế 100%: Tự tay xây dựng một con Chatbot hiểu tiếng Việt, có giao diện nhắn tin (UI) đàng hoàng, chạy ngay trên máy tính của bạn!
Bạn có thể đăng bài này thành phần tiếp theo trên blog của mình nhé.
🚀 Hugging Face Thực Chiến (Phần 2)
Bạn đã chán việc phải phụ thuộc vào ChatGPT hay Claude? Bạn muốn sở hữu một "trợ lý ảo" của riêng mình, chạy hoàn toàn offline trên máy tính và không bao giờ lo bị rò rỉ dữ liệu?
Hôm nay, chúng ta sẽ dùng hệ sinh thái Hugging Face để tự "nặn" ra một con chatbot tiếng Việt chỉ với khoảng 20 dòng code Python. Bắt đầu thôi!
Bước 1: Chọn "Bộ Não" (Model) Phù Hợp
Để làm chatbot, chúng ta cần một mô hình ngôn ngữ lớn (LLM) thuộc dạng Instruct hoặc Chat (nghĩa là đã được dạy cách đối đáp như con người).
Vì máy tính cá nhân thường không có dung lượng RAM khổng lồ, mình sẽ chọn một "siêu nhí" cực kỳ thông minh: Qwen2.5-1.5B-Instruct.
- Tại sao lại chọn nó? Nó chỉ nặng khoảng 3GB (vừa vặn với hầu hết laptop hiện nay), nhưng khả năng suy luận và nói tiếng Việt lại cực kỳ đáng nể.
Bước 2: Viết Code Lõi (Backend)
Hãy tạo một file Python (ví dụ: my_chatbot.py) và bắt đầu viết phần hồn cho chatbot. Chúng ta sẽ dùng tính năng chat_template của Hugging Face – tính năng này tự động định dạng câu chat của bạn thành chuẩn mà AI hiểu được.
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# 1. Khai báo tên mô hình
model_id = "Qwen/Qwen2.5-1.5B-Instruct"
print("Đang tải bộ não AI về máy (chỉ lần đầu tiên mất thời gian)...")
# 2. Tải Tokenizer và Model
tokenizer = AutoTokenizer.from_pretrained(model_id)
# device_map="auto" giúp AI tự động nhận diện dùng CPU hay Card màn hình (GPU)
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", torch_dtype=torch.float16)
# 3. Tạo một hàm nhắn tin
def chat_with_ai(user_message):
# Cấu trúc tin nhắn: System (Định hình tính cách), User (Người dùng hỏi)
messages = [
{"role": "system", "content": "Bạn là một trợ lý ảo thông minh, thân thiện và luôn trả lời bằng tiếng Việt."},
{"role": "user", "content": user_message}
]
# Chuyển đổi tin nhắn thành định dạng AI hiểu (Chat Template)
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer([text], return_tensors="pt").to(model.device)
# Sinh câu trả lời
outputs = model.generate(
**inputs,
max_new_tokens=512, # Độ dài câu trả lời
temperature=0.7 # Độ sáng tạo
)
# Cắt bỏ phần câu hỏi, chỉ lấy câu trả lời của AI
response_ids = outputs[0][len(inputs.input_ids[0]):]
response = tokenizer.decode(response_ids, skip_special_tokens=True)
return response
# Chạy thử không cần giao diện
# print(chat_with_ai("Hãy viết một đoạn văn ngắn giới thiệu về món Phở Việt Nam."))
Bước 3: Mặc "Áo Quần" Cho Chatbot (Tạo UI)
Chạy code trên màn hình đen (Terminal) thì khá nhàm chán. Hãy dùng thư viện Gradio của Hugging Face để tạo một khung chat giống hệt ChatGPT.
Mở terminal và cài đặt Gradio:
pip install gradio
Sau đó, thêm đoạn code này vào cuối file my_chatbot.py của bạn:
import gradio as gr
# Khởi tạo giao diện chat của Gradio, kết nối với hàm chat_with_ai ở trên
demo = gr.ChatInterface(
fn=chat_with_ai,
title="🤖 Chatbot Tiếng Việt Dùng Trí Tuệ Nhân Tạo Chạy Cục Bộ",
description="Đây là trợ lý ảo được xây dựng bằng Hugging Face và Qwen2.5. Dữ liệu hoàn toàn riêng tư!",
theme="soft"
)
# Khởi chạy trang web!
print("Đang khởi động giao diện web...")
demo.launch()
Bước 4: Tận Hưởng Thành Quả!
Mở Terminal lên và chạy lệnh:
python my_chatbot.py
Sau khi model tải xong, Terminal sẽ hiển thị một đường link dạng http://127.0.0.1:7860. Hãy copy link này dán vào trình duyệt web của bạn (Chrome, Safari...).
Bùm! 💥 Bạn đã có một khung chat tuyệt đẹp. Thử gõ: "Phân tích cho tôi điểm mạnh và điểm yếu của ngôn ngữ Python" và xem "đứa con tinh thần" của bạn múa phím nhé!
🔥 Bài tập thực hành cho bạn:
Bạn có để ý dòng code {"role": "system", "content": "Bạn là một trợ lý..."} không? Đây gọi là System Prompt. Hãy thử đổi nó thành: "Bạn là một tên cướp biển hung dữ, luôn kết thúc câu bằng từ Arrrr" và xem Chatbot của bạn "biến hình" như thế nào nhé!
Bây giờ con chatbot này đang chạy trên máy tính của riêng bạn (localhost). Bạn có muốn mình hướng dẫn cách đóng gói nó lại và đẩy lên Hugging Face Spaces để lấy một đường link public, tha hồ gửi cho bạn bè dùng thử trên điện thoại của họ không?
All rights reserved