Select Page
本機 AI 值得用嗎?DSH、NVIDIA PAIR、EXO 與 Portable Computer 比較

本機 AI 值得用嗎?DSH、NVIDIA PAIR、EXO 與 Portable Computer 比較

本機 AI 的價值,不能只用「回答有沒有雲端模型聰明」判斷。當工作需要反覆讀取私人文件、呼叫工具,或同時執行多個任務,模型之外的資料流向、硬體安排與執行框架,也會影響實際成果。

DSH Privacy Router、NVIDIA PAIR、EXO 與 Perplexity Portable Computer,分別處理隱私分流、區網排程、模型分散運算與完整 Agent 工作流程。它們可以放進同一張架構圖理解,卻不是可以直接互換的產品。

本機 AI 先看三件事:資料、容量與工作流程

第一件事是資料能不能外傳。即使雲端模型能力更強,有些內容仍應留在自己的設備或信任的內部網路。第二件事是硬體能不能容納模型,以及能否在可接受的時間內完成工作。第三件事是模型以外的操作,像讀檔、搜尋、驗證與產出文件,有沒有完整流程。

這些問題需要分別處理。推論引擎負責執行模型,Agent 框架負責組織工具與任務,路由器則決定請求送到哪裡。還不熟悉這些層次,可以先看 本地大模型推論框架比較,再判斷自己缺的是哪一層。

DSH Privacy Router:先判斷哪些內容能送雲端

DSH Privacy Router 是 DeepSeek Harness 的 Host 端插件。它先用本機規則與模型檢查文字,分類為 publicsensitiveunknown。只有通過公開分類的請求才送雲端,敏感或不確定的內容留在本機。這是隱私導向的分流,不是單純把困難問題全部轉給大模型。

預設雲端上下文只包含本輪通過檢查的純文字、固定系統提示與空工具清單。專案文件說明,私有對話與本機工具結果不會直接附帶過去,雲端回答則直接串流回目前對話,不由本機模型再次改寫。開啟特定相容事件功能後,才可納入先前已核准的雲端對話。

公開程式可看到兩個關鍵控制:雲端分支只在分類結果為 public 時啟用,真正送出時會重新組合訊息,並把工具列表設為空。這比只在提示詞寫「不要洩漏資料」多了程式層的限制。不過,這仍不代表整個應用的所有網路流量都受到同一個插件管理。核對版本見 DSH 路由程式

導入前要知道,這個公開儲存庫不包含展示用 Web UI 或 DSH 原始碼補丁。README 的介面展示屬於構想,不能把安裝插件理解成會立即得到完整視覺介面。先依文件設定可信任的本機 Provider,再確認實際連到的服務確實位於可信任環境。

自動發現本機算力,不等於自動信任任何設備

配套的 Local AI Discovery Server 用 mDNS/DNS-SD 宣告區域網路中的 OpenAI 相容 API,提供主機、連接埠、模型清單位置與認證需求等資訊。它負責讓服務被找到,本身不執行模型,也不是 API 代理。DSH 端仍需要對應的發現整合。

發現服務與信任服務是不同步驟。在家中看得到的端點,不代表公司文件就適合送過去,更不用說共享空間的陌生設備。評估時應確認設備由誰管理、是否使用認證,以及請求最後送往哪個端點。服務名稱帶有「local」,不能取代這些確認。

NVIDIA PAIR:把獨立請求分配給區網內的電腦

NVIDIA Personal AI Router,也就是 PAIR 目前以測試版提供本機推論路由,支援相容的 Windows、Linux、macOS 系統,搭配 Ollama 與 LM Studio。它的目標是讓應用使用單一入口,把多個推論請求分配給可用設備。實際平台與硬體組合,應以當前官方支援清單為準。

PAIR 不會把多台電腦的顯示記憶體合成一個大空間,也不會把同一個推論請求拆到多台執行。每個請求會交給一個符合條件的節點,該節點負責執行到結束。當多個 Agent 同時提出獨立請求時,其他設備才有機會分擔排隊壓力。

官方技術文件說明,排程會考慮節點是否在線、推論引擎是否可用、是否有指定模型,以及目前負載。節點經過配對後,通訊使用相互 TLS 驗證與加密。這解決的是信任節點之間的推論傳輸,不能延伸成 Agent 使用任何搜尋或外部工具都不會外傳資料。詳見 NVIDIA PAIR 技術說明

若工作主要是一個接著一個的長推論,或只有一台設備裝了需要的模型,多加節點的效益可能有限。評估時要看整個任務完成時間,以及 Jobs 紀錄是否真的顯示不同節點處理請求,而不只看畫面上出現幾個 Agent。

EXO:把模型拆到多台設備,與 PAIR 的用途不同

EXO 的核心包含模型分片與分散推論,會考慮裝置資源及網路拓樸,讓單一設備放不下的模型有機會跨設備執行。README 介紹了 MLX、張量平行與 Thunderbolt RDMA 等能力,這和 PAIR 分派完整請求的做法不同。

分散推論需要設備交換資料,速度取決於模型、切分方式與實際互連。能容納更大模型,不代表每次回答一定更快,也不能直接把各台硬體的標示效能相加。想理解雙機部署的取捨,可延伸閱讀 雙機本地模型部署與實測整理,並分開看容量與速度。

截至 2026 年 9 月 14 日核對,EXO 的 平台支援文件 把 Apple Silicon macOS 列為已測試與維護的主要平台,Linux CUDA 與 DGX Spark 則仍列在規劃區。這不等於所有相關實驗都不存在,但不足以把 DGX Spark 支援寫成已成熟可用的標準路徑。

Portable Computer:把本機模型接成完整 Agent

Perplexity Portable Computer 的定位是本機優先的 Agent 軟體,不是一款 Perplexity 品牌硬體。官方發表資料以 DGX Spark 為首波設備,將模型、執行框架與工作紀錄放在本機,必要時再經授權使用搜尋、連接器或雲端模型。平台支援與訂閱資格會更新,安裝前應重新確認產品入口。

比起單純啟動模型,它更重視框架如何配合本機模型的能力:縮小核心工具集合、按需載入 Skills、整理過長上下文,以及加入結果驗證。官方研究也說明,工具執行受作業系統層的沙箱限制,沙箱不可用時不退回無隔離執行。參考 Perplexity 的本機優先 Agent 研究

雲端顧問只接收核准的上下文並回傳文字建議,沒有直接操作本機檔案與工具的權限。是否開啟顧問,以及採手動或自動核准,由使用者設定。因此,「本機優先」仍須搭配實際的連外與核准政策來理解。

中文導讀也可參考 AI 郵報 Portable Computer 整理。其中的硬體需求、測試分數與上市資訊,應回到對應官方文件與測試條件核對,不宜直接推論成所有任務的表現。

四個方案怎麼分?先對照自己要解的問題

方案主要處理的問題不能直接推論的能力
DSH Privacy Router判斷文字是否可送雲端並限制上下文不能保證分類永遠正確或涵蓋所有資料出口
NVIDIA PAIR把獨立推論請求分配到可用的區網節點不合併顯示記憶體,也不切分單一推論請求
EXO跨設備切分模型與分散推論不代表任意平台組合都已支援或一定加速
Portable Computer整合本機模型、工具、沙箱與授權連外本機優先不代表開啟外部服務後仍完全離線

這張表依前述官方文件整理的是功能範圍,不是效能排名。若想組合使用,還要核對 API、模型格式、端點與執行框架是否相容,不能假設名稱都和本機 AI 有關就能直接串接。

隱私真正難的地方,是內容看起來不敏感

沒有姓名、電話或金鑰,不代表內容可以公開。例如尚未發表的產品構想、內部定價方法或獨特研究策略,就算去掉身分資訊,仍可能包含不應外傳的價值。這是自動隱私分類需要面對的限制,不能只用是否偵測到個資判斷。

DSH 用規則加模型檢查,Portable Computer 也描述了分類器與核准機制,但分類器仍可能漏判。對不可外傳的工作,應有明確的本機限定設定,以及實際阻止連外的權限或網路政策。對允許求助雲端的工作,則要看清楚送出的片段、歷史上下文與工具結果。

驗收可以從幾種情境開始:一般公開問題、含機密的文件、依賴前文的「繼續」、分類失敗,以及雲端要求呼叫工具。確認它們分別送去哪裡、留下什麼紀錄,並能追查答案由哪個模型產生。不要為了觀察系統又把完整機密複製進不受控的日誌。

開始之前,先用現有設備跑完一個真實任務

先挑一個可驗證的小工作,例如整理不含機密的測試文件,用現有設備與合適模型完成一次。若問題是模型服務與應用怎麼接,可以先參考 LibreChat 與 Ollama 的串接方式。等單機流程穩定,再處理分流與多機。

