Hướng dẫn cách tự chế tạo trợ lý AI bằng Raspberry Pi

Hướng dẫn cách tự chế tạo trợ lý AI bằng Raspberry Pi

Bạn muốn một trợ lý giọng nói nhỏ gọn thực sự nghe lời bạn, chạy trên phần cứng của riêng bạn và sẽ không vô tình đặt mua mười hai quả dứa vì nghe nhầm? Tự chế tạo trợ lý AI với Raspberry Pi hoàn toàn khả thi, thú vị và linh hoạt. Bạn sẽ cần kết nối từ khóa kích hoạt, nhận dạng giọng nói (ASR = nhận dạng giọng nói tự động), bộ não xử lý ngôn ngữ tự nhiên (các quy tắc hoặc LLM) và chuyển văn bản thành giọng nói (TTS). Thêm một vài đoạn mã, một hoặc hai dịch vụ và một số tinh chỉnh âm thanh cẩn thận, và bạn đã có một loa thông minh bỏ túi tuân theo các quy tắc của bạn.

Hãy cùng nhau bắt đầu từ con số không và kết nối với Raspberry Pi mà không cần phải vò đầu bứt tóc như thường lệ. Chúng ta sẽ cùng tìm hiểu về linh kiện, thiết lập, mã lập trình, so sánh, những điều cần lưu ý... tất cả mọi thứ. 🌯

Những bài viết bạn có thể muốn đọc sau bài này:

🔗 Làm thế nào để học AI hiệu quả?
Lập kế hoạch học tập, thực hiện các dự án thực hành và theo dõi tiến độ.

🔗 Làm thế nào để bắt đầu một công ty trí tuệ nhân tạo?
Xác định vấn đề, xây dựng sản phẩm tối thiểu khả thi (MVP), tập hợp nhóm, tìm kiếm khách hàng đầu tiên.

🔗 Làm thế nào để sử dụng trí tuệ nhân tạo để tăng năng suất?
Tự động hóa các tác vụ thường nhật, tối ưu hóa quy trình làm việc và nâng cao hiệu quả sáng tạo.

🔗 Làm thế nào để tích hợp trí tuệ nhân tạo vào doanh nghiệp của bạn?
Xác định các quy trình có tác động cao, triển khai các dự án thí điểm, đo lường lợi tức đầu tư (ROI) và mở rộng quy mô.


Những yếu tố nào tạo nên một trợ lý AI tự chế tốt với Raspberry Pi? ✅

  • Chế độ riêng tư được mặc định – giữ âm thanh cục bộ nếu có thể. Bạn quyết định âm thanh nào được phát ra khỏi thiết bị.

  • Mô-đun – các thành phần có thể thay thế như Lego: công cụ nhận dạng từ khóa, nhận dạng giọng nói tự động (ASR), lập trình ngôn ngữ ký hiệu (LLM), chuyển văn bản thành giọng nói (TTS).

  • Giá cả phải chăng – chủ yếu là các thiết bị mã nguồn mở, micro, loa thông dụng và một chiếc Raspberry Pi.

  • Dễ dàng tùy chỉnh – bạn muốn tự động hóa nhà cửa, bảng điều khiển, quy trình, kỹ năng tùy chỉnh? Dễ thôi.

  • Đáng tin cậy – được quản lý bởi dịch vụ, khởi động và bắt đầu nghe tự động.

  • Thú vị – bạn sẽ học được rất nhiều điều về âm thanh, quy trình và thiết kế hướng sự kiện.

Mẹo nhỏ: Nếu bạn sử dụng Raspberry Pi 5 và dự định chạy các mô hình cục bộ nặng hơn, bộ tản nhiệt kẹp sẽ giúp ích khi tải liên tục. (Khi không chắc chắn, hãy chọn Bộ tản nhiệt chủ động chính thức được thiết kế cho Pi 5.) [1]


Các bộ phận và dụng cụ bạn cần 🧰

  • Raspberry Pi : Nên dùng Pi 4 hoặc Pi 5 để có đủ dung lượng dự phòng.

  • Thẻ nhớ microSD : Khuyến nghị dung lượng từ 32 GB trở lên.

  • Microphone USB : một chiếc micro hội nghị USB đơn giản là tuyệt vời.

  • Loa : Loa USB hoặc 3.5 mm, hoặc bộ khuếch đại I2S HAT.

  • Mạng : Ethernet hoặc Wi-Fi.

  • Các tiện ích tùy chọn: vỏ, bộ làm mát chủ động cho Pi 5, nút nhấn để nói chuyện, vòng đèn LED. [1]

