RWKV-Runner:用一個幾 MB 的執行檔包住 RWKV 的啟動、轉檔與 OpenAI 相容介面
A RWKV management and startup tool, full automation, only 8MB. And provides an interface compatible with the OpenAI API. RWKV is a large language model that is fully open source and available for commercial use.
秒懂
- 它是什麼?
- 這個專案把 RWKV 模型的依賴安裝、VRAM 策略選擇、模型轉換與 API 服務收進一個 Wails 桌面程式,並在 8000 埠開出 OpenAI 相容端點。判斷重點在於:你要的是拿現成 ChatGPT 客戶端直接接上本機模型,還是要一個能進 CI 的推論伺服器。
- 適合誰用?
- 如果你手上是 Windows 或 macOS 的單機環境,想用既有 ChatGPT 客戶端、Ollama 或 llmman 介面接上本機 RWKV,而且不介意把依賴安裝交給這個程式代管,RWKV-Runner 的桌面模式能省下不少接線工作。反過來說,若你的部署目標是無圖形介面的容器、需要可重現的建置產物,或打算把服務直接暴露到公網,這個專案並不適合當作唯一入口:README 自己就要求你在 API gateway 層限制請求大小,並依實際情況收緊 max_tokens 上限,因為 backend-python/utils/rwkv.py 的預設值是 le=102400。
- 可以商用嗎?
- 可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
- 還在維護嗎?
- 有在維護。儲存庫最近一次提交在 11 天前。
- 用什麼語言寫的?
- 主要是 TypeScript(依據 GitHub 的語言統計)。
以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。
開源專案深度解析
它想拆掉的那道牆:RWKV 的安裝鏈與 VRAM 選擇
RWKV 本身是開源且可商用的模型,但要把權重跑起來,中間隔著一連串環境決策:Python 版本、PyTorch 與 CUDA 的搭配、模型格式轉換、以及最麻煩的 VRAM 分層。RWKV-Runner 的定位就是把這些決策自動化,README 的開頭寫得很直白,目標是「eliminate the barriers of using large language models by automating everything for you」,使用者只需要一個幾 MB 的執行檔。
它的目標讀者不是訓練模型的人,而是想在本機或自家硬體上把 RWKV 當成推論服務跑起來的人。這群人的特徵是:不想碰 Python 環境,但需要一個能對話、能呼叫 API、能換模型的介面。專案用 TypeScript 寫前端、用 Wails 打包桌面殼,後端推論服務則放在 backend-python,兩邊分離。這個分離不是架構潔癖,而是它後面所有部署選項的前提。
一個容易被忽略的細節是「Pre-set multi-level VRAM configs」:專案預先準備了多層級的顯存配置,並在 Configs 頁面提供 Strategy 切換。對照組是自己寫啟動腳本的人,通常得針對每張卡手動調參數;這裡把它變成下拉選單,代價是你接受了它對硬體的判斷邏輯。
前後端分離與 8000 埠上的 OpenAI 相容層
這個專案的架構可以拆成三塊:Wails 桌面殼、frontend(TypeScript)、backend-python(FastAPI 服務)。README 明說「Front-end and back-end separation」,並列出三種拆法:單獨部署前端服務、單獨部署後端推論服務、或部署帶 WebUI 的後端推論服務。
相容層是它最有價值的部分。啟動模型後,開啟 http://127.0.0.1:8000/docs 可以看到 API 文件,而 /chat/completions 是其中一個端點。README 的壓力測試範例就是用 ab 打這個路徑:ab -p body.json -T application/json -c 20 -n 100 -l http://127.0.0.1:8000/chat/completions,body.json 內容是標準的 messages 陣列,role 為 user、content 為 Hello。這代表任何會送 OpenAI 格式請求的客戶端,只要把 base URL 指到本機 8000 埠就能用。README 的說法是「every ChatGPT client is an RWKV client」。
Embeddings 端點也在同一組 API 裡。若你用 langchain,README 給的接法是 OpenAIEmbeddings(openai_api_base="http://127.0.0.1:8000", openai_api_key="sk-"),API key 填什麼不重要。這裡有個必須記住的斷點:v1.4.0 改善了 embeddings API 的品質,產生的結果與舊版不相容,如果你拿它來建知識庫,必須重新生成。這種變更不會在升級時報錯,只會讓檢索結果悄悄變差。
從原始碼到服務:main.py 的三種啟動方式
README 的 Simple Deploy Example 給的是最短路徑。先 git clone https://github.com/josStorer/RWKV-Runner,然後 cd RWKV-Runner,直接跑 python ./backend-python/main.py,後端推論服務就起來了。此時模型還沒載入,要呼叫 /switch-model API 才會載入權重,細節看 http://127.0.0.1:8000/docs。
如果你要自己編前端,流程是 cd RWKV-Runner/frontend、npm ci、npm run build,回到上層後跑 python ./backend-python/webui_server.py 單獨啟動前端服務。想一次拉起前後端,用 python ./backend-python/main.py --webui。參數說明用 python ./backend-python/main.py -h。
桌面模式則是把 backend-python 部署到伺服器、本地程式只當客戶端:在 Settings 的 API URL 填入伺服器位址。這條路徑讓同一份後端可以服務多台機器。要注意的是,後端服務本身沒有內建認證層的描述,README 反而提醒你「If you are deploying and providing public services, please limit the request size through API gateway」,也就是說防護責任被推給了你的 gateway。
自訂 CUDA kernel 預設開啟,以及它換來的相容性風險
預設配置啟用了 custom CUDA kernel 加速。README 的說法是它「much faster and consumes much less VRAM」。這是一個明顯的預設值選擇:效能與顯存是大多數人最在意的,所以專案選擇預設開啟,而不是預設保守。
代價寫在 Tips 裡。若遇到可能的相容性問題、輸出變成亂碼,要到 Configs 頁面關掉 Use Custom CUDA kernel to Accelerate,或嘗試升級 GPU 驅動。這句話的實務含義是:當你看到模型吐出無意義字元時,第一個要懷疑的不是模型檔案損毀,而是 kernel 與驅動的搭配。這是一個診斷順序的提示,不是一個 bug 清單。
同一段還有一個與安全軟體相關的說明:如果 Windows Defender 判定這是病毒,可以改下載 v1.3.7_win.zip 讓它自動更新到最新版,或把 RWKV-Runner 資料夾加入排除清單(Windows Security、Virus & threat protection、Manage settings、Exclusions、Add or remove exclusions、Add an exclusion、Folder)。這類誤判在打包 Python 執行環境的桌面程式上並不罕見,但把資料夾排除在掃描之外是有代價的決定,你等於放棄了對該目錄的即時防護。
WebGPU 策略、內建轉檔與 Windows 限定的 LoRA 微調
硬體覆蓋面是這個專案相對務實的地方。在 Configs 頁面把 Strategy 切成 WebGPU,就能跑在 AMD、Intel 及其他顯示卡上。這條路徑的效能與 CUDA 不同級別,但至少讓非 NVIDIA 的使用者不必先換卡。
功能清單裡有幾項值得分開看。內建模型轉換工具與內建下載管理、遠端模型檢查,解決的是權重取得與格式對齊的雜事。內建一鍵 LoRA Finetune 則標註了 Windows Only:這是一個平台限制,不是偏好設定,macOS 與 Linux 使用者在這條路上沒有替代入口。
互動介面除了聊天與補全,還包含 composition、聊天預設、附件上傳、MIDI 硬體輸入與軌道編輯。MIDI 這條線在一般 LLM 工具裡很少見,README 也把它單獨列為一個章節連結。另外,針對不同任務調整 API 參數會有更好的結果,README 舉的例子是翻譯任務可以試 Temperature 設 1、Top_P 設 0.3。這是經驗值而非保證值,但它至少給了一個起點。
什麼情況下不該用它:長提示與無 gateway 的公網部署
最明確的限制寫在 Tips 第二條。若你要部署並提供公開服務,必須透過 API gateway 限制請求大小,避免過長提示造成資源耗用;同時要依實際情況收緊請求的 max_tokens 上限。README 直接指向 backend-python/utils/rwkv.py 第 567 行附近,並指出預設值是 le=102400。這個數字在極端情況下會讓單次回應消耗大量資源。
這意味著:如果你把 backend-python/main.py 直接綁在公網介面上、前面沒有任何 gateway,預設值不會保護你。這不是一個可以靠「之後再調」帶過的細節,因為它就是預設行為。
第二個限制是部署形態。這個專案的核心價值在於桌面殼替你處理依賴安裝與模型管理,一旦你走進容器或無圖形介面的環境,這層價值就消失了,剩下的是 backend-python 這套 FastAPI 服務。此時你要自己處理 Python 依賴、模型檔案的取得與版本控管,而專案的自動更新機制對你沒有幫助。
第三個限制是平台。LoRA Finetune 只支援 Windows,這對需要在 Linux 訓練環境上迭代的使用者是硬性排除。
對照組:直接用 Ollama 或自己寫 FastAPI 外殼
最直接的功能對照是 Ollama。兩者都提供本機推論服務與相容 API,差別在模型生態與封裝方式:Ollama 走自己的模型庫與 Modelfile 格式,RWKV-Runner 則是圍繞 RWKV 這一個模型家族,附帶模型轉換、遠端模型檢查與 LoRA 微調。如果你的目標模型不是 RWKV,這個專案的工具鏈對你沒有意義。
另一條路是自己寫一層 FastAPI 包住 RWKV 的推論程式。這樣做的好處是完全掌控 max_tokens 上限、認證與日誌,壞處是你要自己實作 /chat/completions 的請求與回應格式、embeddings 端點,以及模型切換。RWKV-Runner 的 backend-python 把這些都寫好了,README 也提供了部署範例目錄(deploy-examples)與單獨部署 frontend 或 backend 的選項。
選擇的關鍵在於你是否願意接受它的預設值。自己寫的殼,預設值是你決定的;用它的殼,你要記得去改 backend-python/utils/rwkv.py 裡的那個上限。
維護成本、授權與升級時要盯的地方
授權是 MIT,這是採用門檻最低的一類。README 開頭也強調 RWKV 本身「fully open source and available for commercial use」,所以模型與工具在商用上的顧慮相對少。這一段不構成法律意見,實際條款仍以 LICENSE 檔案為準。
維護節奏可以從版本紀錄看:v1.9.12 在 2026-07-07、v1.9.11 在 2026-05-08、v1.9.10 在 2026-02-01,大致是兩到三個月一個版本,而最後一次推送時間是 2026-09-04。這個頻率意味著升級不會太頻繁,但也意味著你不需要期待快速的相容性修補。
升級時真正要盯的是兩件事。第一是 embeddings API:v1.4.0 的變更讓新舊向量不相容,任何依賴它的知識庫都要重建。第二是 custom CUDA kernel 的預設狀態與你的驅動版本,因為它是預設開啟的,換機器或換驅動後如果出現亂碼,要回到 Configs 頁面處理。這兩項都不會在建置階段報錯,只會在上線後以奇怪的輸出形式出現。
編輯結論
如果你手上是 Windows 或 macOS 的單機環境,想用既有 ChatGPT 客戶端、Ollama 或 llmman 介面接上本機 RWKV,而且不介意把依賴安裝交給這個程式代管,RWKV-Runner 的桌面模式能省下不少接線工作。反過來說,若你的部署目標是無圖形介面的容器、需要可重現的建置產物,或打算把服務直接暴露到公網,這個專案並不適合當作唯一入口:README 自己就要求你在 API gateway 層限制請求大小,並依實際情況收緊 max_tokens 上限,因為 backend-python/utils/rwkv.py 的預設值是 le=102400。動手前先確認三件事:你的 GPU 驅動是否與預設開啟的 custom CUDA kernel 相容(輸出亂碼時要在 Configs 關掉 Use Custom CUDA kernel to Accelerate)、你要跑的模型是否已在 Releases 頁面之外自行取得、以及 embeddings API 在 v1.4.0 之後產生的向量與舊版不相容,既有知識庫必須重建。這三項沒確認完,先不要把它接進正式流程。
社群筆記