接著辨認瓶頸。獨立請求很多、都擠在同一台,才評估 PAIR。模型放不下,才研究 EXO 等分散推論路線。需要選擇哪些內容送雲端,再檢查 DSH 的分流設計。想降低工具、沙箱與任務流程的整合工作,則可評估 Portable Computer。

本機推論能減少按量 API 費用,但仍有硬體、電力、維護與等待時間。選擇性使用雲端,也可能產生額外用量。先量出自己的任務品質與完成時間,再決定是否擴充設備,會比從硬體規格開始更容易做出合適選擇。

本機 AI 路由常見問題

DSH Privacy Router 會把困難問題自動交給雲端嗎?

它主要依隱私分類分流,只有判定為 public 的請求才走雲端。敏感、不確定或無法分類的內容留在本機,不能視為單純依難度切換模型。

NVIDIA PAIR 能把多台電腦合成一張大顯卡嗎?

不能。PAIR 將獨立推論請求分派給符合條件的單一節點,不合併顯示記憶體,也不把一個請求切到多台電腦執行。

EXO 和 PAIR 差在哪裡?

EXO 包含跨設備模型分片與分散推論能力,PAIR 則分派完整的獨立請求。選擇前要先分清楚瓶頸是模型容量,還是同時有太多請求排隊。

Portable Computer 等於完全離線嗎?

不一定。核心工作預設在本機,搜尋、連接器與雲端顧問則可能連外。是否外傳資料,取決於開啟的功能、授權設定與實際送出的上下文。

本機 AI 一定能避免機密外洩嗎?

不能只靠模型位置保證。還要檢查服務端點、工具、搜尋、日誌與雲端升級路徑,自動分類也可能漏判不含個資的商業機密。

AI 改壞程式怎麼救?非工程師的 GitHub 入門與 Vibe Coding 版本管理指南

用 AI 做網站或小工具,最讓人緊張的時刻,往往是原本正常的功能突然壞掉,請它修一下,又改出更多問題,最後連哪個版本能用都說不清楚。

Vibe Coding 想要改得放心,先要有能確認的版本紀錄,Git 負責保存程式變更,GitHub 提供遠端儲存庫與協作流程。你不必先背熟指令,但要能回答改動存在哪裡、是否進入主分支,以及復原會影響哪些內容。

這篇 GitHub 入門指南以能讀寫專案檔案的 AI 開發工具為情境,若使用 Lovable 這類 AI App Builder,也要先確認平台的版本紀錄、GitHub 同步與部署各由誰管理,避免把不同系統的「已儲存」當成同一件事。

Git 和 GitHub 差在哪?先分清楚存檔與提交

Git 是版本控制工具,可以在自己的電腦上運作,GitHub 則是託管 Git 儲存庫的平台,讓程式可以放到遠端、比較修改內容,再透過 Pull Request 討論與合併,使用 Git 不一定要使用 GitHub,也可以搭配其他託管平台。

按下編輯器的儲存,只代表檔案寫入磁碟,commit 才是建立一筆 Git 提交紀錄,通常記錄的是放入暫存區的內容,也就是這次選定要提交的變更,尚未加入版本控制、被忽略,或還沒選入暫存區的修改,不會因為做了一次 commit 就全部被保存,細節可參考 Git 官方的變更記錄說明

因此,第一次請 AI 接手專案,可以先讓它檢查是否已有 Git 紀錄、目前在哪個分支,以及有哪些未提交的檔案,接著在功能確認正常後建立一筆容易辨識的提交,例如「完成登入表單驗證」,再開始下一輪修改。

先檢查這個專案的 Git 狀態,列出目前分支、最新提交,以及已修改和未追蹤的檔案。說明這次應保存哪些內容,排除密碼與無關檔案,再建立一筆清楚描述功能狀態的提交。

Commit、push、PR、merge,是不同的完成狀態

commit 留在本機,不代表遠端已有相同內容,push 把提交送到指定的遠端分支,也不代表改動已進入主分支,PR 是提出合併變更的請求,merge 才會把變更整合到目標分支。

採用 PR 流程時,要檢查 PR 指向哪個目標分支、狀態是 Open、Closed 還是 Merged,Closed 只表示請求關閉,不能直接理解成已合併,部分專案允許直接推送主分支,因此 PR 是一種協作與審查流程,不是所有 Git 專案的必經步驟,可參考 GitHub 的 Pull Request 說明

還有一個容易漏掉的狀況:PR 已合併後,又把新提交推到原來的功能分支,push 可能成功,但後來的提交不會自動補進那次已完成的合併,要另外確認是否需要新 PR,或依專案流程再次整合。

儲存庫更新與網站上線也要分開驗收,GitHub 上看得到程式,不代表正式網站正在執行那一版,部署平台可能使用另一個分支,也可能建置失敗。像 用 Claude Code 製作網站的完整工作流,最後仍要回到實際網址確認功能與畫面。

上傳前檢查機密,補上 .gitignore 不會抹掉歷史

API 金鑰、資料庫密碼、含憑證的設定檔,不應直接放進提交,請 AI 同時檢查檔案清單與即將提交的內容,並依專案需要設定 .gitignore。私有儲存庫也應避免存放這些機密。

.gitignore 主要處理尚未追蹤的檔案,已經被 Git 追蹤的檔案,不會因為新增忽略規則就自動停止追蹤,既有提交中的內容也仍然存在,這是 Git 官方文件 明確區分的行為。

如果金鑰已經外洩,第一步是到服務提供者那裡撤銷或更換金鑰,再處理儲存庫內容與歷史,只把目前檔案刪掉,不能讓舊金鑰失效。歷史清理還可能影響協作者,應依 GitHub 的機密資料處理指引 安排。

換電腦與同步協作,clone 和 pull 各做什麼?

從 GitHub 下載 ZIP,取得的是某個版本的檔案快照,要延續既有 Git 開發流程,通常會用 clone 取得儲存庫與版本歷史,讓本機能追蹤遠端。只拿到 ZIP,不能直接假設原來的 Git 設定和提交紀錄也都在。

已有本機儲存庫後,pull 會抓取遠端變更,再依設定整合到目前分支,例如使用 merge 或 rebase,它不只是把遠端檔案下載覆蓋過來,同步前先確認分支、遠端,以及本機尚未提交的內容是否妥善保存,操作語意可查 git pull 官方文件

發生衝突時,讓 AI 說明兩邊原本要保留的行為,再決定如何整合,即使沒有出現文字衝突,也可能發生功能上的衝突。例如一邊調整登入流程,另一邊改了權限判斷,合併成功後仍要把兩個情境都測過。

兩個 AI 同時改專案,先分開實際工作目錄

同時開兩個 AI 視窗,不等於它們各有一份檔案。如果都在同一個工作目錄,一方存檔、切換分支或整理暫存內容,仍可能干擾另一方。只有不同任務名稱或分支名稱,也不足以證明工作檔案已隔離。

Git worktree 可以讓同一個儲存庫擁有多個工作目錄,分別檢出不同分支。

例如一份處理登入,一份調整版面,完成後再逐一審查與合併。它們有各自的工作檔案與部分狀態,但仍共享儲存庫資料及部分參照,不能把它當成完全獨立的安全沙箱。詳見 Git worktree 官方文件

要確認的,是每個 AI 實際使用的 worktree 根目錄與分支,若測試會共用資料庫、輸出位置或服務連接埠,也要另外安排。想把這套分工放進操作介面,可以延伸閱讀 Orca ADE 的多 Agent 與 worktree 工作方式

開始平行開發前,請列出每個任務的實際 worktree 根目錄、分支及修改範圍,確認彼此不會寫入同一份工作檔案,並檢查測試資料庫、輸出資料夾與連接埠是否共用。完成後逐一提交、驗證與合併。

AI 改壞了怎麼復原?先辨認改動在哪個階段

先暫停繼續修改,保留目前差異,再確認錯誤改動是否已提交、推送或合併。直接對 AI 說「全部還原」,容易連原本想保留的工作也一起丟掉。

restore 用來恢復指定檔案的內容,但來源要說清楚,未指定來源時,一般工作目錄還原預設取自暫存區,不一定是最後一次提交,使用 --staged 則是調整暫存區,預設來源為 HEAD,並不等於刪除工作檔案,會覆蓋工作目錄的還原操作可能丟失未提交修改,執行前要確認路徑、來源與備份。參考 git restore 官方文件

revert 則是用新的提交,抵銷指定舊提交帶來的變更,它保留既有歷史,常用在已分享的提交,但可能遇到衝突,也不代表整個專案必然回到某個舊時間點,若要修正遠端主分支,新的復原提交仍需依流程推送、合併與部署。參考 git revert 官方文件

