用 Whisper+Ollama 做一個本地語音助理

用 Whisper+Ollama 做一個本地語音助理

📌 本文重點

  • 用 Whisper+Ollama 做完全本地語音助理
  • 語音→文字→LLM→語音的完整閉環
  • 30 分鐘內跑起最小可行版本
  • 資料與聲音全留在自己機器上

一句話就能叫得動電腦,而你的聲音和資料完全留在自己機器上,這就是用 Whisper+Ollama 做本地語音助理要解決的問題。

參考原文:Build a Fully Local Voice Assistant With Whisper and Ollama(Towards AI)
https://pub.towardsai.net/build-a-fully-local-voice-assistant-with-whisper-and-ollama-e5e6f713a220


核心架構:一句話進,AI 一句話回

這個本地語音助理由三塊組成:

  1. Whisper:把「語音 → 文字」(Speech-to-Text)
  2. Ollama + 本地 LLM:負責理解與生成文字回應
  3. 任一 TTS(Text-to-Speech):把「文字 → 語音」再念出來

整體流程:

  1. 按快捷鍵開始錄音
  2. Whisper 辨識成文字指令
  3. 文字送到本地 LLM(透過 Ollama)推理
  4. 回傳文字答案,再由 TTS 念出

💡 關鍵: Whisper+Ollama+TTS 組成「完全本地、無需雲端」的語音互動閉環。

下文會先講三個核心功能,再看哪些人適合用,最後給一個可以在 30 分鐘內跑起來的最小範例。


核心功能:你可以用聲音做什麼

1. 聲控指令:一句話叫電腦做事

你可以用自然語言下達指令,背後由 LLM 把「人話」轉成實際操作(shell 指令、API 呼叫或執行特定程式)。

可做的事例如:

  • 「幫我開啟 VS Code 並打開 project 資料夾」
  • 「開始錄音會議,結束時幫我整理重點」
  • 「幫我查今天的天氣,再念給我聽」