Thiết lập hệ điều hành và cấu hình cơ bản

  1. Nạp Raspberry Pi OS bằng Raspberry Pi Imager. Đây là cách đơn giản để có được microSD có thể khởi động với các thiết lập sẵn mà bạn muốn. [1]

  2. Khởi động máy, kết nối mạng, sau đó cập nhật các gói phần mềm:

sudo apt update && sudo apt upgrade -y
  1. Các chức năng cơ bản về âm thanh : Trên Raspberry Pi OS, bạn có thể thiết lập đầu ra, mức âm lượng và thiết bị mặc định thông qua giao diện người dùng trên máy tính để bàn hoặc raspi-config . Âm thanh USB và HDMI được hỗ trợ trên tất cả các mẫu; đầu ra Bluetooth có sẵn trên các mẫu có Bluetooth. [1]

  2. Xác minh thiết bị:

arecord -l aplay -l

Sau đó, hãy kiểm tra quá trình thu âm và phát lại. Nếu mức âm lượng có vẻ bất thường, hãy kiểm tra bộ trộn âm và các thiết lập mặc định trước khi đổ lỗi cho micro.

 

Raspberry Pi AI

Tổng quan về kiến ​​trúc 🗺️

Một trình tự chế trợ lý AI hợp lý với Raspberry Pi sẽ diễn ra như sau:

Từ khóa kích hoạt → ghi âm trực tiếp → phiên âm ASR → xử lý ý định hoặc LLM → văn bản phản hồi → chuyển văn bản thành giọng nói (TTS) → phát lại âm thanh → các hành động tùy chọn qua MQTT hoặc HTTP.

  • Từ đánh thức : Porcupine nhỏ, chính xác và chạy cục bộ với khả năng kiểm soát độ nhạy theo từng từ khóa. [2]

  • ASR : Whisper là một mô hình ASR đa ngôn ngữ, đa năng được đào tạo trên ~680 nghìn giờ; nó có khả năng chống chịu tốt với giọng nói/tiếng ồn nền. Để sử dụng trên thiết bị, whisper.cpp cung cấp một đường dẫn suy luận C/C++ gọn nhẹ. [3][4]

  • Bộ não : Tùy chọn của bạn – quản lý lớp logic đám mây (LLM) thông qua API, công cụ xử lý quy tắc hoặc suy luận cục bộ, tùy thuộc vào sức mạnh xử lý.

  • TTS : Piper tạo ra giọng nói tự nhiên tại chỗ, đủ nhanh để có phản hồi nhanh chóng trên phần cứng khiêm tốn. [5]


Bảng so sánh nhanh 🔎

Dụng cụ Tốt nhất cho Giá cả tương đối Lý do nó hiệu quả
Từ đánh thức Nhím Bộ kích hoạt luôn lắng nghe Gói miễn phí + CPU thấp, chính xác, liên kết dễ dàng [2]
Whisper.cpp Nhận dạng giọng nói tự động cục bộ trên Raspberry Pi Mã nguồn mở Độ chính xác tốt, thân thiện với CPU [4]
Thì thầm nhanh hơn Tốc độ nhận dạng giọng nói tức thời (ASR) nhanh hơn trên CPU/GPU Mã nguồn mở Tối ưu hóa CTranslate2
Piper TTS Đầu ra giọng nói cục bộ Mã nguồn mở Giọng nói nhanh, nhiều ngôn ngữ [5]
API Cloud LLM Lý luận phong phú Dựa trên mức sử dụng Giảm tải tính toán nặng
Node-RED Điều phối các hành động Mã nguồn mở Luồng trực quan, thân thiện với MQTT

Hướng dẫn từng bước: Cách tạo vòng lặp giọng nói đầu tiên của bạn 🧩

Chúng ta sẽ sử dụng Porcupine cho từ khóa kích hoạt, Whisper để phiên âm, một hàm "não bộ" đơn giản cho phản hồi (thay thế bằng LLM mà bạn chọn), và Piper để nhận dạng giọng nói. Hãy giữ cho nó tối giản, sau đó cải tiến dần.

1) Cài đặt các thư viện phụ thuộc

sudo apt install -y python3-pip portaudio19-dev sox ffmpeg pip3 install sounddevice numpy
  • Nhím: lấy SDK/liên kết cho ngôn ngữ của bạn và làm theo hướng dẫn bắt đầu nhanh (phím truy cập + danh sách từ khóa + khung âm thanh → .process ). [2]

  • Whisper (thân thiện với CPU): biên dịch whisper.cpp :