檔案突然不見,也不能立刻認定永久刪除,可以先查是否切到別的分支、內容是否被放進 stash,或是否有提交紀錄與編輯器備份,不過,從未提交也沒有其他備份的內容,Git 並不保證能救回。

先不要執行會丟棄修改的操作,請查明問題改動是否已提交、推送與合併,保留目前差異,列出建議復原的檔案、來源版本及會失去的內容,再說明應使用檔案還原、復原提交或其他方法,並列出復原後的驗證項目。

Diff 要看什麼?先問比較的是哪兩個版本

看到大量新增或刪除行數,先確認比較範圍,GitHub PR 採用三點差異比較,從共同祖先到功能分支目前版本,重點是這個分支引入了什麼,直接比較兩個分支的最新狀態,得到的內容可能不同,尤其主分支已經往前更新時,參考 GitHub 的分支差異說明

行數只是定位問題的線索,格式調整、自動產生的檔案或重新命名,都可能讓變動看起來很大。

更實際的檢查是:改動是否符合這次需求、是否碰到無關檔案,以及重要功能有沒有測過。

把「完成了嗎」改成一份可查證的交付回報

對非工程背景的人來說,最有用的習慣,是要求 AI 在每次交付時附上可以追查的狀態。下

面這段可以直接加入日常任務:

請用非工程師看得懂的方式回報這次交付,列出本機分支與最新提交、遠端分支是否已包含這次變更、PR 連結與合併狀態.若有多個 AI,列出各自的實際工作目錄。說明差異比較的基準、改了哪些檔案,以及哪些測試或操作情境已通過。若涉及網站上線,另附部署結果與實際驗證網址。沒有完成的步驟請明確標出。

從下一次小修改開始,先保存已確認正常的狀態,再讓 AI 動手。完成後看差異、驗證功能,最後確認遠端與部署狀態。這套習慣建立起來,才能在出錯時知道從哪裡查,而不必每次都靠重做。

GitHub 與 Vibe Coding 常見問題

不會寫程式,也需要學 Git 嗎?

使用 AI 修改專案時,至少應理解提交、分支、遠端與復原的差別,指令可以交給工具執行,但仍要能確認保存了什麼,以及哪些步驟尚未完成。

Commit 成功就代表已上傳 GitHub 嗎?

不代表。commit 建立本機提交,push 才會把提交送到指定遠端分支,是否合併到主分支,以及是否部署成功,都要另外確認。

PR 已合併後,再 push 就會更新主分支嗎?

不會自動更新。推到原功能分支的新提交,不會追加到先前已完成的合併,應依專案流程建立新 PR 或再次整合,確認新變更已進入目標分支。

Restore 和 revert 有什麼不同?

restore 恢復指定位置的檔案內容,必須確認來源與是否覆蓋未提交修改。revert 以新提交抵銷舊提交的變更,保留歷史,但可能需要處理衝突。

Worktree 可以完全避免兩個 AI 互相干擾嗎?

不能保證。不同 worktree 可分開工作檔案,但仍共享部分 Git 資料,外部資料庫、服務與輸出位置也可能共用,應確認目錄、分支與執行環境的分工。

模型蒸餾是什麼?原理、DeepSeek 案例與本地部署取捨

模型蒸餾,是用教師模型提供的學習訊號訓練學生模型,讓學生在指定任務上學會更好的判斷與回應。常見目標是把能力轉移到較容易部署的小模型,降低使用時的資源需求。它需要新的訓練過程,效果取決於教師、學生本身的能力,以及準備了什麼資料。

理解這件事,最有用的起點是分清楚兩種做法:讓學生學教師的機率分布,以及讓學生學教師產生的完整答案。這也能解釋為什麼同樣叫蒸餾,有的需要取得模型內部輸出,有的只靠生成文字就能進行。

模型蒸餾是什麼?教師提供訊號,學生更新參數

Hinton、Vinyals 與 Dean 的知識蒸餾論文提出用大型模型或模型集成的預測分布,訓練另一個容易部署的模型。學生學習的是教師在不同輸入下的行為,不必照抄教師的架構,也不是把教師權重直接截取一部分。

一般離線蒸餾會先準備好教師,再固定教師的參數,由學生反覆預測、計算差距、更新自己的參數。完成訓練後,學生可以獨立推論。若產品另外設計了雲端備援,那是部署流程的選擇,並非蒸餾必然要求。

軟標籤:除了正確答案,還學選項之間的關係

以辨識貓、狗與汽車為例,人工標籤可能只寫「貓」。教師除了選出貓,還會對其他類別給出機率。狗的可能性高於汽車,透露出這張照片在模型眼中更接近哪類事物。這種帶有相對關係的訊號,就是軟標籤的價值。這裡是概念示例,並非實測數據。

經典做法會調整 softmax 的溫度,讓機率分布更平滑,使原本很小的機率差異更容易參與學習。溫度過高也會讓分布過於平均,因此仍需驗證。它不是「溫度越高,學生就越聰明」的設定。

PyTorch 官方教學示範把兩種訓練目標加權:一種要求學生接近教師分布,另一種要求學生符合真實標籤。分布差距可透過 KL divergence 等目標衡量。訓練時仍應保留正確答案的約束,教師的自信不等於答案一定正確。

實作時,直接比對逐 Token 分布通常還需要處理詞彙表、Tokenizer 與序列位置的對齊。光是教師和學生都能生成中文,並不足以保證它們的機率陣列可以直接相減。

回答蒸餾:把教師輸出變成學生的訓練資料

另一條路徑是先讓教師回答問題,整理成「輸入與目標回答」的資料集,再用監督式微調訓練學生。學生逐步學習如何產生這些答案,不需要拿到教師的全部權重。若服務只提供文字輸出,也可能採用這種方式,前提是取得與使用資料的條件允許。

Sequence-Level Knowledge Distillation在機器翻譯研究中,探討把整段生成序列作為蒸餾訊號。放到語言模型的應用裡,資料可以包含回答格式、分類結果、解題步驟與工具使用範例,但具體要教什麼,仍由資料與訓練目標決定。

例如,希望學生整理客服工單,就應準備真實會遇到的問法,要求教師產生正確分類、摘要與缺漏欄位,再經規則或人工檢查。只收集漂亮、流暢的回答,未必能教會學生處理錯字、矛盾敘述與資訊不足。這是本文用來說明資料設計的應用示例。

DeepSeek-R1 的蒸餾模型,為什麼會叫 Qwen 或 Llama?

DeepSeek-R1 官方模型卡說明,Distill 系列以 Qwen 與 Llama 的既有模型為基礎,使用 DeepSeek-R1 生成的樣本進行微調。名稱同時反映了提供訓練訊號的來源,以及學生採用的基礎模型。

因此,DeepSeek-R1-Distill-Qwen 不是把完整 R1 的參數切小,也不能直接當成 R1 的量化版。挑選時應確認學生模型、適用任務、Tokenizer 設定與部署需求。官方基準測試能提供參考,但不能推論小模型在所有領域都等同教師。

蒸餾、微調、量化與剪枝,各自在改什麼?

微調著重於用資料更新既有模型。蒸餾著重於知識訊號來自教師,兩者可以同時成立。用教師生成的答案微調學生,就是常見的交集。LoRA則是透過低秩更新降低需要訓練的參數量,是微調方法之一,本身不代表模型已完成蒸餾,也不等於把基礎模型縮成更少參數。

量化著重於數值表示的精度。Hugging Face 量化文件說明,較低精度的權重表示能降低記憶體需求,並盡量保留準確度。參數量可以不變,但每個權重佔用的空間減少。量化後是否更快,還要看硬體、運算支援與實際負載。

剪枝著重於移除或遮蔽部分權重與結構。PyTorch 剪枝教學展示了不同剪枝方式。權重變成零,不保證一般推論程式就會自動跳過運算。要換成實際加速,仍需相應的結構或稀疏運算支援。

這些方法可以組合,例如先訓練出合用的學生,再評估量化部署。想把概念接到本機環境,可延伸閱讀Qwen 本地部署與 GGUF 設定,但不同模型與硬體的需求要分別核對。

API 已經夠方便,什麼情況還值得蒸餾?

判斷方式是先看工作量與限制。若需求經常改變、使用量不大,直接使用現成模型可能更省事。若每天反覆處理相近任務,而且對回應時間、併發量、離線使用有明確要求,才值得把學生模型列入比較。這是部署規劃上的判斷,並非固定的成本結論。

