切換語言為:簡體
AI LLM 利器 Ollama 架構和對話處理流程解析

AI LLM 利器 Ollama 架構和對話處理流程解析

  • 爱糖宝
  • 2024-10-15
  • 2049
  • 0
  • 0

Ollama 概述

Ollama 是一個快速執行 LLM(Large Language Models,大語言模型)的簡便工具。透過 Ollama,使用者無需複雜的環境配置,即可輕鬆與大語言模型對話互動。

本文將解析 Ollama 的整體架構,並詳細講解使用者在與 Ollama 進行對話時的具體處理流程。

Ollama 整體架構

AI LLM 利器 Ollama 架構和對話處理流程解析

Ollama 使用了經典的 CS(Client-Server)架構,其中:

  • Client 透過命令列的方式與使用者互動。

  • Server 可以透過命令列、桌面應用(基於 Electron 框架)、Docker 其中一種方式啟動。無論啟動方式如何,最終都呼叫同一個可執行檔案。

  • Client 與 Server 之間使用 HTTP 進行通訊。

Ollama Server 有兩個核心部分:

  • ollama-http-server:負責與客戶端進行互動。

  • llama.cpp:作為 LLM 推理引擎,負責載入並執行大語言模型,處理推理請求並返回結果。

  • ollama-http-serverllama.cpp 之間也是透過 HTTP 進行互動。

說明:llama.cpp 是一個獨立的開源專案,具備跨平臺和硬體友好性,可以在沒有 GPU、甚至是樹莓派等裝置上執行。

Ollama 儲存結構

Ollama 本地儲存預設使用的資料夾路徑為 $HOME/.ollama,檔案結構如下圖所示:

AI LLM 利器 Ollama 架構和對話處理流程解析

檔案可分為三類:

  • 日誌檔案:包括記錄了使用者對話輸入的 history 檔案,以及 logs/server.log 服務端日誌檔案。

  • 金鑰檔案:id_ed25519 私鑰和 id_ed25519.pub 公鑰。

  • 模型檔案:包括 blobs 原始資料檔案,以及 manifests 後設資料檔案。

後設資料檔案,例如圖中的 models/manifests/registry.ollama.ai/library/llama3.2/latest 檔案內容為:

AI LLM 利器 Ollama 架構和對話處理流程解析

如上圖所示,manifests 檔案是 JSON 格式,檔案內容借鑑了雲原生和容器領域中的 OCI spec 規範,manifests 中的 digest 欄位與 blobs 相對應。

Ollama 對話處理流程

使用者與 Ollama 進行對話的大致流程如下圖所示:

AI LLM 利器 Ollama 架構和對話處理流程解析

  1. 使用者透過 CLI 命令列執行 ollama run llama3.2 開啟對話(llama3.2 是一種開源的大語言模型,你也可以使用其它 LLM)。

  2. 準備階段:

    • CLI 客戶端向 ollama-http-server 發起 HTTP 請求,獲取模型資訊,後者會嘗試讀取本地的 manifests 後設資料檔案,如果不存在,則響應 404 not found。

    • 當模型不存在時,CLI 客戶端會向 ollama-http-server 發起拉取模型的請求,後者會去遠端儲存倉庫下載模型到本地。

    • CLI 再次請求獲取模型資訊。

  3. 互動式對話階段:

    • CLI 先向 ollama-http-server 發起一個空訊息的 /api/generate 請求,server 會先在內部進行一些 channel(go 語言中的通道)處理。

    • 如果模型資訊中包含有 messages,則列印出來。使用者可以基於當前使用的模型和 session 對話記錄儲存為一個新的模型,而對話記錄就會被儲存為 messages。

    • 正式進入對話:CLI 呼叫 /api/chat 介面請求 ollama-http-server,而 ollama-http-server 需要依賴 llama.cpp 引擎載入模型並執行推理(llama.cpp 也是以 HTTP server 的方式提供服務)。此時,ollama-http-server 會先向 llama.cpp 發起 /health 請求,確認後者的健康狀況,然後再發起 /completion 請求,得到對話響應,並最終返回給 CLI 顯示出來。

透過上述步驟,Ollama 完成了使用者與大語言模型的互動對話。

總結

Ollama 透過整合 llama.cpp 推理引擎,並進一步封裝,將複雜的 LLM 技術變得觸手可及,為開發者和技術人員提供了一個高效且靈活的工具,很好地助力了各種應用場景下的大語言模型推理與互動。


參考資料:

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.