顯示具有 Qwen3 標籤的文章。 顯示所有文章
顯示具有 Qwen3 標籤的文章。 顯示所有文章

2026年10月4日 星期日

用 Python 從 Windows 遠端測試 Ollama:Qwen3 繁體中文故事生成

智慧生活科技|AI 實作紀錄

用 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 遠端測試實作

從 Windows CMD 遠端測試 Ollama:Qwen3 中文回覆成功紀錄

智慧生活科技|實作紀錄

從 Windows CMD 遠端測試 Ollama:Qwen3 中文回覆成功紀錄

讓 GIGABYTE BRIX 負責本地模型推論,Windows 電腦負責操作與後續語音互動。本篇記錄 SSH 隧道、模型選擇、中文編碼排查,以及成功取得繁體中文回覆的完整過程。

測試環境

本次以 GIGABYTE GB-BTIP-N150(16GB)作為 Ollama 主機,安裝 Ubuntu;另一台 Windows 電腦透過 SSH 使用 Ollama API。麥克風、喇叭與未來的語音介面都規劃在 Windows 電腦端。

  • Ollama 主機:192.168.1.114
  • 主機端 Ollama API:127.0.0.1:11434
  • Windows 本機轉送埠:127.0.0.1:11435
  • 成功模型:qwen3:4b-instruct-2507-q4_K_M
  • Ollama API 版本:0.35.1

一、以 SSH 建立 API 隧道

在 Windows CMD 開啟第一個視窗,輸入以下指令:

ssh -N -L 127.0.0.1:11435:127.0.0.1:11434 nfusrai@192.168.1.114

輸入 Ubuntu 帳號密碼後,視窗會停留在連線狀態、沒有新的命令提示符,這是正常的。測試時要保持此視窗開啟。

另開一個 Windows CMD,確認 API 隧道已連通:

curl.exe http://127.0.0.1:11435/api/version

收到下列類似回應,就代表 Windows 已經能透過 SSH 連到 Ollama:

{"version":"0.35.1"}
若連線失敗:看到「Failed to connect to 127.0.0.1 port 11435」時,先確認 SSH 隧道視窗仍開著。這表示 Windows 本機的轉送埠沒有在監聽,尚未進入模型測試階段。

二、確認原模型的回覆模式

原先安裝的 qwen3:4b 可以載入與執行,但 API 測試時,生成上限用完前仍在輸出 thinking,正式回答欄位 response 是空白。回應中的 done_reason":"length" 表示生成額度用完,模型還沒有完成回答。

進一步查詢 /api/show 後,模型回報思考模式只有 true 這個可用值。也就是說,這個安裝版本不能透過 "think":false 關閉思考模式。對一般短問答而言,改用 Instruct 取向的模型更合適。

三、下載 Qwen3 4B Instruct 模型

在另一個 Windows CMD 視窗,以 SSH 登入 BRIX 並下載量化版模型:

ssh nfusrai@192.168.1.114 ollama pull qwen3:4b-instruct-2507-q4_K_M

等待下載完成。原有 Thinking 模型可以先保留;呼叫 API 時指定新的模型名稱即可。

四、排除 Windows CMD 中文編碼問題

最初使用 CMD 的 echo 將中文字寫入 JSON 檔,模型收到後表示內容像是亂碼。改用記事本直接輸入中文仍未排除問題。最後將中文改寫成 JSON Unicode escape,避開命令列與檔案傳送過程中的中文編碼差異。

在 Windows CMD 輸入以下命令開啟記事本:

notepad ollama_test.json

把下列 JSON 貼入記事本,按 Ctrl+S 儲存後關閉:

{"model":"qwen3:4b-instruct-2507-q4_K_M","prompt":"\u8acb\u7528\u7e41\u9ad4\u4e2d\u6587\u7c21\u77ed\u81ea\u6211\u4ecb\u7d39\u3002","stream":false,"options":{"num_predict":128}}

這串 \u 編碼會由 JSON 解碼成「請用繁體中文簡短自我介紹。」整份測試檔只有英數字元,因此不必直接在 CMD 中傳送中文字。

五、從 Windows 呼叫模型

確認 SSH 隧道視窗仍保持連線後,在另一個 CMD 視窗執行:

curl.exe --max-time 120 http://127.0.0.1:11435/api/generate -H "Content-Type: application/json" --data-binary "@ollama_test.json"

成功時,API 回傳的 model 欄位會是 qwen3:4b-instruct-2507-q4_K_M,而 response 欄位會出現繁體中文自我介紹。本次測試已成功取得中文回答,表示整段流程都已連通:

Windows CMD → SSH 隧道 → BRIX 上的 Ollama → Qwen3 Instruct 模型

測試結論與後續方向

這次測試釐清兩個關鍵點:第一,原本的 qwen3:4b 使用 Thinking 取向,思考輸出會占用生成額度;第二,Windows CMD 傳送中文時可能遇到編碼差異。改用 Qwen3 4B Instruct,並以 JSON Unicode escape 傳送中文後,模型已能正常以繁體中文回覆。

下一步可在 Windows 電腦端加入語音辨識與台語文字處理,再將辨識結果傳給 Ollama;收到回答後,由 Windows 端的台語語音合成播放。BRIX 專責本地模型推論,Windows 則負責麥克風、喇叭與互動介面。

本次成果:遠端 API 連線成功,Instruct 模型成功以繁體中文回覆。
智慧生活科技專業社群|Ollama 本地 AI 實作紀錄