比較時要把整段使用週期算進去,包括教師生成資料、資料審查、訓練、評估、硬體、維運,以及學生失敗後的重試或轉接。單次推論便宜,不能代表整個專案一定便宜。反過來,網路速度很好,也不會消除資料處理範圍與服務可用性的需求。

開始訓練前,先測未蒸餾的小模型是否已經夠用。如果簡單提示詞或現成模型就能完成工作,便沒有必要為了使用蒸餾而建立訓練管線。需要測試不同本地與雲端模型時,可參考LibreChat 與 Ollama 的整合方式,用同一批任務比較實際結果。

本地蒸餾模型的隱私,要沿著資料流檢查

學生在本機推論,確實可以減少把使用者輸入送往外部服務的需要。不過,隱私取決於整個系統如何傳遞與保存資料,不能只看模型檔案放在哪裡。

先看訓練前的資料準備。如果把內部文件送給雲端教師生成範例,資料在這一步就已經離開本機。再看實際使用時,是否另有雲端搜尋、遠端 Embedding、外部工具、遙測或日誌服務。最後看備援路徑,學生答不好時若自動轉給雲端大模型,轉交的問題、文件與歷史對話仍可能外傳。

有資料不外傳的要求時,應設計為本地處理、明確拒答或交由內部人員處理。允許混合部署時,則應先定義可外傳的資料範圍,並告知使用者何時轉交。把「本地模型」當作隱私保證,容易漏掉真正的資料出口。

實作蒸餾,先定義任務,再決定要不要訓練

以下是依前述方法整理的實務流程,適合用來規劃第一個小型試驗,不代表所有專案都需要同一套訓練參數。

先建立基準與驗收題目

選一個邊界清楚的任務,例如工單分類或固定欄位擷取。先測現成學生模型和教師各自的表現,定義正確率、格式完整性、回應時間與可接受的失敗方式。測試題目應與訓練資料分開,也要包含少見與資訊不足的情況。

生成範例後,先檢查品質

教師輸出需要去重、檢查事實、移除敏感內容,並確認符合任務規格。對答案可直接驗證的題目,優先使用程式規則或單元檢查。若蒸餾的是解題步驟,也不能只檢查最後答案正確,就認定中間推導全部可靠。

選擇訓練訊號,保留比較組

只有教師文字輸出時,可從回答資料微調開始。能取得分布且處理好對齊時,再評估軟標籤蒸餾。進一步的GKD 方法會讓學生在自己生成的序列上取得教師回饋,處理訓練資料與學生實際生成行為之間的差異。方法更複雜,並不代表每個任務都需要採用。

驗證泛化能力,再測實際部署

The False Promise of Imitating Proprietary LLMs在其研究設定下發現,模仿模型可以學到很像教師的回答風格,卻未必同步取得相同的事實能力。這項結果提醒我們,應檢查資料覆蓋之外的任務,不能只以流暢程度驗收,也不宜把該研究解讀成所有蒸餾都無效。

完成離線評估後,還要用目標硬體測記憶體、延遲與同時請求的表現。如果任務需要查詢經常更新的內部資料,可考慮讓模型搭配檢索,而非每次更新文件都重新蒸餾。站內的CrewAI 與 RAG 概念整理可作為理解工具與檢索分工的延伸閱讀。

模型蒸餾常見問題

模型蒸餾就是把大模型壓縮成小檔案嗎?

蒸餾是用教師訊號訓練學生,模型檔案大小取決於學生架構與數值精度。若只改變權重精度以縮小檔案,通常是在做量化。

只有教師模型的 API,也能做蒸餾嗎?

若 API 提供的輸出及使用條件允許,可以收集教師回答來微調學生。這與取得完整機率分布後進行的軟標籤蒸餾不同。

蒸餾後的小模型一定和大模型一樣強嗎?

不一定。效果受學生原本能力、資料覆蓋與任務影響,必須使用獨立題目評估,不能只看回答是否流暢。

Token 成本低,還需要自己蒸餾嗎?

未必。先比較現成模型是否夠用,再看使用量、延遲與離線需求。成本需要包含資料準備、訓練和維運,不能只看單次推論。

把小模型用在能驗收的任務上

蒸餾最值得關注的成果,是學生能否在你的任務上穩定達到要求,同時讓部署更容易。先建立現成模型的基準,找出缺口,再決定要準備什麼教師資料。當品質、速度與整體成本都有實際驗證,才能判斷這次訓練是否值得。

Ornith 1.5 35B 值得用嗎?自我改進、實測與本地部署解析

Ornith 1.5 35B 值得用嗎?自我改進、實測與本地部署解析

Ornith 1.5 把本地 AI 的一個老問題攤得很清楚:每秒吐出多少 token,和最後有沒有把工作做完,是兩回事,35B-A3B 版本靠 MoE 架構降低每個 token 的運算量,在公開實測中展現速度優勢,也出現思考太久、額度用完卻沒交出程式碼的案例。

如果你想找一顆接在本地程式代理後面的模型,Ornith 1.5 35B 值得列入測試,評估時要一起看量化格式、記憶體餘裕、工具相容性與任務完成率,下面先拆開「自我改進」的意思,再看官方評分、兩組不同硬體的實測,以及實際上手順序。

Ornith 1.5 更新了什麼?先分清楚三種模型

Ornith 1.5 家族包含 9B Dense、35B MoE 與 397B MoE。手機部署的主角是 9B-Mobile 量化版本,與旗艦商用模型比較的宣傳則主要圍繞 397B。本文聚焦中間的 35B-A3B,不能把另外兩款的部署條件或成績直接套過來。版本資訊可從 官方模型集合查看。

如果你看過 Ornith 1.0 的自我拆解任務方式,這次最主要的延伸是把「生成訓練任務」也納入改善流程。

自我改進發生在訓練期間,下載後不會自動改寫權重

依照 Ornith 官方技術說明,模型在訓練中依序扮演三個角色:先根據程式庫與過去解題紀錄出題,再安排工具、指令與拆解方法,最後嘗試解題。結果回饋到強化學習流程,讓題目、執行安排與解法一起改善。

出題也有條件:題目要能驗證、難度合適,而且不能一直重複,官方把目標成功率設在約 20%,讓模型練習有挑戰但仍可能解出的題目。這個百分比是訓練課程的設計目標,不是產品的答題正確率。

可以把它想成練習寫程式時,不只修答案,也回頭調整練習題與測試方式。

下載回來的則是訓練後的模型權重,日常對話、保存記憶或反覆提示,不代表權重正在持續更新。

AlphaLab 對自我改進邊界的分析也提醒,環境與評分規則仍由人設計,分數上升還要確認是否真的學會解題。

35B-A3B 的 A3B,不是記憶體只要放下 3B

MoE 每次只選部分專家參與計算,但其他專家的權重仍要有地方存放。活躍參數主要影響每一步的運算量,總權重與快取才是估算記憶體的起點。官方 35B 模型頁列出約 3B 活躍參數,BF16 權重約 70GB,原生上下文為 262,144 token,模型規格與啟動範例可作為設定依據。

以目前 官方 GGUF 檔案清單為例,Q4_K_M 單一模型檔約 21.71GB,換算約 20.22GiB,這還沒加上推論引擎、上下文快取或視覺投影檔,因此「有 24GB 顯示記憶體」只能作為測試起點,不能直接承諾長上下文與多個並行任務都放得下。

12GB 或 16GB 顯示卡若想跑這個 Q4 檔,通常還得規劃部分權重放在系統記憶體,或改用其他量化版本,能載入模型、能順利對話、能在長任務中維持速度,應分開驗收。Mac 使用統一記憶體,也要預留系統空間,可搭配 本地 AI 的記憶體與頻寬選擇理解這個差別。

官方評分顯示程式能力進步,但要連測試框架一起看

以下是官方模型卡中同尺寸模型的部分成績。

Ornith 1.5 的結果為團隊自報的五次執行平均,並非本文重跑,也不等於所有電腦都會得到相同結果。

測試Ornith 1.5 35BOrnith 1.0 35BQwen3.6 35B
Terminal-Bench 2.1/Terminus-267.864.252.5
SWE-bench Verified79.075.673.4
SWE-bench Pro59.650.449.5
Ornith 1.5 35B、Ornith 1.0 35B 與 Qwen3.6 35B 的三項官方程式評分比較
資料來源:Ornith 35B 官方模型卡。各項測試使用各自的評測設定,不能相加成通用能力分數。

Terminal-Bench 的上述結果使用 Terminus-2,SWE-bench 使用 OpenHands。工具、提示、可用時間與上下文都會影響代理表現。「追平 Claude Opus」應限於官方列出的特定 397B 比較,無法據此宣稱 35B 全面取代商用模型。

