分步過程
?需要Python 3.9 或更高版本。
安裝 Ollama 并在本地下載 LLM
根據您的操作系統,您可以從其網站下載一個或另一個版本的 Ollama 。下載并啟動后,打開終端并輸入以下命令:
ollama run llama3 |
此命令將在本地拉取(下載)Llama 3 LLM——默認情況下,下載的模型在llama3:latest
撰寫本文時被引用。請注意,首次下載時,需要一些時間才能完全下載,這主要取決于您的網絡連接帶寬。完全拉取后,對話助手將自動在終端中啟動,您可以在其中開始交互。?
不過請注意,我們將采用不同的方法,并展示構建基于 Python 的本地 LLM API 的基本步驟。為此,讓我們切換到我們的 IDE。
在 VS Code(或其他 IDE)中創建 Python 項目
假設您正在使用 VS Code(如果使用其他 IDE,則可能需要采取稍微不同的操作),請在文件目錄中創建一個名為“local-llm-api”或類似的新項目文件夾。
在該文件夾中,我們將創建兩個文件,分別名為“main.py”和“requirements.txt”。現在讓我們將Python文件留空,然后將以下內容添加到“requirements.txt”文件并保存更改:
fastapi uvicorn requests |
使用本地 LLM 時,建議設置虛擬環境,因為它可以隔離依賴項,防止庫版本之間的沖突,并保持整體開發環境整潔。在 VS Code 中,您可以通過以下方式執行此操作:
- 按Command + Shift + P打開命令面板。
- 鍵入或選擇Python:Create Environment,然后鍵入或選擇Venv。
- 選擇合適的Python版本(我選擇了Python 3.11)。
- 現在應該提示您選擇之前創建的“requirements.txt”文件來安裝列出的依賴項,這至關重要,因為我們的 Python 程序需要 FastAPI、Uvicorn 和 Requests。
如果最后一步不起作用,請嘗試在IDE的終端上運行:
pip install fastapi uvicorn requests |
主 Python 程序
讓我們回到之前創建的空的“main.py”文件,并添加以下代碼:
from fastapi import FastAPI from pydantic import BaseModel import requests import json import uvicorn import os # Added for environment variable usage ? app = FastAPI() ? class Prompt(BaseModel): ? ? prompt: str ? @app.post("/generate") def generate_text(prompt: Prompt): ? ? try: ? ? ? ? # Use environment variables for host and model, with fallbacks ? ? ? ? ollama_host = os.getenv("OLLAMA_HOST", "http://localhost:11434") ? ? ? ? ollama_model = os.getenv("OLLAMA_MODEL", "llama3:latest") ? ? ? ? ? response = requests.post( ? ? ? ? ? ? f"{ollama_host}/api/generate", # f-string for host ? ? ? ? ? ? json={"model": ollama_model, "prompt": prompt.prompt}, # Use ollama_model ? ? ? ? ? ? stream=True, ? ? ? ? ? ? timeout=120? # Give model time to respond ? ? ? ? ) ? ? ? ? response.raise_for_status() # Raise an exception for HTTP errors (4xx or 5xx) ? ? ? ? ? output = "" ? ? ? ? for line in response.iter_lines(): ? ? ? ? ? ? if line: ? ? ? ? ? ? ? ? data = line.decode("utf-8").strip() ? ? ? ? ? ? ? ? if data.startswith("data: "): ? ? ? ? ? ? ? ? ? ? data = data[len("data: "):] ? ? ? ? ? ? ? ? if data == "[DONE]": ? ? ? ? ? ? ? ? ? ? break ? ? ? ? ? ? ? ? try: ? ? ? ? ? ? ? ? ? ? chunk = json.loads(data) ? ? ? ? ? ? ? ? ? ? output += chunk.get("response") or chunk.get("text") or "" ? ? ? ? ? ? ? ? except json.JSONDecodeError: ? ? ? ? ? ? ? ? ? ? print(f"Warning: Could not decode JSON from line: {data}") # Added for debugging ? ? ? ? ? ? ? ? ? ? continue ? ? ? ? ? return {"response": output.strip() or "(Empty response from model)"} ? ? ? except requests.RequestException as e: ? ? ? ? return {"error": f"Ollama request failed: {str(e)}"} ? if __name__ == "__main__": ? ? # For development, reload=True can be useful. For production, use reload=False. ? ? uvicorn.run("main:app", host="127.0.0.1", port=8000, reload=False) |
app = FastAPI()
創建由 REST 服務提供支持的 Web API,一旦執行 Python 程序,它將使用本地 LLM 開始監聽并提供請求(提示)。class Prompt(BaseModel):
并?prompt: str
創建 JSON 輸入模式,以便我們可以引入 LLM 的提示。@app.post("/generate")
并def generate_text(prompt: Prompt):
定義利用 API 端點發送提示和獲取模型響應的函數。- 以下代碼至關重要:? response = requests.post(? ? "http://localhost:11434/api/generate",? ? json={"model": "llama3:latest", "prompt": prompt.prompt},? ? stream=True,? ? timeout=120)
它將提示發送到 Ollama 獲取的指定本地 LLM。重要的是,在這里你必須確保模型名稱在你下載的模型名稱中(在我的情況下是)。你可以在終端中"llama3:latest"
輸入命令來檢查機器上下載的本地模型的名稱。 - 最后,此代碼讀取流響應并以清晰的格式返回。
for line in response.iter_lines(): ? ? ... ? ? chunk = json.loads(data) ? ? output += chunk.get("response") or chunk.get("text") or "" ? return {"response": output.strip()} |
運行和測試 API
保存 Python 文件后,點擊“運行”圖標或python main.py
在終端中運行。你應該會在 IDE 的輸出中看到類似這樣的內容:
INFO:? ? ?Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) |
這意味著一件事:REST 服務器已啟動并正在運行,并且可以通過??http://127.0.0.1:8000/docs訪問該服務。在瀏覽器上打開此 URL,如果一切順利,您將看到如下所示的 FastAPI 文檔界面:
你離獲得本地法學碩士(LLM)學位已經不遠了:太令人興奮了!在顯示的界面中,點擊方框旁邊的箭頭POST/generate
將其展開,然后點擊“試用”按鈕。
輸入你選擇的提示符,向 LLM 提出一些問題。你必須使用專用的 JSON 格式參數值來執行此操作,如下所示,通過替換默認提示符:"string"
。例如:
點擊“執行”按鈕后,幾秒鐘后你可以通過稍微向下滾動來獲得響應:
恭喜,您已設置好自己的本地 LLM API!?
?