git clone https://github.com/ggml-org/whisper.cpp cd whisper.cpp && cmake -B build && cmake --build build -j ./models/download-ggml-model.sh base.en ./build/bin/whisper-cli -m ./models/ggml-base.en.bin -f your.wav -otxt

Điều trên phản ánh sự khởi đầu nhanh chóng của dự án. [4]

Bạn thích Python hơn? faster-whisper (CTranslate2) thường nhanh hơn Python thông thường trên các CPU cấu hình khiêm tốn.

2) Cài đặt Piper TTS

git clone https://github.com/rhasspy/piper cd piper make # Tải xuống một mẫu giọng nói bạn thích, ví dụ: en_US-amy echo "Xin chào." | ./piper --model voices/en/en_US-amy-medium.onnx --output_file hello.wav aplay hello.wav

Piper được thiết kế cho TTS trên thiết bị với nhiều tùy chọn giọng nói/ngôn ngữ. [5]

3) Một vòng lặp trợ lý tối thiểu trong Python

Được thiết kế nhỏ gọn một cách có chủ ý: chờ một cụm từ đánh thức (stub), ghi âm, phiên âm bằng whisper.cpp , tạo ra câu trả lời (placeholder), sau đó phát ra âm thanh thông qua Piper. Bạn có thể thay thế placeholder bằng LLM hoặc logic quy tắc yêu thích của mình.

import os, subprocess, wave import sounddevice as sd WAKE_WORD = "hey computer" # hoán đổi cho Porcupine trong môi trường sản xuất [2] RECORD_SECONDS = 6 SAMPLE_RATE = 16000 CHANNELS = 1 WORKDIR = "/home/pi/assistant" ASR_BIN = "/home/pi/whisper.cpp/build/bin/whisper-cli" # [4] ASR_MODEL = "/home/pi/whisper.cpp/models/ggml-base.en.bin" PIPER_BIN = "/home/pi/piper/build/piper" # [5] PIPER_VOICE = "/home/pi/piper/voices/en/en_US-amy-medium.onnx" os.makedirs(WORKDIR, exist_ok=True) def record_wav(path, seconds=RECORD_SECONDS): audio = sd.rec(int(seconds * SAMPLE_RATE), samplerate=SAMPLE_RATE, channels=CHANNELS, dtype='int16') sd.wait() with wave.open(path, 'wb') as w: w.setnchannels(CHANNELS); w.setsampwidth(2); w.setframerate(SAMPLE_RATE) w.writeframes(audio.tobytes()) def transcribe(path): cmd = [ASR_BIN, "-m", ASR_MODEL, "-f", path, "-otxt"] subprocess.run(cmd, check=True, cwd=WORKDIR) with open(path.replace(".wav", ".txt"), "r", encoding="utf-8") as f: return f.read().strip() def generate_reply(prompt): if "weather" in prompt.lower(): return "Tôi không thấy mây, nhưng có thể trời sẽ ổn. Mang theo áo khoác phòng trường hợp cần." return "Bạn đã nói: " + lời nhắc def speak(text): proc = subprocess.Popen([PIPER_BIN, "--model", PIPER_VOICE, "--output_file", f"{WORKDIR}/reply.wav"], stdin=subprocess.PIPE) proc.stdin.write(text.encode("utf-8")); proc.stdin.close(); proc.wait() subprocess.run(["aplay", f"{WORKDIR}/reply.wav"], check=True) print("Trợ lý đã sẵn sàng. Nhập cụm từ đánh thức để kiểm tra.") while True: typed = input("> ").strip().lower() if typed == WAKE_WORD: wav_path = f"{WORKDIR}/input.wav" record_wav(wav_path) text = transcribe(wav_path) reply = generate_reply(text) print("Người dùng:", text); print("Trợ lý:", reply) speak(reply) else: print("Nhập cụm từ đánh thức để kiểm tra vòng lặp.")

Để phát hiện từ đánh thức thực sự, hãy tích hợp bộ dò luồng của Porcupine (CPU thấp, độ nhạy theo từng từ). [2]


Tinh chỉnh âm thanh thực sự hiệu quả 🎚️