對上 Qwen3.8 27B:生成得快,整個任務卻可能更慢

DIY Smart Code 的 Benchy 本地測試使用 RX 7900 XTX 24GB、Ryzen 9、64GB 系統記憶體與 Ollama,比較兩款 Q4 模型。Ornith 測試標示 32K 上下文。這是作者自建測試集的一組案例,量化檔案與測試工具的細節限制了外部重現,不能當成通用排名。

同一組 Benchy 案例Ornith 1.5 35BQwen3.8 27B
通過項目18/2120/21
生成速度約 74 tok/s約 58 tok/s
提示處理速度約 850 tok/s約 240 tok/s
整組耗時約 26 分鐘約 17 分鐘
Benchy 測試中 Ornith 與 Qwen 的通過項目、生成速度、提示處理速度與總耗時比較
資料來源:DIY Smart Code,2026 年 8 月 22 日公開案例。數值依逐字稿約數整理,並非本文實測。

最有參考價值的是 DAG 非同步任務排程題:Ornith 花了約 18,000 個思考 token,耗盡輸出額度後沒有交出最終 Python 程式,Qwen 則完成程式並通過該題檢查。所以每秒輸出較快,仍可能因為思考與重試較多,拖長整個工作的時間。

這也不能反推成所有 MoE 都不擅長推理,或 Qwen 永遠比較穩,模型、量化、引擎與題型都不同,架構本身不能單獨解釋全部差異,要比較自己的程式任務,可參考 Qwen3.8 27B 本地部署教學,固定測試條件再重跑。

雙 GB10 的 NVFP4 實測:減少搬運,也能讓解碼加速

CyberQ 的雙 GB10 實測是在另一套硬體與 vLLM 環境中比較 BF16 與 NVFP4。它固定解碼 800 token,暖機後取三次量測中位數,因此較適合觀察格式差異,不適合直接和前面的 Ollama 成績排高低。

雙 GB10/TP=2BF16NVFP4
解碼吞吐量48.41 tok/s101.86 tok/s
12,001 token 提示處理2,767 tok/s4,141 tok/s
CyberQ 雙 GB10 測試中 BF16 解碼 48.41 tok/s 與 NVFP4 101.86 tok/s 的比較
解碼約為 2.10 倍。這是特定硬體與引擎的量測結果。

該測試的 NVFP4 路徑先以低位元格式搬運權重,再反量化計算。當瓶頸是記憶體頻寬,減少搬運量就可能抵銷反量化成本。這是推論效率改善,不能解讀成硬體原生算力增加。

品質抽查中,兩種格式在 AIME 2026 都完成並答對 23/30 題,各有 7 題被輸出上限截斷。兩邊共同完成的 22 題答案一致,但答案一致不代表逐 token 的思考過程相同,也不能延伸成量化完全不損失品質。

本地部署怎麼開始?先讓短任務與工具呼叫跑通

先選權重格式與執行工具。桌面試用可從 GGUF 與 Ollama、llama.cpp 相容工具開始,伺服器則參考官方 vLLM 或 SGLang 範例。還不確定差別,可先看 本地大模型推論框架比較

下載時認明 原始模型庫官方 GGUF官方 NVFP4。另有 AtomicChat 的 GGUF 轉換版本可比較,請記錄實際檔名與量化等級,同樣寫 Q4 不表示所有檔案與執行結果完全相同。

測試時先縮短上下文、一次處理一個請求,確認記憶體與基本輸出正常,再逐步拉長。官方雖提供延伸到約 1M token 的設定,卻也提醒長上下文縮放可能影響一般長度的品質,不必第一次啟動就把視窗開到最大。

接代理前,再測試工具名稱、參數、工具結果回傳,以及模型能否繼續下一步。模型能輸出 tool_calls,只代表這段格式可用,MCP 伺服器還需要由代理程式接上。純聊天成功,不能代替完整工具流程驗收。

最後設定整個任務的時間、輸出與重試上限,並檢查所用引擎是否支援獨立思考額度。只縮小總輸出上限,可能更早截斷最終答案。日常試用可先用幾個有明確驗收條件的小任務,比較完成時間、人工修正量與失敗原因,再決定是否放入長時間自動化工作。

授權與手機部署,哪些說法還要保留?

T客邦的發布報導有助於了解系列定位,但授權敘述與官方 metadata 不一致。

本文以官方模型頁標示的 MIT 為準。

同樣地,9B-Mobile 支援行動裝置的宣稱,不能保證每一款手機都有足夠可用記憶體、支援對應模型格式,或能維持長上下文。先確認使用的 App、量化檔與裝置條件,比直接照搬桌面版的速度數字有用。

常見問題

Ornith 1.5 35B-A3B 是只有 3B 參數嗎?

不是。它是 35B 級 MoE 模型,每個 token 約啟用 3B 參數。儲存與載入仍需考慮完整權重,以及快取和引擎額外用量。

Ornith 1.5 放在本地使用會自己越來越聰明嗎?

官方的自我改進是訓練流程。下載後一般執行推論,不會因為聊天次數增加就自動更新模型權重。

24GB 顯示卡一定能跑 35B 的完整上下文嗎?

不能保證。官方 Q4_K_M 檔約 20.22GiB,還需預留引擎與快取空間。應從短上下文實測,再逐步調整。

Ornith 1.5 和 Qwen3.8 27B 該選哪個?

先用自己的任務比較。公開 Benchy 案例中 Ornith 生成較快,Qwen 通過較多項目。這組結果只適用於該測試條件。

這是美國團隊所推出的模型

Ornith 支援工具呼叫,就能直接連 MCP 嗎?

還需要代理程式與 MCP 連接層。應測試參數格式、工具執行與結果回傳的整個流程。

先看能否完成你的工作,再看分數有多高

Ornith 1.5 值得研究的地方,是它把練習題、工具安排與解法放進同一條訓練流程。而對本地使用者來說,35B-A3B 的實際價值仍要靠任務驗收:能不能在現有記憶體內跑穩、工具是否接得上,以及等待之後有沒有拿到可用成果。

先挑幾個你每週真的會做的工作,讓 Ornith 與現有模型各跑一次。保留設定、耗時與失敗紀錄,往往比看一張總排名更容易做出選擇。若想了解前述測試工具的設計,可再看 Benchy 測試工具建置說明

AI 數位人本地部署教學:Qwen3、Qwen3-TTS、LiveTalking 串接

AI 數位人本地部署教學:Qwen3、Qwen3-TTS、LiveTalking 串接

把 AI 對話、即時語音和會動的人像放在同一台電腦上,現在已經可以做出一套不依賴雲端 API 的互動數位人,用 faster-whisper 聽懂麥克風,讓 Qwen3 產生回答,再交給 Qwen3-TTS 合成聲音,最後由 LiveTalking 完成口型同步與 WebRTC 串流。

先講我的結論。這套方案的價值是隱私、角色控制與離線能力,不是安裝後完全沒有成本。模型權重下載完成後確實不需要按次支付 API 費用,但顯卡、記憶體、硬碟、電力與維護時間仍然是成本,所謂 8GB 顯存能跑,也必須以較小的 LLM、量化權重和分階段載入為前提.若想讓 14B LLM、Whisper large-v3、1.7B TTS 與口型模型同時常駐,16GB 顯存仍可能不夠。

整套本地 AI 數位人怎麼運作

這不是單一模型,而是一條由五個服務組成的即時管線。

  1. VAD 判斷使用者何時開始與停止說話
  2. faster-whisper 把麥克風聲音轉成文字
  3. Qwen3 與 llama.cpp 根據角色設定產生回答
  4. Qwen3-TTS 把回答轉成指定音色的語音
  5. LiveTalking 接收音訊並驅動嘴型,再透過 WebRTC 顯示互動人像

這種模組化做法和我之前整理的 Hugging Face speech-to-speech 本地即時語音 Agent 是同一條思路。每一層都能替換,但每一層也有自己的模型、連接埠與執行環境。LiveTalking 不會自動知道 Qwen3-TTS 在哪裡,兩者中間仍需要官方支援的 TTS 外掛,或一個把生成音訊送到 /humanaudio 的橋接程式。

先算顯存,不要先相信 8GB 宣傳

元件RTX 4090 範例占用低顯存調整
Qwen3-14B Q4_K_M約 9GB改用 8B 或 4B 的 Q4_K_M
faster-whisper large-v3約 3GB改用 medium,準確度會有取捨
Qwen3-TTS 1.7B約 4GB改用 0.6B 或依序載入服務
Wav2Lip 256約 1.3GB降低批次並避免其他 GPU 程式常駐
Qwen3、Whisper、Qwen3-TTS 與 Wav2Lip 的顯存占用比較圖
這是 RTX 4090 整合環境的估計值,不同量化、上下文長度與 CUDA 版本都會改變結果

