📌 本文重點
- moonshine 是可本地部署的低延遲語音代理 C++ pipeline
- 一條 pipeline 完成 STT、意圖辨識與 TTS
- 適合客服熱線、語音面板與 IoT 離線語音控制
- 可直接接上任意 REST API 打造專屬語音 agent
只想做一個語音版 ChatGPT、客服機器人,卻不想被雲端 API 綁死、每月付帳單?moonshine 就是那套「自己裝在機器上、一次搞定語音輸入+理解+回覆」的 C++ pipeline。
原始碼在 GitHub:https://github.com/moonshine-ai/moonshine
核心功能:一條語音 pipeline,全都自己掌控
moonshine 的定位很直接:
Very low latency speech to text, intent recognition, and text to speech, for building voice agents and interfaces.
你可以把它想成「本地版語音代理引擎」——不是雲端服務,而是一個可以編譯進你自己程式的 C++ library/工具。
💡 關鍵: moonshine 把 STT、意圖辨識與 TTS 串成單一低延遲 pipeline,從輸入到輸出都在你自己的機器上完成。
1. 語音輸入:低延遲 STT(Speech-to-Text)
- 功能:把麥克風語音即時轉成文字,延遲低,適合對話場景。
- 實際效果:跑在桌機或中高階單板機上,可以做到「你講一句,它同時開始辨識」的互動感。
- 你可以立刻做的事:
- 把它接到客服電話錄音,轉成文字後送到 FAQ 引擎。
- 接到操作面板上,用語音替代滑鼠點選。
2. 意圖辨識:Intent Recognition
- 功能:從文字中判斷「使用者想做什麼」,例如:查訂單、開支援
ticket、關燈、查庫存。 - moonshine 的做法:把語音轉文字後,丟進意圖模型(可換成你自己訓練的分類器/
LLM)。 - 你可以立刻做的事:
- 自訂幾個意圖(如
查訂單、問價格、人工轉接),用簡單規則或模型判斷要打到哪個API。
3. 語音輸出:TTS(Text-to-Speech)
- 功能:把系統回覆文字轉成語音,直接播放給使用者。
- 實際效果:完成一個「講話→理解→查資料→講回來」的完整迴路,不需要外接雲端
TTS。 - 你可以立刻做的事:
- 做一個「語音 FAQ 機器人」,接電話後用
TTS讀出答案。 - 做桌面語音助理,說出系統通知或報表摘要。
適合誰用:三種典型場景
1. 客服/熱線:電話接起來就有語音機器人
問題情境:
- 只想讓機器人先接電話、回答常見問題或先收集基本資料,但不想把所有通話丟到雲端
AI。
moonshine 的用法:
- 把語音輸入接到電話系統的音訊流(
VoIP/SIP方案都可),用STT轉文字。 - 用意圖辨識判斷是「查訂單」「問營業時間」「真人客服」。
- 走不同後端
API,最後用TTS回覆。
你可以立刻做的實驗:
- 先不接真正電話,用錄音檔或麥克風假裝客戶提問,串一個「
FAQ搜尋API」,測試回答流程。
2. 語音面板:替既有系統加一層「講話就能操作」
問題情境:
- 你有一套
SaaS或內部系統(CRM、ERP、工單系統),想讓使用者用「語音」查資料、下指令,但不想大改前端。
moonshine 的用法:
- 在桌面
app或web前端旁放一個小語音代理程式: - 監聽麥克風 →
STT→ 判斷意圖 → 呼叫既有REST API→ 整理結果 →TTS講回來或貼在UI。
你可以立刻做的實驗:
- 選一個已有的
REST API(例如:查客戶資訊),用下方「10 行程式碼」範例改成語音查詢。
3. IoT/嵌入式:低資源設備上的離線語音控制
問題情境:
- 想做離線語音控制:開關設備、切換模式,但硬體算力有限、網路不穩。
moonshine 的用法:
- 把精簡版模型放在裝置上(例如
ARM單板機),只做幾個固定意圖: - 「開燈」「關燈」「設定 25 度」等,直接對接硬體控制程式。
💡 關鍵: 在 IoT 裝置離線情境下,moonshine 可只保留少數固定意圖,大幅降低對算力與網路的依賴。
你可以立刻做的實驗:
- 在一台樹莓派或小型工控機上跑最簡
demo,先做「聽到關燈就印出turn_off_light」的文字,再接上GPIO控制。
怎麼開始:從 GitHub clone 到第一個語音 agent
💡 關鍵: 從
git clone到可用 demo,大致只需一次編譯與模型下載,就能完整體驗整條語音 pipeline。
1. 先把專案拉下來、編譯成功
- 安裝基本依賴(以
Ubuntu為例):
bash
sudo apt update
sudo apt install -y git cmake build-essential
Clone專案:
bash
git clone https://github.com/moonshine-ai/moonshine.git
cd moonshine
- 編譯:
bash
mkdir build && cd build
cmake ..
make -j$(nproc)
完成後,你會得到可以執行的示範程式(名稱以官方 repo 為準,一般會有 demo/example 可跑)。
2. 跑最簡 demo:確認 STT / TTS pipeline
官方 repo 一般會提供類似:
./moonshine_demo --input mic --output speaker
典型流程會是:
- 啟動程式,指定輸入為麥克風、輸出為喇叭。
- 程式下載或載入預設
STT/TTS模型(通常第一次跑會需要網路)。 - 你講一句話,終端機顯示辨識出的文字,並用
TTS回覆一句預設回答。
具體參數以官方 README 為準,重點是:先確認你機器上的音訊裝置、模型下載都 OK。
3. 配置模型:STT / TTS / Intent 拆清楚
在實際專案中,你要決定三件事:
STT模型:- 選語系(中文/英文等)和大小(依你設備算力)。
- moonshine 通常會支援多種
backend,可以在config檔或啟動參數指定。 TTS模型:- 選擇語音風格(男聲/女聲)和延遲表現。
- 在設定中指定
model path或使用預設URL拉取。 - Intent 模型或規則:
- 簡單做法:先用關鍵字+正則,把意圖分成幾類。
- 進階做法:接上本地
LLM(例如使用你現有的推論服務)做意圖分類。
你可以建立一個簡單的 config.json:
{
"stt_model": "models/stt_zh_small.bin",
"tts_model": "models/tts_zh_small.bin",
"intent_backend": "http://localhost:8000/intent"
}
程式啟動時讀取這個 config,就能自由替換模型和意圖服務。
4. 10 行程式碼:把任何 REST API 包成語音代理
以下用「C++ + moonshine + 一個任意 REST API」示意,把核心流程壓縮成約 10 行邏輯。實際使用時需依官方 API 做正確呼叫。
#include "moonshine.h" // 假設提供 STT / TTS 接口
#include <httplib.h> // 用任意 HTTP client
int main() {
MoonshineAgent agent{"config.json"}; // 載入 STT/TTS 設定
httplib::Client api("https://api.yourservice.com");
while (true) {
std::string text = agent.listen(); // 1. 麥克風→文字
auto res = api.Get("/search?query=" + text); // 2. 呼叫任意 REST API
std::string reply = res->body; // 3. 取回文字結果
agent.speak(reply); // 4. TTS 語音回覆
}
}
這個基本版就已經是一個「語音代理壓在你自己的後端」:
- 你說話 →
STT->text - 丟到你預先寫好的
API(可以是FAQ搜尋、工單建立、資料查詢) - 回傳文字 → 用
TTS說回來
你可以改幾行,就變成不同場景:
- 客服熱線:把
text先送進意圖辨識API,再決定要打哪一個後端。 - 語音面板:把
reply不是用TTS,而是顯示在UI,TTS只讀重點。 IoT控制:把api.Get(...)換成控制硬體的函式,例如set_light(false)。
小結:想自己掌控語音代理,就先把 moonshine 跑起來
如果你:
- 不想被雲端
STT/TTS綁約 - 想在桌面
app、行動裝置或後端服務內嵌語音代理
那 moonshine 提供的就是一個單純、可編譯進你程式的 C++ 語音 pipeline。從 GitHub clone 下來,先跑官方 demo,再按照上面範例把你的 REST API 接上去,你就能在一台機器上完成第一個「可用的語音 agent」。
🚀 你現在可以做的事
- 前往 moonshine GitHub 專案
clone並完成一次編譯與官方 demo 執行- 寫一個簡單的
config.json,指定本地STT/TTS模型與一個測試用意圖服務endpoint- 按照文中「10 行程式碼」範例,挑一個現有
REST API,實作一個可對答的語音查詢小工具


發佈留言