Một vài thay đổi nhỏ sẽ giúp trợ lý ảo của bạn thông minh hơn gấp 10 lần:

  • Khoảng cách đặt micro : 30–60 cm là khoảng cách lý tưởng cho nhiều micro USB.

  • Mức độ : tránh hiện tượng cắt xén tín hiệu đầu vào và giữ cho quá trình phát lại ổn định; sửa lỗi định tuyến trước khi tìm kiếm các lỗi mã. Trên Raspberry Pi OS, bạn có thể quản lý thiết bị đầu ra và mức độ thông qua các công cụ hệ thống hoặc raspi-config . [1]

  • Âm học phòng : tường cứng gây ra tiếng vọng; một tấm thảm mềm dưới micro sẽ giúp giảm tiếng vọng.

  • Ngưỡng từ đánh thức : quá nhạy → kích hoạt ảo; quá nghiêm ngặt → bạn sẽ la hét vào nhựa. Porcupine cho phép bạn điều chỉnh độ nhạy cho mỗi từ khóa. [2]

  • Nhiệt độ : các bản ghi dài trên Pi 5 được hưởng lợi từ bộ làm mát chủ động chính thức để duy trì hiệu suất. [1]


Từ đồ chơi thành thiết bị gia dụng: Dịch vụ, khởi động tự động, kiểm tra sức khỏe 🧯

Con người hay quên chạy các tập lệnh. Máy tính thì quên cư xử tử tế. Hãy biến vòng lặp của bạn thành một dịch vụ được quản lý:

  1. Tạo một đơn vị systemd:

[Unit] Description=Trợ lý giọng nói tự chế After=network.target sound.target [Service] User=pi WorkingDirectory=/home/pi/assistant ExecStart=/usr/bin/python3 /home/pi/assistant/assistant.py Restart=always RestartSec=3 [Install] WantedBy=multi-user.target
  1. Hãy bật nó lên:

sudo cp assistant.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now assistant.service
  1. Đuôi nhật ký:

journalctl -u assistant -f

Giờ đây nó tự khởi động khi bật máy, tự khởi động lại khi gặp sự cố và nhìn chung hoạt động như một thiết bị gia dụng. Hơi nhàm chán một chút, nhưng tốt hơn nhiều.


Hệ thống kỹ năng: Biến nó thành ứng dụng thực tế tại nhà 🏠✨

Sau khi chức năng thu âm và phát âm hoạt động ổn định, hãy thêm các thao tác:

  • Intent router : các tuyến đường từ khóa đơn giản cho các tác vụ thông thường.

  • Nhà thông minh : gửi sự kiện lên MQTT hoặc gọi các điểm cuối HTTP của Home Assistant.

  • Các plugin : các hàm Python nhanh như set_timer , what_is_the_time , play_radio , run_scene .

Ngay cả khi có LLM đám mây hỗ trợ, hãy ưu tiên các lệnh cục bộ rõ ràng trước để đạt tốc độ và độ tin cậy cao.


Chỉ dùng cục bộ so với hỗ trợ đám mây: Những sự đánh đổi bạn sẽ cảm nhận được 🌓

Chỉ
cục bộ Ưu điểm: riêng tư, ngoại tuyến, chi phí có thể dự đoán được.
Nhược điểm: các mô hình nặng hơn có thể chậm trên các bo mạch nhỏ. Việc đào tạo đa ngôn ngữ của Whisper giúp tăng cường độ ổn định nếu bạn giữ nó trên thiết bị hoặc trên máy chủ gần đó. [3]

của hỗ trợ đám mây
: khả năng suy luận mạnh mẽ, cửa sổ ngữ cảnh lớn hơn.
Nhược điểm: dữ liệu rời khỏi thiết bị, phụ thuộc vào mạng, chi phí thay đổi.

Một giải pháp kết hợp thường thắng: từ đánh thức + ASR cục bộ → gọi API để suy luận → TTS cục bộ. [2][3][5]


Khắc phục sự cố: Những lỗi lạ và cách giải quyết nhanh chóng 👾

  • Lỗi kích hoạt sai từ đánh thức : giảm độ nhạy hoặc thử micrô khác. [2]

  • Độ trễ ASR : sử dụng mô hình Whisper nhỏ hơn hoặc xây dựng whisper.cpp với cờ phát hành ( -j --config Release ). [4]

  • Choppy TTS : tạo sẵn các cụm từ thông dụng; xác nhận thiết bị âm thanh và tốc độ lấy mẫu của bạn.

  • Không phát hiện thấy micro : hãy kiểm tra arecord -l và các bộ trộn âm.

  • Giảm hiệu năng do quá nhiệt : sử dụng Active Cooler chính thức trên Pi 5 để duy trì hiệu năng. [1]