四個元件加起來約 17.3GB,還沒算 CUDA context、瀏覽器與暫存空間。16GB 顯卡跑到 99% 甚至整台機器失去回應,並不意外。6GB 顯存可以先用 Qwen3-4B 的 GGUF 量化版,並把語音辨識改成 medium。8GB 到 12GB 則適合 Qwen3-8B 搭配較小 TTS,或讓部分元件使用 CPU。若想了解 GGUF、llama.cpp 與 Ollama 的取捨,可以先看 本地大模型推理框架比較

第一步,在 Windows 準備 WSL 2

這套整合方式把 llama.cpp 放在 Windows,語音與數位人服務放在 Ubuntu 24.04 的 WSL 2。先用系統管理員身分開啟 PowerShell。

wsl --update
wsl --install -d Ubuntu-24.04

Windows 使用者目錄的 .wslconfig 可以設定記憶體與鏡像網路。32GB 是範例,請依實際 RAM 調整,不要把主機記憶體全部交給 WSL。

[wsl2]
memory=32GB
networkingMode=mirrored

[experimental]
hostAddressLoopback=true

修改後重啟 WSL。

wsl --shutdown

進入 Ubuntu 後先用 nvidia-smi 檢查 GPU。NVIDIA 的 Linux 驅動不要再裝進 WSL,CUDA passthrough 由 Windows 顯示卡驅動提供。AMD 顯卡不能照搬這套 CUDA 整合包,需要改走 ROCm 支援的元件,或把無法使用 ROCm 的部分移到 CPU。

專案最好放在 Linux 家目錄,不要直接在 /mnt/c 執行。這能避開 I/O 速度、權限與換行格式問題。

mkdir -p ~/setup
cp -r "/mnt/c/Users/YOUR_NAME/Desktop/AI/." ~/setup/
cd ~/setup
sudo apt update
sudo apt install -y ffmpeg dos2unix python3-venv
dos2unix *.sh
chmod +x *.sh

第二步,用 llama.cpp 啟動 Qwen3

llama.cpp 提供 OpenAI 相容 HTTP 服務,語音管線不必知道底層跑的是 GGUF。16GB 以上可以從 Qwen3-14B 的 Q4_K_M 開始,8GB 到 12GB 建議改成 8B,4GB 到 6GB 則從 4B 測試。

llama-server -m E:\llama.cpp\models\Qwen3-14B-Instruct-Q4_K_M.gguf ^
  -np 1 -c 8192 -fa on --temp 1.0 --top-p 0.95 ^
  --host 0.0.0.0 --port 8090

新版 llama.cpp 文件也開始使用 llama serve 名稱,實際命令要以下載版本為準。Windows 的 8080 有時落在 Hyper-V 保留範圍,所以範例改用 8090。若服務無法綁定,可以先檢查保留埠。

netsh interface ipv4 show excludedportrange protocol=tcp

第三步,安裝即時語音管線

Hugging Face 官方 speech-to-speech 現在以 servetalklocal 為主要命令,舊資料裡的 --mode 已經淘汰。先建立獨立環境,再安裝 faster-whisper 額外依賴。

python3 -m venv ~/venvs/s2s
source ~/venvs/s2s/bin/activate
python -m pip install --upgrade pip
pip install "speech-to-speech[faster-whisper]"

以下範例把 LLM 指向 Windows 上的 llama.cpp。不同版本的 STT 參數名稱可能調整,正式啟動前先執行 speech-to-speech serve --help 對照目前安裝版本。

speech-to-speech serve \
  --stt faster-whisper \
  --stt_model_name large-v3 \
  --language zh \
  --llm_backend responses-api \
  --tts qwen3 \
  --model_name Qwen3-14B-Instruct-Q4_K_M \
  --responses_api_base_url http://127.0.0.1:8090/v1 \
  --responses_api_api_key "" \
  --responses_api_stream \
  --enable_live_transcription

模型全部下載完成後,可以設定 HF_HUB_OFFLINE=1 驗證斷網狀態。這一步比口頭宣稱本地化更可靠,因為只要還有任一個後端指向雲端,就不算完整離線。

第四步,準備 Qwen3-TTS 與參考聲音

Qwen3-TTS 官方最簡單的安裝方式是獨立建立 Python 3.12 環境。它支援聲音克隆、音色設計與串流輸出。更多模型差異和 ComfyUI 節點用法,可以延伸看 Qwen3-TTS 音色設計整理

conda create -n qwen3-tts python=3.12 -y
conda activate qwen3-tts
pip install -U qwen-tts

參考音訊建議控制在 5 到 15 秒,只留單一說話人,沒有音樂與明顯環境聲。參考文字必須和音訊實際內容完全相同,否則容易出現漏字、錯字與音色漂移。情緒也會一起被模仿,所以不要用過度激動的片段當作一般對話基準。

ffmpeg -i ~/setup/ref.wav -ac 1 -ar 16000 -c:a pcm_s16le ~/s2s/ref.wav
ffprobe -v error -show_entries stream=sample_rate,channels,codec_name \
  -show_entries format=duration -of default=nw=1 ~/s2s/ref.wav

只應克隆自己或已取得明確授權的聲音。把真人聲紋放入公開服務前,也要考慮檔案存取權限、提示注入與未授權冒用。

第五步,製作自然的待機人像

人像素材不適合直接使用張嘴、手擋住嘴巴或劇烈轉頭的畫面。先生成嘴唇閉合、正面或微側面的基準圖,再用 Wan2.2 圖生影片做五秒左右的待機動作。提示詞只描述動作,不要重新描述人物外觀,能減少五官漂移。

電影感 16 比 9 構圖,一位成年東亞女性位於畫面右側三分之一,深色安靜房間,左側保留大量空間,螢幕冷光照亮臉部,輪廓帶柔和暖光,嘴唇自然閉合,雙手不遮擋嘴部,自然皮膚紋理,淺景深,真實攝影質感

負面提示詞

張嘴,說話,露齒,正面平光,明亮背景,過高對比,過度曝光,人物置中,多人,手遮擋嘴部,文字,浮水印,塑膠皮膚,過度修圖,卡通,3D 渲染

待機動畫提示詞

人物保持坐姿,只有細微自然呼吸,緩慢眨眼一次,頭部輕微移動後回到原位,嘴唇全程閉合,鏡頭完全鎖定,沒有縮放,沒有切鏡

關閉自動提示詞增強,輸出比例盡量和原圖相同。Wan2.2 常見原生片段是 81 幀、16 FPS,約五秒。若要二十秒待機,不要期待模型一次生成毫無漂移的長鏡頭,可以在自然停頓點循環短片。其他數位人生成思路可參考 LongCat 數位人工作流

第六步,安裝 LiveTalking

LiveTalking 官方目前測試的環境是 Ubuntu 24.04、Python 3.12、PyTorch 2.9.1 與 CUDA 12.8。下面命令照官方版本撰寫,但 PyTorch 下載來源仍應配合自己的 CUDA 驅動,不要盲目安裝 cu128。

git clone https://github.com/lipku/LiveTalking.git
cd LiveTalking
conda create -n livetalking python=3.12 -y
conda activate livetalking
pip install torch==2.9.1 torchvision==0.24.1 torchaudio==2.9.1 \
  --index-url https://download.pytorch.org/whl/cu128
pip install -r requirements.txt

下載官方提供的 wav2lip256.pth 後,把它放到 models,並改名成 wav2lip.pth。範例角色資料夾則解壓到 data/avatars。完成後啟動 WebRTC 服務。

python app.py --transport webrtc --model wav2lip \
  --avatar_id wav2lip256_avatar1 \
  --stun 'stun:stun.l.google.com:19302'

瀏覽器開啟 http://localhost:8010/index.html,按下開始連線。正式讓外部裝置使用時,官方提醒需要 TCP 8010 和 WebRTC 使用的 UDP 連接埠。不要直接把整段 UDP 範圍暴露到公網,應優先放在可信任區網、VPN 或經過限制的防火牆環境。

自己製作 Wav2Lip 角色時,可以把短影片轉成 avatar 資料。素材要維持正面可見、光線穩定與嘴部清楚。

python avatars/wav2lip/genavatar.py \
  --video_path data/video/avatar.mp4 \
  --img_size 256 \
  --avatar_id my_avatar

第七步,正確啟動與串接

