使用Ollama部署本地LLM:構建AI REST API的簡易指南

techlead_krischang發表於2024-09-29

關注TechLead,復旦AI博士,分享AI領域全維度知識與研究。擁有10+年AI領域研究經驗、復旦機器人智慧實驗室成員,國家級大學生賽事評審專家,發表多篇SCI核心期刊學術論文,上億營收AI產品研發負責人。

file

利用Ollama本地LLM(大語言模型)搭建AI的REST API服務是一個實用的方法。下面是一個簡單的工作流程。

1. 安裝Ollama和LLMs

首先,在本地機器上安裝Ollama和本地LLMs。Ollama可以幫助你輕鬆地在本地部署LLMs,並讓它們更方便地處理各種任務。

安裝 Ollama

file

Ollama安裝介面

file

Ollama下載頁面

file

安裝應用檔案

為Ollama安裝LLMs

ollama pull llama3
ollama run llama3

file

下載並執行llama3

file

在本地與llama3對話

Ollama命令

可用的命令:
  /set         設定會話變數
  /show        顯示模型資訊
  /bye         退出
  /?, /help    幫助命令

使用 "" 開始多行訊息

測試Ollama

curl http://localhost:11434/api/generate -d '{  
  "model": "llama3",  
  "prompt": "為什麼天空是藍色的?",  
  "stream": true  
}'

file

如果stream設定為false,響應將是一個完整的JSON物件。

curl http://localhost:11434/api/generate -d '{  
  "model": "llama3",  
  "prompt": "為什麼天空是藍色的?",  
  "stream": false  
}'

file

2. 設定FastAPI

接下來,設定一個Python的FastAPI應用。FastAPI是一個現代、快速(高效能)的Web框架,基於標準的Python型別提示,支援Python 3.7及以上版本。它是構建穩健高效API的理想選擇。

編寫FastAPI的路由和端點,以便與Ollama伺服器進行互動。這個過程包括髮送請求給Ollama以處理任務,比如文字生成、語言理解或其他LLM支援的AI任務。以下是一個簡單的程式碼示例(你也可以使用 Ollama Python庫 來最佳化程式碼)。

from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
import json
import requests

app = FastAPI(debug=True)

class Itemexample(BaseModel):
    name: str
    prompt: str
    instruction: str
    is_offer: Union[bool, None] = None

class Item(BaseModel):
    model: str
    prompt: str

urls = ["http://localhost:11434/api/generate"]

headers = {
    "Content-Type": "application/json"
}

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.post("/chat/{llms_name}")
def update_item(llms_name: str, item: Item):
    if llms_name == "llama3":
        url = urls[0]
        payload = {
            "model": "llama3",
            "prompt": "為什麼天空是藍色的?",
            "stream": False
        }
        response = requests.post(url, headers=headers, data=json.dumps(payload))
        if response.status_code == 200:
            return {"data": response.text, "llms_name": llms_name}
        else:
            print("錯誤:", response.status_code, response.text)
            return {"item_name": item.model, "error": response.status_code, "data": response.text}
    return {"item_name": item.model, "llms_name": llms_name}

測試REST-API服務

curl --location 'http://127.0.0.1:8000/chat/llama3' \
--header 'Content-Type: application/json' \
--data '{
  "model": "llama3",
  "prompt": "為什麼天空是藍色的?"
}'

file

透過API傳送Curl請求

file

API日誌

3. 部署

當你對REST API的功能和效能感到滿意後,可以將此服務部署到生產環境。這可能涉及將其部署到雲平臺、使用Docker進行容器化,或者在伺服器上部署。

在這個簡單的示例中,我們透過使用Ollama進行本地LLM部署並結合FastAPI構建REST API伺服器,建立了一個免費的AI服務解決方案。你可以透過自己的訓練資料對模型進行微調以實現定製用途(我們將在未來討論)。

本文由部落格一文多發平臺 OpenWrite 釋出!

相關文章