🎯 開發動機與解決痛點
在 AI 技術飛速發展的時代,大多數 AI 應用都需要依賴雲端服務和穩定的網路連線。然而,這樣的設計帶來了隱私疑慮、網路依賴性和使用限制等問題。PocketPal AI 的誕生正是為了解決這些根本性的挑戰。
核心痛點:
隱私洩露風險 :傳統 AI 服務需要將對話內容上傳至雲端處理
網路依賴性 :無網路環境下無法使用 AI 功能
使用成本 :多數 AI 服務採用付費或有使用限制的模式
延遲問題 :網路傳輸和雲端處理造成的回應延遲
可控性不足 :無法自定義模型行為和個性化設定
PocketPal AI 創新性地將小型語言模型(SLMs)直接部署在行動裝置上,實現完全離線的 AI 體驗。所有對話內容、推理過程和個人資料都保存在本地裝置中,從根本上解決了隱私和網路依賴問題,同時提供了前所未有的個性化定制能力。
🛠️ 技術框架與設計模式
⚛️ React Native 0.76.3
跨平台行動應用框架,提供原生效能體驗,支援 iOS 和 Android 雙平台部署,確保使用者介面的一致性和流暢度。
📘 TypeScript
強型別語言支援,提升程式碼可維護性和開發效率,減少執行時錯誤,為大型專案提供穩固的型別安全保障。
🔄 MobX 狀態管理
響應式狀態管理庫,配合 mobx-persist-store 實現資料持久化,提供直觀的狀態更新機制和優異的效能表現。
🗄️ WatermelonDB
高效能本地資料庫,專為 React Native 優化,支援複雜查詢和資料同步,確保聊天記錄和模型資料的可靠儲存。
🎨 React Native Paper
Material Design 設計規範的 React Native 實作,提供統一的設計語言和豐富的 UI 組件,打造專業的使用者體驗。
🧠 @pocketpalai/llama.rn
核心 AI 推理引擎,基於 llama.cpp 的 React Native 綁定,實現在行動裝置上高效運行大型語言模型的突破性技術。
核心設計模式
🏪 觀察者模式 (Observer Pattern)
MobX 實現的響應式程式設計模式,當模型狀態改變時自動觸發 UI 更新,實現高效的狀態同步機制。
📦 儲存庫模式 (Repository Pattern)
透過 ChatSessionRepository 抽象化資料存取邏輯,將業務邏輯與資料儲存分離,提高程式碼的可測試性和可維護性。
🎯 策略模式 (Strategy Pattern)
支援多種聊天模板和完成設定,根據不同模型和使用情境動態選擇適當的處理策略。
🔗 橋接模式 (Bridge Pattern)
透過原生模組橋接,將 JavaScript 層與底層 AI 推理引擎分離,支援跨平台的原生功能呼叫。
🔧 核心業務邏輯實作
class ModelStore {
@observable models: Model[] = [];
@observable activeModelId: string | undefined = undefined ;
@computed get displayModels (): Model[] {
return filterProjectionModels (this .models);
}
@action checkSpaceAndDownload = async (modelId: string ) => {
const model = this .models.find (m => m.id === modelId);
if (!model || model.isDownloaded) return ;
const destinationPath = await this .getModelFullPath (model);
const authToken = hfStore.shouldUseToken ? hfStore.hfToken : null ;
await downloadManager.startDownload (model, destinationPath, authToken);
};
}
這段程式碼展示了 MobX 觀察者模式的精髓,透過 @observable、@computed 和 @action 裝飾器實現響應式狀態管理,當模型狀態改變時會自動更新相關的 UI 組件。
🎨 設計模式應用
export async function applyChatTemplate (
messages: ChatMessage[],
model: Model | null ,
context: LlamaContext | null
): Promise<string | JinjaFormattedChatResult> {
const modelChatTemplate = model?.chatTemplate;
const contextChatTemplate = (context?.model as any )?.metadata?.[
'tokenizer.chat_template'
];
try {
if (modelChatTemplate?.chatTemplate) {
return applyTemplate (messages, {
customTemplate: modelChatTemplate,
addGenerationPrompt: modelChatTemplate.addGenerationPrompt,
}) as string ;
} else if (contextChatTemplate) {
return await context?.getFormattedChat (messages);
}
} catch (error) {
console.error ('Error applying chat template:' , error);
}
return applyTemplate (messages, {
customTemplate: chatTemplates.default,
addGenerationPrompt: chatTemplates.default.addGenerationPrompt,
}) as string ;
}
此處使用了策略模式,根據不同的模型和情境選擇適當的聊天模板格式化策略,解決了多種模型格式相容性的問題。
⚡ 效能優化實作
export class DownloadManager {
private downloadJobs: DownloadMap;
constructor () {
this .downloadJobs = observable.map (new Map ());
makeAutoObservable (this );
}
async syncWithActiveDownloads (models: Model[]): Promise<void > {
const activeDownloads = await this .getActiveDownloads ();
runInAction (() => {
activeDownloads.forEach (download => {
const model = models.find (m => m.id === download.modelId);
if (model) {
model.progress = download.progress;
model.downloadSpeed = download.speed;
}
});
});
}
}
這個實作透過 MobX 的 observable.map 和 runInAction 批次更新機制提升了下載管理的效能,避免了頻繁的狀態更新導致的效能問題。
💡 應用情境
📱 離線學習助手
在沒有網路的環境中,如搭乘飛機、偏遠地區旅行,或是網路不穩定的場所,使用者仍可與 AI 助手互動,獲得學習輔導、程式設計協助或創作靈感,無需擔心網路中斷影響學習進度。
🔒 隱私敏感諮詢
適用於處理敏感資訊的場景,如個人健康諮詢、法律問題討論、商業機密分析等,所有對話內容完全保存在本地裝置,確保資訊不會外洩,為專業人士提供安全的 AI 輔助工具。
🎨 個性化創作夥伴
透過 "Pals" 功能創建具有特定個性和專業領域的 AI 助手,如創意寫作導師、程式設計教練、商業顧問等,每個 Pal 都可以根據使用者需求客製化系統提示和行為模式。
⚡ 即時效能測試
內建的基準測試功能讓開發者和研究人員能夠評估不同模型在各種行動裝置上的效能表現,為模型選擇和裝置升級提供客觀的參考數據。
🌍 多語言本地化支援
支援日語、中文等多語言介面,配合本地化的模型,為不同地區的使用者提供符合當地文化和語言習慣的 AI 體驗,無需依賴雲端翻譯服務。
🏗️ 軟體架構圖
React Native + Paper UI
MobX 狀態管理
React Navigation
Chat Sessions
Model Store
Pal Store
Download Manager
HF API Service
@pocketpalai/llama.rn
WatermelonDB
本地模型檔案
Native Modules
iOS / Android 系統層
PocketPal AI 採用分層架構設計,從上至下包含 UI 層、狀態管理層、業務邏輯層、服務層、AI 推理層、資料層、原生模組層和系統層。各層間透過明確定義的介面進行通訊,確保系統的可維護性和擴展性。
❓ 常見問題 Q&A
Q1: 離線 AI 推理的效能如何?會不會很慢?
效能優化策略:
智慧記憶體管理: 應用會根據裝置記憶體狀況自動載入/卸載模型,並在背景時自動釋放資源,確保系統穩定運行。
多執行緒優化: 系統會自動偵測 CPU 核心數,並設定最佳的執行緒數量(≤4核心使用全部,>4核心使用80%),充分利用硬體效能。
實時效能監控: 提供每秒 tokens 數和毫秒級延遲監控,讓使用者了解模型運行狀況,並可透過基準測試比較不同模型的效能表現。
Q2: 支援哪些類型的模型?如何管理模型?
模型支援範圍:
GGUF 格式模型: 支援 Hugging Face Hub 上的 GGUF 格式模型,包括 Danube 2/3、Phi、Gemma 2、Qwen 等熱門小型語言模型。
多模態支援: 支援視覺語言模型(VLM),可以處理圖片輸入,透過投影模型實現圖文混合對話。
智慧管理: 內建模型下載管理器,支援背景下載、進度追蹤、自動完整性檢查,並可設定存取權杖來下載閘控模型。
Q3: 個性化 AI 助手(Pals)功能如何使用?
Pals 功能特色:
助手型 Pal: 可設定專屬的系統提示詞(支援 AI 自動生成)、選擇預設模型、客製化聊天介面顏色,創建專業領域的 AI 助手。
角色扮演型 Pal: 除了助手型功能外,還可設定角色背景、場景位置等情境參數,創建更豐富的對話體驗。
快速切換: 在聊天介面可透過 Pal 選擇器快速切換不同的 AI 個性,無需重新載入模型。
Q4: 資料安全和隱私保護如何確保?
隱私保護機制:
完全離線處理: 所有 AI 推理和對話處理都在本地裝置進行,對話內容從不離開您的手機。
選擇性資料分享: 僅在使用者主動選擇時才會分享基準測試結果到排行榜,或主動提交應用回饋。
本地資料加密: 使用 WatermelonDB 進行本地資料存儲,聊天記錄和個人設定都安全保存在裝置中。
Q5: LLM 模型是由誰提供?是否有商業使用限制?
模型來源與授權:
主要來源 - Hugging Face Hub: PocketPal AI 主要透過 Hugging Face 官方 API 取得模型,支援所有 GGUF 格式的開源語言模型。平台整合了搜尋、下載、元資料查詢等完整功能。
多元化模型生態: 內建精選模型包括 Gemma、Phi、Qwen、Llama、SmolLM 等來自不同創作者的模型,使用者也可搜尋並下載 Hugging Face 上的任何 GGUF 格式模型。
授權責任分工: PocketPal AI 本身採用 MIT 授權(允許商業使用),但不對個別模型的授權進行檢查或限制 。使用者下載使用模型時,須自行確認並遵守各模型創作者設定的授權條款。
閘控模型支援: 支援 Hugging Face 存取權杖,可下載需要申請權限的閘控模型或私有模型,權杖資訊安全儲存在裝置鑰匙圈中。
Q6: 這個 App 使用 React Native 開發,是否有支援其他語言如 Swift、Kotlin、Dart 來使用這些模型?
多語言開發支援現況:
目前限制: PocketPal AI 目前僅支援 React Native 開發環境 ,尚未提供 Swift、Kotlin 或 Dart 的獨立 SDK 或函式庫。
原生模組架構: 應用內確實包含 iOS(Objective-C)和 Android(Kotlin)的原生模組,但主要用於系統整合功能如裝置資訊收集、背景下載、螢幕喚醒等,並非 AI 推理功能。
底層技術基礎: 核心 AI 推理基於 llama.cpp,理論上可在其他語言中直接使用,但需要:
為 Swift/Kotlin 建立自定義的 llama.cpp 綁定
重新實作模型載入和推理邏輯
建立平台特定的模型管理系統
開發 Flutter 的平台通道(Platform Channels)
未來發展可能: 要實現多語言支援需要重大架構改變,包括抽離核心推理邏輯、建立獨立的原生函式庫,以及開發平台特定的 SDK(iOS Framework、Android AAR、Flutter Plugin)。
Q7: 是否有統一的網站讓開發者下載適合手機端執行的模型?
手機端模型下載平台:
主要平台 - Hugging Face Hub: 目前最完整的手機端模型平台,提供:
模型搜尋: https://huggingface.co/models?library=gguf
格式篩選: 支援按 GGUF 格式和量化等級篩選
模型資訊: 詳細的模型說明、效能指標、授權資訊
社群評估: 下載量、使用評價、效能排行榜
模型格式要求: 手機端執行需要 GGUF 格式模型 ,這是專為邊緣運算優化的量化格式,包含多種壓縮等級(Q4_K_M、Q5_K_M、Q6_K 等)以平衡模型大小與品質。
其他平台限制: 目前 PocketPal AI 不支援其他模型平台 ,如 Ollama、OpenAI、Anthropic 或 Mistral 等,主要原因是這些平台多採用雲端 API 或不同的模型格式。
推薦手機端模型:
輕量級模型: SmolLM2-1.7B、Qwen2.5-1.5B(適合基礎對話)
平衡型模型: Gemma-2-2B、Phi-3.5-mini(兼顧品質與效能)
多模態模型: SmolVLM-500M(支援圖文混合對話)
專業模型: 可搜尋特定領域的 GGUF 模型
🔮 未來展望
PocketPal AI 作為行動端 AI 應用的先驅,將持續推動離線 AI 技術的發展。專案的開源特性為整個社群帶來了學習和改進的機會,未來發展重點包括:
🚀 更多小型模型支援
持續整合最新的小型語言模型,包括專業領域模型和多語言模型,為使用者提供更豐富的選擇。
⚡ 效能持續優化
針對不同裝置類型進行深度優化,充分利用新世代晶片的 AI 加速功能,提升推理速度和電池續航力。
🌍 本地化擴展
支援更多語言和地區,為全球使用者提供本地化的 AI 體驗,包括語言介面和文化適應性。
🛠️ 開發工具改進
提升專案文件品質,簡化貢獻流程,為開發者社群提供更好的開發體驗和擴展能力。