我會把服務拆成四個終端視窗,照下面順序啟動。每一步都先確認健康狀態,再開下一個服務。

  1. Windows 啟動 llama.cpp,確認 http://127.0.0.1:8090/v1/models 有回應
  2. WSL 啟動 Qwen3-TTS 或 speech-to-speech,先完成單句語音測試
  3. WSL 啟動 LiveTalking,確認 8010 網頁能顯示待機角色
  4. 最後啟動橋接程式,把 TTS 產生的音訊送入 LiveTalking 的 /humanaudio

作者提供的一鍵整合包包含自訂腳本與橋接程式,並不是 Hugging Face、Qwen 或 LiveTalking 的官方發行版。下載前應先檢查檔案來源、雜湊值、啟動腳本和網路連線,不要把未知執行檔直接放進主要工作電腦。想要長期維護,我更建議從官方專案建立環境,再自行補一個最小橋接層。

WebSocket failed 怎麼排查

  • 先確認服務真的啟動。7860、8010 與 8090 是不同服務,瀏覽器頁面存在不代表後端 WebSocket 已連線
  • 檢查 WSL 網路。修改 .wslconfig 後一定要執行 wsl --shutdown,鏡像網路與 hostAddressLoopback 才會重新載入
  • 確認 Windows 防火牆。先只開必要 TCP 埠,在同一台電腦測通後再處理區網
  • 不要混用 localhost。容器、WSL 與 Windows 各自看到的 127.0.0.1 可能不是同一個服務
  • 確認瀏覽器麥克風權限。遠端網頁通常需要 HTTPS 或 localhost 才能取得安全的麥克風權限
  • 降低 Noise Gate。如果網頁已連線但偵測不到聲音,先關閉門檻測試,再逐步調高
  • 調整 VAD 停頓。約 900 到 1200 毫秒比較不容易搶話,但設定越長,回答開始時間也越慢

可以改成真正的 3D 角色嗎

可以,但不是把 Wav2Lip 模型換成一個 3D 檔案就完成。現在這條路線以 2D 影像或待機影片為基礎,口型模型直接修改臉部像素。真正的 3D 角色需要另外加入 Unity、Unreal Engine 或 WebGL renderer,再把 TTS 音訊轉成 viseme、音素或 blendshape 權重,驅動角色的嘴型、表情、眼神與骨架。

保留 VAD、Whisper、Qwen3 與 Qwen3-TTS,替換最後一層即可。新的輸出流程會變成 TTS 音訊、音素時間軸、3D blendshape、即時 renderer。若只是想讓角色有更豐富動作,可以先使用 LiveTalking 的自訂動作設定或多段待機素材,成本會比完整 3D 低很多。

本地不等於沒有風險

角色資料、聲音與對話都留在本機,確實能降低資料送往雲端的風險。但只要把服務開到區網或公網,就要重新考慮驗證、連接埠、惡意音訊、提示注入與檔案上傳。對話記憶也不是安裝完成就會永久存在,長期記憶需要另外接資料庫、摘要或向量檢索,否則聊天變長後仍可能忘記前文或開始胡亂延伸。

LiveTalking 官方也明確要求,使用此專案製作並發布到平台的內容必須包含 LiveTalking 浮水印與標誌。正式商用前要再確認每個模型、角色素材、聲音和整合程式的授權,不要只看程式能不能跑。

官方資源與參考資料

FAQ

8GB 顯存真的可以跑本地 AI 數位人嗎

可以做出可用版本,但不適合讓 14B LLM、large-v3、1.7B TTS 與口型模型全部以高規格同時常駐。建議改用 Qwen3-8B 或 4B 量化版、較小 TTS、較低 batch,必要時把部分模型放到 CPU。

可以完全離線,不使用任何 API 嗎

可以。前提是 STT、LLM、TTS 和數位人全部使用本地後端,而且模型與依賴已下載完成。設定 HF_HUB_OFFLINE=1 並在斷網環境測試,才能確認沒有隱藏的雲端依賴。

可以用英文或其他語言聊天嗎

可以,但 STT、LLM 與 TTS 三層都要支援目標語言。Whisper 與 Qwen3 的多語能力較完整,最終自然度通常由 TTS 音色與參考音訊決定。中英混合時要額外測試專有名詞、數字與語速。

Mac 可以照這篇安裝嗎

不能原封不動照做,因為本文整合路線依賴 Windows、WSL 與 CUDA。llama.cpp、Whisper 和部分 speech-to-speech 元件可以改走 Apple Silicon 的 Metal 或 MLX,但 LiveTalking 口型模型與整合腳本需要另外確認 macOS 支援,不能直接套用 NVIDIA 命令。

最後怎麼選

如果只是想快速聊天,雲端語音助手會更省時間。如果需求是讓私人對話留在本機、建立固定角色、接自己的資料或研究數位人介面,這套模組化管線就很值得做。我的建議是先讓文字對話跑通,再加入 STT 和 TTS,最後才接 LiveTalking。一次啟動所有元件,只會讓錯誤來源變得難以判斷。

真正值得學會的不是某個一鍵包,而是知道聲音在哪裡變成文字,回答在哪裡生成,音色在哪裡被控制,口型又由哪一個服務驅動。把這五層拆清楚後,未來換模型、換角色、換前端,整套系統仍然能繼續使用。

fal.ai 是什麼?用 Codex Skill 串接圖片與影片生成 API

fal.ai 是什麼?用 Codex Skill 串接圖片與影片生成 API

fal.ai 是一個生成式媒體 API 平台,它把多家圖片、影片、音訊與 3D 模型放在同一套介面下,開發者不必為每一家服務分別串接帳號與 SDK。再把操作規則包成 Codex Skill,就能讓 Codex 根據任務選模型、整理提示詞、上傳參考圖、送出工作、追蹤結果,最後把檔案下載到專案資料夾。

這套方式真正省下的是固定訂閱與切換工具的時間,不是讓付費模型突然變成免費。fal.ai 採預付點數與按量計費,圖片可能依張數或百萬像素計價,影片常依秒數、解析度或單次輸出計價。對偶爾生成、需要跨模型比較的人很有彈性,長期大量生成前則一定要先算成本。

先講結論,fal.ai 適合什麼人

做法適合情況優點要注意什麼
fal.ai Playground偶爾做一兩張圖或測模型不用先寫程式,直接調參數重複任務仍要手動操作
fal.ai 加 Codex Skill固定工作流、批次產出、專案整合能保存規則、命名、目錄與成本檢查需要 API 點數與基本設定
單一平台訂閱高度依賴固定工具與固定模型介面完整,方案可能含較高用量不用時仍可能支付月費
本地 ComfyUI生成量大、重視隱私、已有顯卡沒有每次 API 費用,控制度高需要顯存、硬碟與維護經驗

如果每個月只做少量成品,又想在 Nano Banana、GPT Image、Seedance、Kling、MiniMax 等模型之間切換,按量付費通常比同時維持多個訂閱直覺。若每天大量產圖,或素材不能離開本機,則可以先看 Krea2 與 ComfyUI 圖像編輯工作流,影片生成也可參考 LTX 2.3 本地部署教學

Skill 的價值不是多一個聊天指令

Skill 可以把一套反覆使用的製作規則交給 Codex。它不只是記住「呼叫 fal.ai」,而是先判斷這次是文字生圖、圖片編輯、文字生影片或圖生影片,再選對端點與參數。不同操作通常有不同的模型 ID,文字生圖與圖片編輯即使使用同一模型,也不能假設共用同一個端點。

  • 讀取 參考圖 資料夾,辨認可用素材與用途
  • 先擴寫提示詞,再讓使用者確認內容與預估費用
  • 依圖片、影片、編輯或動畫需求選擇端點
  • 使用日期、模型與任務名稱建立可追蹤檔名
  • 把結果下載到 完成檔,不要只留下暫時網址
  • 保存請求 ID、模型 ID、主要參數與實際輸出

這和用 Codex 製作動畫的思路相同。工具負責執行,Skill 負責把規格、步驟與驗收條件固定下來。想再理解 Skill 如何控制視覺製作,可以延伸閱讀 7 個 AI 動畫 Skills 怎麼選Codex 動態圖表和短影片工作流

建立專案與安裝 Python 套件

先在工作目錄建立 Skill、參考圖與完成檔資料夾,再建立獨立的 Python 環境。

mkdir -p .codex/skills/fal-media/scripts
mkdir -p 參考圖 完成檔
python3 -m venv .venv
source .venv/bin/activate
python -m pip install fal-client python-dotenv

到 fal.ai Dashboard 建立 API Key。只需要呼叫模型時先選 API 權限,不必一開始就給管理權限。金鑰只會完整顯示一次,取得後放進專案根目錄的 .env

FAL_KEY=在這裡填入自己的金鑰

接著把 .env 與輸出資料夾加入 .gitignore。不要把金鑰貼進聊天內容,也不要寫在 Skill、Python 程式或 Git 儲存庫裡。

