Chuyển hướng toàn bộ giọng nói Home Assistant sang một Agent tùy chỉnh
Bạn muốn mọi câu lệnh bằng giọng nói đều được gửi đến agent của riêng mình. Có thể đó là một LLM chạy cục bộ hoặc một trợ lý có hỗ trợ MCP.
Trên Home Assistant 2026.5 và các phiên bản mới hơn, cách làm tiêu chuẩn sẽ không hoạt động.
Nếu bạn sử dụng một wildcard trần trong một automation, bạn sẽ gặp lỗi HTTP 500. Lỗi này xảy ra vì hệ thống tìm kiếm một danh sách không tồn tại.
Ngay cả khi bạn tránh được lỗi này, các câu lệnh tích hợp sẵn sẽ "chiếm quyền" các truy vấn của bạn. Nếu bạn hỏi "Khi nào thì thủy triều xuống tiếp theo", Home Assistant có thể sẽ cố gắng phát bài hát tiếp theo thay vì trả lời.
Dưới đây là cách khắc phục cả hai vấn đề này.
Các vấn đề
MissingListError: Khi bạn sử dụng
{text}trong một automation, Home Assistant mong đợi một danh sách đã được đăng ký có tên là "text". Vì bạn không thể định nghĩa các danh sách trong automation, hệ thống sẽ gặp lỗi.Intent Hijacking: Các câu lệnh tích hợp sẵn như "turn on" hoặc "play next" sẽ khớp với từ ngữ của bạn trước khi agent tùy chỉnh kịp có cơ hội xử lý.
Giải pháp
Bạn phải chuyển logic "bắt tất cả" (catch-all) ra khỏi automation và đưa vào các custom sentences. Điều này cho phép bạn định nghĩa một wildcard thực thụ và đảm bảo câu lệnh của bạn được tải lên trước.
Bước 1: Tạo một custom sentence
Tạo một tệp trong thư mục custom_sentences của bạn. Việc này sẽ đăng ký một danh sách wildcard thực sự.
language: "en"
intents:
NaturaliQuery:
data:
- sentences:
- "{text}"
lists:
text:
wildcard: true
Bước 2: Sử dụng một intent_script
Thay vì dùng automation, hãy sử dụng intent_script trong tệp configuration.yaml. Cách này giúp xử lý phản hồi và giữ cho voice pipeline luôn mượt mà.
intent_script:
NaturaliQuery:
speech:
text: "One moment."
action:
- action: mqtt.publish
data:
topic: my/agent/ask
payload: '{"text": "{{ text }}"}'
Tại sao cách này hiệu quả
• Danh sách wildcard giúp ngăn chặn lỗi HTTP 500.
• Các custom sentences được tải trước các intent tích hợp sẵn. Agent của bạn sẽ bắt được câu lệnh trước.
• Sử dụng intent_script giúp tránh tình trạng voice deadlocks trên nhiều thiết bị vệ tinh phần cứng (hardware satellites).
Lưu ý: Một wildcard toàn phần sẽ bắt tất cả mọi thứ, bao gồm cả "turn on the lights". Nếu bạn muốn giữ quyền điều khiển mặc định, hãy thêm một từ tiền tố (prefix) vào custom sentence của mình để nó chỉ kích hoạt khi bạn muốn.
Optional learning community: https://t.me/GyaanSetuAi