Những lưu ý về bảo mật và quyền riêng tư mà bạn thực sự nên đọc 🔒

  • Hãy cập nhật Raspberry Pi của bạn bằng APT.

  • Nếu bạn sử dụng bất kỳ API đám mây nào, hãy ghi lại những gì bạn gửi và cân nhắc việc xóa bỏ thông tin cá nhân trước khi xử lý cục bộ.

  • Chạy các dịch vụ với quyền hạn tối thiểu; tránh sử dụng sudo trong ExecStart trừ khi thực sự cần thiết.

  • Cung cấp chế độ chỉ sử dụng mạng nội bộ cho khách hoặc giờ yên tĩnh.


Các biến thể tự chọn: Kết hợp tùy thích như một chiếc bánh sandwich 🥪

  • Siêu cục bộ : Porcupine + whisper.cpp + Piper + các quy tắc đơn giản. Riêng tư và mạnh mẽ. [2][4][5]

  • Hỗ trợ đám mây tốc độ cao : Porcupine + (Whisper cục bộ nhỏ hơn hoặc ASR đám mây) + TTS cục bộ + LLM đám mây.

  • Trung tâm tự động hóa nhà thông minh : Thêm các luồng Node-RED hoặc Home Assistant cho các quy trình, kịch bản và cảm biến.


Ví dụ về kỹ năng: Bật đèn thông qua MQTT 💡

import paho.mqtt.client as mqtt MQTT_HOST = "192.168.1.10" TOPIC = "home/livingroom/light/set" def set_light(state: str): client = mqtt.Client() client.connect(MQTT_HOST, 1883, 60) payload = "ON" if state.lower().startswith("on") else "OFF" client.publish(TOPIC, payload, qos=1, retain=False) client.disconnect() # if "turn on the lights" in text: set_light("on")

Thêm một câu thoại như: “Bật đèn phòng khách lên,” và bạn sẽ cảm thấy mình như một phù thủy.


Vì sao bộ công nghệ này lại hiệu quả trong thực tế 🧪

  • Porcupine có hiệu quả và chính xác trong việc phát hiện từ đánh thức trên các bảng mạch nhỏ, điều này giúp việc luôn lắng nghe trở nên khả thi. [2]

  • Việc đào tạo đa ngôn ngữ quy mô lớn của Whisper giúp nó hoạt động ổn định trong nhiều môi trường và giọng điệu khác nhau. [3]

  • whisper.cpp giữ cho sức mạnh đó có thể sử dụng được trên các thiết bị chỉ có CPU như Pi. [4]

  • Piper giữ cho các phản hồi nhanh chóng mà không cần gửi âm thanh tới TTS đám mây. [5]


Dài quá, không đọc hết

Xây dựng một Trợ lý AI DIY riêng tư, dạng mô-đun với Raspberry Pi bằng cách kết hợp Porcupine cho từ khóa đánh thức, Whisper (thông qua whisper.cpp ) cho nhận dạng giọng nói tự động (ASR), bộ não bạn chọn cho các câu trả lời và Piper cho chuyển văn bản thành giọng nói cục bộ (TTS). Đóng gói nó như một dịch vụ systemd, điều chỉnh âm thanh và kết nối các hành động MQTT hoặc HTTP. Nó rẻ hơn bạn nghĩ và thú vị một cách kỳ lạ khi sử dụng. [1][2][3][4][5]


Tài liệu tham khảo

  1. Phần mềm và hệ thống làm mát cho Raspberry Pi – Thông tin về Raspberry Pi Imager (tải xuống và sử dụng) và sản phẩm tản nhiệt chủ động cho Pi 5.

  2. Từ khóa kích hoạt Porcupine – SDK & hướng dẫn nhanh (từ khóa, độ nhạy, suy luận cục bộ)

  3. Whisper (mô hình nhận dạng giọng nói tự động) – Hệ thống nhận dạng giọng nói tự động đa ngôn ngữ, mạnh mẽ, được huấn luyện trên khoảng 680.000 giờ.

    • Radford và cộng sự, Nhận dạng giọng nói mạnh mẽ thông qua giám sát yếu quy mô lớn (Whisper): đọc thêm

  4. whisper.cpp – Công cụ suy luận Whisper thân thiện với CPU với giao diện dòng lệnh và các bước biên dịch

  5. Piper TTS – Phần mềm chuyển văn bản thành giọng nói nhanh, cục bộ, dựa trên mạng thần kinh, hỗ trợ nhiều giọng nói/ngôn ngữ.

Tìm kiếm những công nghệ AI mới nhất tại Cửa hàng Trợ lý AI chính thức

Về chúng tôi


Quay lại blog