用 Python 從 Windows 遠端測試 Ollama:Qwen3 繁體中文故事生成
讓 GIGABYTE BRIX 負責本地 AI 推論,Windows 電腦負責操作與後續語音互動。本文記錄如何透過 SSH 隧道連線,再用 Python 傳送繁體中文問題,並驗證模型能否完成回答。
測試環境與架構
- AI 主機:GIGABYTE GB-BTIP-N150,記憶體 16GB,作業系統 Ubuntu。
- 模型:
qwen3:4b-instruct-2507-q4_K_M。 - 客戶端:Windows 電腦,以 CMD 執行 Python。
- Ollama API:主機端
127.0.0.1:11434,經 SSH 轉送至 Windows 的127.0.0.1:11435。
這種配置讓 BRIX 專心執行模型;麥克風、喇叭與互動程式則可留在 Windows 電腦。測試時不必把 Ollama API 直接公開到區域網路。
第一步:在 Windows CMD 開啟 SSH 隧道
在 Windows CMD 執行下列指令,並保持這個視窗開啟:
ssh -N -L 127.0.0.1:11435:127.0.0.1:11434 nfusrai@192.168.1.114
輸入 Ubuntu 帳號密碼後,視窗停在連線狀態、沒有新的命令提示符,代表隧道正在運作。另開 CMD 視窗後,可先檢查 Ollama API:
curl.exe http://127.0.0.1:11435/api/version
測試時收到 {"version":"0.35.1"},確認 Windows 已經能透過 SSH 隧道連上 BRIX 的 Ollama。
第二步:準備 Python 測試程式
將以下程式存成 test_ollama_windows.py。程式使用 Python 標準函式庫,不需另外安裝套件;它會用 UTF-8 傳送 JSON、等待模型回覆,再印出回答和完成原因。
#!/usr/bin/env python3
"""從 Windows 測試經 SSH 隧道連線的 Ollama API。"""
import json
import sys
import urllib.error
import urllib.request
API_URL = "http://127.0.0.1:11435/api/generate"
MODEL = "qwen3:4b-instruct-2507-q4_K_M"
# Windows CMD 通常可直接處理 Python Unicode;此設定也讓輸出統一使用 UTF-8。
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8")
prompt = input("請輸入要問模型的問題(直接按 Enter 使用預設問題):").strip()
if not prompt:
prompt = "請用繁體中文簡短自我介紹。"
payload = {
"model": MODEL,
"system": "請使用繁體中文與臺灣用語,回答簡短。",
"prompt": prompt,
"stream": False,
"options": {"num_predict": 128},
}
request = urllib.request.Request(
API_URL,
data=json.dumps(payload, ensure_ascii=False).encode("utf-8"),
headers={"Content-Type": "application/json; charset=utf-8"},
method="POST",
)
try:
with urllib.request.urlopen(request, timeout=180) as response:
result = json.loads(response.read().decode("utf-8"))
print("\n模型:", result.get("model", MODEL))
print("回答:\n", result.get("response", "(API 沒有回傳 response 欄位)"), sep="")
print("\n完成原因:", result.get("done_reason", "未提供"))
except urllib.error.HTTPError as exc:
print(f"HTTP 錯誤:{exc.code} {exc.reason}")
print(exc.read().decode("utf-8", errors="replace"))
raise SystemExit(1)
except urllib.error.URLError as exc:
print("連線失敗:無法連到 Windows 本機的 Ollama SSH 隧道。")
print("請確認 SSH 隧道視窗仍開啟,並先測試:curl.exe http://127.0.0.1:11435/api/version")
print("詳細資訊:", exc.reason)
raise SystemExit(1)
except TimeoutError:
print("等待模型回覆逾時。請確認 BRIX 上的 Ollama 正常,再提高逾時時間或稍後重試。")
raise SystemExit(1)
第三步:執行並輸入問題
在另一個 Windows CMD 視窗切換到程式所在資料夾,執行:
py test_ollama_windows.py
程式會提示輸入問題。本次輸入「請用三句話寫一篇小故事。」後,模型名稱顯示為 qwen3:4b-instruct-2507-q4_K_M,並成功回傳繁體中文內容。
本次成功測試結果
請用三句話寫一篇小故事。
模型: qwen3:4b-instruct-2507-q4_K_M
回答:
小巷裡的阿傑,每天傍晚都會幫老奶奶推車送菜。
那天他發現車輪下藏著一封舊信,寫著「給未來的我」。
他笑了,原來他早就知道,自己會成為那個未來。
完成原因: stop
stop,表示這次回答自然結束,並非因生成字數上限而中斷。測試心得與下一步
本次已完成從 Windows CMD 經 SSH 隧道呼叫 BRIX 上 Ollama,並用 Python 傳送繁體中文、接收模型回覆的測試。Python 透過 json.dumps(..., ensure_ascii=False) 與 UTF-8 編碼處理中文,免去先前在 CMD 使用 echo 寫入中文 JSON 時遇到的亂碼問題。
下一階段可在 Windows 端加入語音辨識,把麥克風說出的台語轉成文字後交給 Ollama,再把模型回答交由台語語音合成播放。如此可逐步建成「Windows 收音與播音、BRIX 執行本地模型」的台語互動原型。
智慧生活科技專業社群|Ollama × Python × SSH 遠端測試實作
沒有留言:
張貼留言