使用客戶端技術構建 LLM 驅動的 Web App

Web 應用程式中的本地 LLM 整合

僅使用本地模型和客戶端技術構建 Web 應用程式,可以消除對 OpenAI 或 Anthropic 等供應商進行昂貴 API 調用的需求。這種方法提供了三個主要優點:開發者無需額外的運算成本、由於數據從未離開本地機器而增強了用戶隱私,以及透過消除 HTTP 調用開銷來提高速度的潛力,儘管這可能會被用戶硬體限制所抵消。

實作本地 RAG 管線

檢索增強生成 (RAG) 允許用戶透過從非結構化數據中提取資訊來「與其文件進行對話」,。一個完全本地的 RAG 管線由兩個主要階段組成:數據攝取與檢索/生成。

數據攝取

數據攝取透過三個步驟將原始文件(例如 PDF 或網頁)轉換為可查詢的格式:

  1. Semantic Chunking:將文件拆分為較小且具有意義的片段。
  2. Vector Representation:使用嵌入模型為每個片段創建 embeddings。
  3. Vector Storage:將這些片段和向量加載到專門的向量存儲器中。

在此實作中,LangChain 處理了文件加載和拆分。Embeddings 是使用透過 Transformers.js 套件的量化 HuggingFace 模型生成的,而向量存儲器則由 Voy(一個基於 Web Assembly 的向量存儲器)管理。

檢索與生成

為了回答用戶查詢,系統會在向量存儲器中搜尋與輸入在語義上最相似的文件片段。這些片段與原始問題結合,引導 LLM 生成最終答案。

對於包含代詞或對先前對話歷史引用之類的後續問題,會增加一個解引用 (dereferencing) 步驟。此步驟將初始查詢重新表述為「獨立」問題,以確保向量存儲器檢索的準確性。

Ollama 在本地 Web App 中的角色

雖然特定任務的模型(例如 embeddings)可以在瀏覽器中高效運行,但全規模的 LLM 通常太大,無法直接打包進 Web 應用程式中。作者發現,基於瀏覽器的 LLM 專案通常要麼無法生成高品質的回答,要麼需要下載數 GB 的數據,導致顯著的延遲。

Ollama 解決了這個問題,它允許透過 shell 命令將本地運行的模型暴露給 Web 應用程式。在本文描述的專案中,使用了 Mistral 7B 模型,該模型在 16GB M2 MacBook Pro 上運行良好。這使得 Web 應用程式可以利用用戶機器上預裝的強大 LLM,而無需在應用程式包中包含模型。

未來展望與瀏覽器 API 提案

隨著開源模型變得更小、更快,以及消費級硬體日益包含 GPU,本地 LLM 執行變得越來越可行。然而,由於非技術用戶不太可能運行 shell 命令來配置 CORS 並啟動服務器,因此需要更無縫的整合。

作者提議了一種新的瀏覽器 API,該 API 將允許 Web 應用程式透過彈出視窗請求存取本地運行的 LLM,從而使應用程式能夠在不要求手動技術配置的情況下,利用本地運算能力與瀏覽器內的其他技術一起使用。

Sources

相關

  • Dispatch
  • 專案
  • 專案
  • 專案
  • 專案