實作上,你可以:

  • 在 LLM 回應中約定一個格式,例如輸出 {"action": "open_app", "target": "VSCode"}
  • 程式解析 JSON,對應到不同的系統操作(Python 用 subprocess、Node 用 child_process

2. 問答與解說:本地 ChatGPT,用嘴巴問

Ollama 支援多種本地模型(如 LlamaQwen),你可以當成「只在本地跑的 ChatGPT」:

  • 「用白話講一次這段程式在做什麼」
  • 「幫我設計一個 3 天東京行程,預算一天 5000 台幣」
  • 「這篇英文信幫我改寫得更禮貌」

如果你在意隱私(公司機密、未發表研究),這類內容只會停留在你的機器,不會上雲端。

💡 關鍵: 對隱私敏感的程式碼、文件與會議內容,都可以在本地模型中處理而不外流。

3. 筆記與總結:會議錄完直接變摘要

結合 Whisper 長錄音能力,你可以:

  • 開會時一直錄音,會後自動產出:
  • 決議事項
  • 待辦清單
  • 各參與者的責任分工
  • 學習影片邊聽邊錄,最後生成「重點整理 + 閱讀筆記」

做法:

  1. 持續錄音,分段送 Whisper 辨識
  2. 把完整文字餵給 LLM,提示詞(prompt)中要求輸出特定格式:例如「請用 5 點整理會議重點,並列出行動項目」

適合誰用:具體場景示例

1. 常開線上會議的知識工作者

使用方式:

  • 開會前按快捷鍵啟動錄音
  • 會議中不必手寫紀錄
  • 開完會輸出「摘要+待辦」,貼回 Notion / Obsidian

好處:

  • 不用依賴雲端錄音服務
  • 內部機密內容留在公司內網或個人電腦

2. 開發者的語音 Coding 小助手

使用方式:

  • 「幫我生成一個 Python 函數,讀取 CSV 並輸出 JSON」
  • 「這段錯誤訊息說什麼?幫我猜可能原因」
  • 「把這段程式重構成 class 寫法」

你可以直接把 LLM 回應輸出到檔案,或搭配編輯器 API 完成簡單的自動插入。

3. 家庭中控 / 桌面自動化

使用方式:

  • 「關掉 Spotify,改播 YouTube 音樂」
  • 「打開家裡 NAS 的網頁介面」
  • 「查一下電價 API,現在是不是離峰」

背後是:

  • LLM 產生要呼叫的 API 名稱 + 參數
  • 程式把它映射到實際的 REST API or Shell 指令

工具比較:Whisper、Ollama、TTS

名稱 核心功能 免費方案 適合誰
Whisper 語音轉文字(STT) 開源、免費 要離線語音辨識的人
Ollama 管理與執行本地 LLM 開源、免費 想在本地跑各種模型的人
Coqui TTS 本地語音合成(TTS) 開源、免費 想客製化聲音的開發者
pyttsx3 / edge-tts 簡單 TTS,快速上手 免費 只要能聽到回應即可的人

Whisper GitHub:https://github.com/openai/whisper
Ollama 官網:https://ollama.com


怎麼開始:30 分鐘跑起一個最小版本

下面以 Python+Whisper+Ollama+簡單 TTS 為例,目標是做到:

按快捷鍵 → 說話 → AI 在本地回答並念出來

💡 關鍵: 只要有 8GB RAM 和 Python 環境,大多數電腦在約 30 分鐘內就能完成這套本地語音助理的基本版。

1. 最小硬體與環境需求

  • 作業系統:macOS / Linux / Windows(建議 10 以上)
  • RAM:至少 8 GB(12–16 GB 更順)
  • GPU:有當然更快,沒有也可跑小模型
  • Python 3.10+(或 Node 也可以,本文用 Python)

2. 安裝 Ollama 與模型

  1. 到 https://ollama.com 下載並安裝
  2. 開啟終端機,拉一個小模型(例如 llama3.2qwen2.5):
ollama pull llama3.2
# 或
ollama pull qwen2.5
  1. 測試一次:
ollama run llama3.2

能對話就表示後面 Python 可以直接透過 HTTP 使用它。

3. 安裝 Whisper 與 TTS

建立虛擬環境(可選,但建議):

python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

安裝必要套件:

pip install openai-whisper sounddevice numpy requests pyttsx3

說明:

  • openai-whisper:Whisper STT
  • sounddevice:錄音
  • pyttsx3:離線 TTS(Windows/macOS/Linux 都可用)
  • requests:呼叫 Ollama HTTP API

4. 最小可行 main.py

下面是一個簡化範例:按 Enter 開始錄音,Ctrl+C 結束程式。你可以之後再綁定系統快捷鍵(如 AutoHotkey、Karabiner)。

import sounddevice as sd
import numpy as np
import whisper
import requests
import pyttsx3

MODEL_NAME = "llama3.2"  # 或改成 "qwen2.5" 等你已拉下的模型
OLLAMA_URL = "http://localhost:11434/api/generate"

whisper_model = whisper.load_model("small")  # 可換 tiny / base / small / medium
engine = pyttsx3.init()

SAMPLE_RATE = 16000
DURATION = 5  # 錄音秒數,可改成你想要的


def record_audio(duration=DURATION):
    print("開始錄音,請說話...")
    audio = sd.rec(int(duration * SAMPLE_RATE), samplerate=SAMPLE_RATE, channels=1)
    sd.wait()
    print("錄音結束")
    return np.squeeze(audio)


def speech_to_text(audio):
    print("正在轉文字...")
    result = whisper_model.transcribe(audio, fp16=False)
    text = result["text"].strip()
    print(f"你說:{text}")
    return text


def call_ollama(prompt):
    print("正在思考...")
    resp = requests.post(
        OLLAMA_URL,
        json={"model": MODEL_NAME, "prompt": prompt},
        stream=False,
    )
    data = resp.json()
    answer = data.get("response", "")
    print(f"AI:{answer}")
    return answer


def speak(text):
    engine.say(text)
    engine.runAndWait()


if __name__ == "__main__":
    try:
        while True:
            input("按 Enter 開始錄音(Ctrl+C 結束):")
            audio = record_audio()
            text = speech_to_text(audio)
            if not text:
                continue
            answer = call_ollama(text)
            speak(answer)
    except KeyboardInterrupt:
        print("\n結束程式")

執行:

python main.py

流程:

  1. 按 Enter → 錄音 5 秒
  2. Whisper 轉文字 → 顯示你說的話
  3. 文字送到 Ollama → LLM 回答
  4. pyttsx3 把文字念出來

你已經完成一個基本版「本地語音 ChatGPT」。接下來就可以:

  • 把錄音時間改成動態(按住鍵才錄)
  • call_ollama 的 prompt 中加入系統指令,例如:「你是一個會輸出 JSON 指令的系統助手」
  • answer 中解析 JSON,呼叫不同的系統功能

換成本地 Qwen、Llama 模型與低配機調整建議

換模型:Qwen、Llama 等

Ollama 已經預設支援多個模型,換模型只要:

  1. 先拉模型:
ollama pull qwen2.5
ollama pull llama3.1
  1. MODEL_NAME 改成相對應名稱,例如:
MODEL_NAME = "qwen2.5"
# 或
MODEL_NAME = "llama3.1"
  1. 重新執行 main.py 即可。

低配機(8GB RAM / 無 GPU)調優建議

  • Whisper 模型:改用 tinybase
    python
    whisper_model = whisper.load_model("tiny")
  • LLM 模型:優先選擇 *-mini 或 3B 以內的小模型(例如 llama3.2 small 版)
  • TTS:選 pyttsx3 這種輕量離線 TTS,避免重型神經網路 TTS
  • 錄音長度:縮短單次錄音(例如 3–5 秒),減少 STT 負載
  • 批次模式:需要長會議紀錄時,可先用系統錄音軟體錄整段,之後分段丟給 Whisper 處理

總結:把「叫電腦做事」變成一句話

你現在已經有一套可以在本地跑的語音助理:

  • Whisper 負責聽懂你說什麼
  • Ollama+本地模型負責思考與生成回應
  • TTS 負責把答案念出來

從這個最小版本開始,你可以一步步加上:「控制應用程式」、「呼叫 API」、「自動整理會議紀錄」,最後變成一個完全客製化的本地語音中控系統。

🚀 你現在可以做的事

  • 安裝 Ollama 並拉下 llama3.2qwen2.5 模型,在終端測試對話
  • 建立 Python 虛擬環境,安裝 openai-whispersounddevicepyttsx3 等套件後跑起 main.py
  • 改寫 call_ollama 部分,讓回應輸出 JSON 指令,開始用語音控制你的桌面或 API

留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *