開發者焦點:NodeGhost
![]()
開發者焦點
Acurast通道與NodeGhost的功能,以及兩者結合後會發生什麼
在產品中加入LLM的常見做法,是將相容OpenAI的用戶端指向託管API,把提示詞傳送到第三方供應商的伺服器。模型不是您的,機器也不是您的。自行託管通常也只是把工作負載搬到租來的雲端GPU上。
這個範例出自Acurast app-tunnel系列,改為在單一支經認證的智慧型手機上執行模型。Acurast通道讓這個綁定在本機的模型可透過公開HTTPS URL存取,而NodeGhost透過其Bring Your Own Model(自帶模型)支援,將它作為可直接替換的相容OpenAI端點提供服務。兩項能力,中間只需一個註冊步驟。
這只是一次普通的OpenAI呼叫,而回應它的模型在一支手機上執行。
專案概覽
01 /
專案簡介
在一個經認證的Acurast Processor上執行的量化Qwen2.5-3B模型,以一般相容OpenAI的端點形式使用。
02 /
實現關鍵
兩項能力:負責連線可達性的Acurast通道,以及提供標準API介面的NodeGhost BYOM閘道。一次端點註冊即可將兩者串接。
03 /
狀態
可運作的參考範例,目前即可部署在Acurast Canary上,並如實說明3B模型在行動CPU上的吞吐量。
01 / 章節
Acurast通道的功能
讓NAT後方手機上綁定在本機的服務可從任何地方存取,無需任何傳入連線。
Acurast Processor位於電信業者的NAT後方,沒有公開IP。綁定在127.0.0.1上的服務,預設從外部是看不見的。通道正是改變這一點的關鍵。
無需傳入連線,也能從外部連入。手機從不接受傳入連線。它會主動連線到一組中繼節點並保持連線,傳送到通道公開URL的流量則沿著同一條連線回到本機連接埠。電信業者的NAT與沒有公開IP都不構成阻礙,因為手機上沒有任何東西在等待傳入流量。
具備自動TLS的公開HTTPS URL。每個通道都會在
https://<clientId>.<your-domain>:8443上啟用,並透過ACME自動簽發憑證。呼叫端只需以一般HTTPS連線到普通的子網域。每次執行都有全新身分。每個部署都會產生新的P-256金鑰作為通道身分,並由該金鑰衍生出新的子網域。URL依部署而定:只在部署執行期間有效,部署結束即失效;部署啟動時會透過回呼傳回實際的URL。若您需要固定位址,可以將金鑰保存在套件包中(套件包一旦外洩,位址也會跟著外洩),或讓使用端在URL變更時重新註冊。
它轉發的是連接埠,而非協定。通道並不知道自己承載的是LLM流量,它只是轉發一個TCP連接埠。同系列的app-tunnel/cargo範例透過同一個通道用戶端執行SSH,證明通道是通用的基礎元件,而其背後的服務可以任意替換。
它在經認證的手機上執行。部署只會配對經認證的Acurast手機,而通道用戶端與工作負載一起在Shell執行環境的proot沙箱中執行,並透過本機JSON-RPC橋接與Processor協調。
02 / 章節
NodeGhost的功能,以及BYOM交接
可直接替換的OpenAI API,其後端可以在任何地方,包括手機上。
README對NodeGhost的描述很精簡,而這個範例也只依賴這些功能:它透過Pocket Network路由推論、提供相容OpenAI的API,並支援Bring Your Own Model。
可直接替換的相容OpenAI API。NodeGhost提供與OpenAI API相同的介面,因此現有的用戶端、函式庫與工具只需更改base URL就能繼續使用。
經由Pocket Network路由。請求透過POKT去中心化層路由,而不是直接送到單一供應商的端點。
自帶模型(Bring Your Own Model)。營運者不使用NodeGhost託管的模型,而是將API金鑰指向自己相容OpenAI的後端。在這個範例中,該後端就是Acurast Processor上透過通道存取的llama-server。
交接。通道傳回URL後,您就可以在NodeGhost將它註冊為BYOM端點。(範例中的註冊呼叫省略了端點金鑰,因為llama-server預設不需驗證即可執行。)之後,標準的chat-completions請求會經由NodeGhost並透過通道送到手機上的模型,而回應中會帶有模型名稱,藉此確認是由哪裡提供服務。
03 / 章節
兩者如何組合
一次註冊,就能把連線可達性加上標準API,變成一個送達手機的請求。
單獨來看,通道與相容OpenAI的閘道都很普通。這個範例的重點在於結合:只要多一個步驟,也就是將通道URL註冊為BYOM後端,手機託管的模型就成為可直接替換的推論端點,而呼叫端應用程式完全不需更改。
手機 · Acurast Processor(Shell執行環境 / proot)
llama-server :8080
Qwen2.5-3B-Instruct-Q4_K_M
Qwen2.5-3B-Instruct-Q4_K_M
↓
通道 · Acurast通道
向中繼節點外撥連線 -> https://<clientId>.<your-domain>:8443
(臨時P-256身分、ACME TLS、由回呼傳回的URL)
(臨時P-256身分、ACME TLS、由回呼傳回的URL)
↓
閘道 · NodeGhost(相容OpenAI,經由POKT路由)
通道URL已註冊為BYOM端點
POST https://<gateway>/v1/chat/completions
-> 經由通道路由 -> 在手機上進行推論
POST https://<gateway>/v1/chat/completions
-> 經由通道路由 -> 在手機上進行推論
04 / 章節
目前已可運作的部分
一個可部署的範例,能將OpenAI請求送達手機託管的模型。
部署時,Processor會建立proot Ubuntu環境、建置一個小型loopback shim讓本機伺服器能在沙箱內正確綁定、在執行時下載llama.cpp與Qwen2.5-3B模型,並在具健康檢查的就緒迴圈後方啟動伺服器。只有在模型載入完成後,通道才會開啟。
您可以透過回呼接收端追蹤整個流程:環境設定、下載、模型載入、模型就緒,最後是一個帶有公開通道URL的
started事件。將該URL註冊到NodeGhost、送出一般的聊天請求,答案就會從手機傳回。立即試用。
瀏覽範例、部署到Canary,看看請求如何送達手機:github.com/Acurast/acurast-example-apps/tree/main/apps/app-tunnel/llm
05 / 章節
實際的上限
每項能力都有極限,而這項能力的極限很容易說明。
量化為Q4的3B模型在行動ARM CPU上執行,每秒約產生3個token。約120個token的回覆需要大約45秒,而且模型在多步驟推理上會犯基本錯誤。這是此模型在此硬體上的上限,而不是通道、執行環境或網路的限制。
實務上,這個模式適合非同步、批次或短上下文的工作:背景摘要、分類、排隊生成,以及不在使用者關鍵路徑上的代理步驟。它並非為即時互動聊天而設計。為了吞吐量選擇較小的模型,或因為希望模型在自己掌控的硬體上執行而接受延遲,都是合理的選擇。
可推廣的方向
通道不在乎自己轉發的是什麼,NodeGhost也不要求後端必須是託管服務。同系列的cargo範例透過同一個通道執行SSH,正好證明了這一點。經認證手機上任何綁定在本機的服務都能以這種方式存取,而任何OpenAI形式的工作負載都能不經修改地架在它前面。這裡的模型只是剛好位在另一端而已。
關於技術堆疊
NodeGhost是一個去中心化AI推論閘道,透過Pocket Network路由、提供相容OpenAI的API,並支援Bring Your Own Model。詳情請見nodeghost.ai。
Pocket Network是NodeGhost用來路由請求的去中心化層。詳情請見pocket.network。
Acurast是由經認證智慧型手機組成的去中心化網路,提供分散式邊緣算力,工作負載會部署到網路中經認證的手機上。詳情請見acurast.com。
此範例是Acurast的參考實作,發布於acurast-example-apps儲存庫。
在Acurast上開發?
如果您正在經認證的手機上執行自己的模型、代理後端或其他服務,歡迎與Acurast團隊聯繫。加入Discord。