.env
.venv/
完成檔/

先用圖片完成第一個測試

模型名稱與輸入欄位會隨模型不同而改變,送出前要先看該模型的 API 頁面。下面以 Nano Banana 2 的文字生圖端點示範。第一次先產一張低風險測試圖,確認金鑰、額度與輸出格式都正常。

from pathlib import Path
from urllib.request import urlretrieve

import fal_client
from dotenv import load_dotenv

load_dotenv()

result = fal_client.subscribe(
    "fal-ai/nano-banana-2",
    arguments={
        "prompt": "明亮自然光下的現代木質工作桌,畫面乾淨,寫實產品攝影",
        "num_images": 1,
    },
)

output = Path("完成檔/fal-nano-banana-2.png")
output.parent.mkdir(parents=True, exist_ok=True)
urlretrieve(result["images"][0]["url"], output)
print(output)

subscribe() 會自動進入佇列並等待結果,適合圖片與短時間測試。若要做圖片編輯,先用 fal_client.upload_file() 上傳本地參考圖,再依模型文件切換到編輯端點,例如 fal-ai/nano-banana-2/edit。輸入欄位可能是單一圖片或圖片陣列,不能直接把另一個模型的參數名稱搬過來。

影片任務改用佇列

影片生成時間較長,正式流程應使用 submit() 先取得請求 ID,再查狀態或接 webhook。這樣即使終端關閉,仍能用請求 ID 找回工作。下面使用 Seedance 2.0 文字生影片端點,參數依目前官方文件填寫。

from pathlib import Path
from urllib.request import urlretrieve

import fal_client
from dotenv import load_dotenv

load_dotenv()

handler = fal_client.submit(
    "bytedance/seedance-2.0/text-to-video",
    arguments={
        "prompt": "清晨的城市屋頂,一架小型無人機緩慢掠過,電影感廣角鏡頭,自然環境聲",
        "resolution": "720p",
        "duration": "5",
        "aspect_ratio": "16:9",
        "generate_audio": True,
        "bitrate_mode": "standard",
    },
)

print(f"request_id: {handler.request_id}")
result = handler.get()

output = Path("完成檔/fal-seedance-2.mp4")
output.parent.mkdir(parents=True, exist_ok=True)
urlretrieve(result["video"]["url"], output)
print(output)

這個範例最後仍用 handler.get() 等待完成,目的是讓第一次測試保持簡單。大量任務應保存請求 ID,定期查詢狀態,或把 webhook URL 傳給 submit()。新的 fal.ai 帳號通常從較低的同時執行數開始,超出的工作會留在佇列,不需要自己不斷重送。

可以直接交給 Codex 的 Skill 提示詞

先讓 Codex 建立 .codex/skills/fal-media/SKILL.md 與必要腳本。下面這段不是一次性的生圖提示詞,而是用來定義整套工作方式。

請在目前專案建立一個 fal-media Codex Skill,使用 Python fal-client。

工作規則
1. API 金鑰只從環境變數 FAL_KEY 讀取,不得顯示、記錄或寫入程式碼
2. 先判斷任務屬於文字生圖、圖片編輯、文字生影片或圖生影片
3. 呼叫前先讀取對應模型的官方 API 文件,確認端點 ID、必要欄位、輸出格式與目前價格
4. 讀取參考圖資料夾中的素材,列出準備使用的檔名與用途
5. 先把我的簡短需求整理成完整提示詞,但在產生前必須讓我確認提示詞、模型、解析度、時長、數量與預估費用
6. 圖片測試可使用 subscribe,影片與長時間任務使用 submit 並保存 request_id
7. 生成完成後立刻下載到完成檔資料夾
8. 檔名格式為日期時間、模型短名、任務短名
9. 同時保存一份 JSON 紀錄,包含端點 ID、參數、request_id、輸出路徑與執行時間
10. 失敗時先回報錯誤與可能費用,不要自動無限重試

請先建立檔案與顯示差異,不要實際呼叫付費 API。

Skill 建好後,日常任務可以簡化成一段明確需求。

請使用 fal-media Skill,把參考圖中的咖啡機做成 5 秒 16:9 產品影片。
鏡頭從正面特寫緩慢拉遠,保留機身外型與顏色,加入清晨窗光和少量蒸氣。
先比較兩個適合的圖生影片模型,列出各自預估費用、速度與限制。
等我確認模型與完整提示詞後才開始生成。

提示詞要固定哪些資訊

  • 目的與輸出類型,例如商品首圖、社群短片或角色動作測試
  • 主體、場景、動作與必須保留的特徵
  • 構圖、鏡頭、光線、材質與色彩
  • 尺寸、比例、時長、解析度與輸出數量
  • 參考圖的用途,例如保留人物、只取服裝或只參考構圖
  • 避免事項,例如不要改 Logo、不要增加文字、不要改變產品比例
  • 成本上限與開始前是否需要人工確認

擴寫提示詞不是把形容詞堆得越多越好。對圖片而言,主體、構圖、光線與限制比華麗文字重要。對影片而言,還要明確交代起始狀態、動作順序、鏡頭移動、時間長度與聲音。一次只測一個主要變因,才能知道品質改變來自模型、提示詞還是參數。

不是免費,只是把固定月費改成按量計費

fal.ai 使用預付點數。依官方說明,成功輸出才會依模型單位計費,排隊時間與伺服器錯誤通常不計費,但若使用者端錯誤發生前已經啟動 GPU 工作,仍可能產生費用。已購買點數目前有期限,模型價格也可能調整,所以文章裡的舊價格不能代替每次執行前的模型頁面。

  • 圖片先用一張與較低解析度測試
  • 影片先做 4 到 5 秒,再決定是否延長
  • 送出前顯示模型單價、數量、秒數與預估總額
  • 設定單次成本上限,超過就停止並要求確認
  • 不要在失敗後自動切換更貴模型
  • 保存 request_id,避免誤以為失敗而重複送出

對只想偶爾試一張圖的人,直接使用 Playground 會更省事。對已經每天用 Codex 管專案的人,Skill 的價值才會明顯,因為相同的命名、資料夾、模型選擇與確認規則都能重複使用。至於高頻生成,應把 fal.ai、固定訂閱與本地工作流的實際月成本放在一起比較。

API 金鑰、參考圖與成品都要保護

前端網頁或桌面 App 不能把 FAL_KEY 直接打包進程式。瀏覽器程式碼可被查看,應由自己的後端代理請求,再由伺服器附加金鑰。桌面工具也應使用系統安全儲存區或後端,而不是把金鑰放在可讀取的設定檔。

資料保留同樣不能忽略。fal.ai 文件目前指出,JSON 請求與回應預設可能保留一段時間,可透過 X-Fal-Store-IO 控制平台不要保存這部分內容。但生成的媒體網址屬於另一件事,拿到網址的人可能可以存取,且 CDN 檔案不是永久保存。敏感素材應先確認模型與平台政策,完成後立刻下載,並依需求設定媒體生命週期。

我的建議工作流

  1. 先在 fal.ai Playground 用同一段需求比較兩個模型
  2. 確認畫質、速度、授權、輸入格式與目前單價
  3. 把選定端點寫進 Skill 的模型對照表
  4. 讓 Codex 擴寫提示詞並列出預估成本
  5. 人工確認後只做一張圖或 5 秒影片
  6. 檢查主體一致性、文字、構圖、聲音與瑕疵
  7. 通過後才增加解析度、時長或數量
  8. 下載成品並保存參數與 request_id

如果最後還要把多段素材組成完整內容,可以把生成素材交給 OpenMontage 本地影片工作流或 HyperFrames。

fal.ai 比較像生成引擎與模型入口,Skill 負責製作規則,剪輯與編排工具則負責把素材變成能交付的作品。

FAQ

fal.ai 是免費的嗎

不是。它主要採預付點數與按量計費,不同模型、解析度、秒數與輸出數量會影響費用。少量使用可能比維持多個月費訂閱划算,但不代表零成本。

一定要建立 Codex Skill 嗎

不一定。只測一次模型,直接用 Playground 最快。需要反覆處理參考圖、提示詞、模型選擇、成本確認、下載與命名時,Skill 才能省下大量重複操作。

可以把 API Key 貼給 Codex 嗎

不要。把金鑰存成 FAL_KEY 環境變數,並讓程式直接讀取。對瀏覽器與公開 App,必須透過後端代理,不能把金鑰放在前端。

生成完成後可以只保存網址嗎

不建議。CDN 有保留期限,且媒體網址可能被持有網址的人存取。完成後應立即下載到自己的儲存空間,並保存請求 ID 與模型參數。

官方資源