我最近一直在研究 Ollama,所以我花了很多時間思考如何在本地系統上執行大型語言模型 (LLMS) 以及如何將它們打包到應用程式中。 對於大多數使用 LLMS 的桌面應用程式,通常的體驗是插入 OpenAI API 金鑰或從原始碼構建 Python 專案。 這些方法可以作為概念證明,但它們需要一些許多使用者可能不具備的基本知識。 我一直在尋找的體驗是乙個只需單擊一下即可直接執行的應用程式。 計畫
一鍵**並執行。 沒有外部依賴關係。 應用程式檔案大小最小化。 簡單的LLM版本控制和分發系統。 為所有主要作業系統構建和發布。 利用本地執行使本地檔案系統可用。 使用者不公開任何設定。 LLM 應在使用者系統上以最佳效能執行,無需干預。 內建電池,但可更換。 對於高階使用者,他們應該能夠使用高階配置自定義驅動程式應用程式的 LLM。 考慮到所有這些因素,我決定開發乙個名為“ChatGPT”的桌面應用程式,允許使用者與他們的文件聊天。 這是乙個常見的 LLM 用例,但我認為現在對於非技術終端使用者來說,沒有乙個簡單而偉大的選擇。 它還充分利用了應用程式對檔案系統的輕鬆訪問。 建築
該專案可以分解為四個定義明確的部分:渲染、程序間通訊、主程序和 LLM 執行器。
渲染和程序間通訊
渲染部分是使用典型的 HTML、CSS 和 J**ascript 完成的。 當使用者執行需要處理的動作時,通過程序間通訊將其傳送到主程序。 這樣就可以執行**並訪問實際的主機系統。
主要流程
包括一些自定義文件處理(注意:請有人為常見的文件處理用例建立乙個標準的 j**ascript 庫),然後將提取的資料輸入到 transformers 中JS中。 transformers.JS 庫是由 Hugging Face 維護的專案,它允許您使用 Onnx 執行時在瀏覽器中執行模型。 這可能非常快。 最後,我將向量儲存在記憶體中,因為目前沒有滿足我需求的記憶體中向量資料庫。
LLM 跑步者
在處理完所有這些資訊後,我使用 ollama 來打包和分發將驅動互動的 LLM。 目前,大多數使用者將 Ollama 作為獨立應用程式執行並向其傳送查詢,但它也可以直接打包和編排到桌面應用程式中。 我將 ollama 可執行檔案新增到每個作業系統的相應包中,並編寫了一些 j**ascript** 來協調可執行檔案的使用。
這非常方便,因為我不僅能夠使用 Ollama 作為執行 LLM 的可靠系統,而且還能夠促進 Electron 包之外的 LLM 分發。 將 LLM 新增到 Electron 應用程式包本身意味著需要有大量的初始**(超過 4GB),並鎖定使用者僅使用我在 ChatGPT 中發布的模型。 此外,使用 Ollama 的分發系統,我還可以在不發布新應用程式的情況下更新或修改模型。 我可以進行更改以將模型推送到 ollamaAI 登錄檔,使用者將在下次啟動應用程式時獲得更新。 利用 Ollama 還可以使使用者體驗保持簡單,同時仍允許高階使用者根據需要更改驅動應用程式的模型。 本地LLM的早期採用者(以及與我互動的Llama使用者)對事物的工作原理感興趣,並希望通過最新模型保持領先地位。 雖然 ollama 被打包到 chatd 中,但它可以檢測 ollama 是否已經在執行。 在這種情況下,它會向使用者顯示其他設定,並允許他們配置 ChatGPT 並根據需要更改模型。 這也意味著使用者不需要重新建立現有模型。
結果
我把ChatGPT給一些不屬於典型ChatGPT使用者群的朋友看,反響非常積極。 他們驚訝地看到 AI 在他們的計算機上簡單且本地執行,他們很快看到了讓這個原生聊天機械人訪問他們檔案的潛力。 我期待著改善這種體驗,希望我們能看到一批新的桌面應用程式,使LLMS更易於使用。 ChatGPT專案位址: