本地 LLM API Python 項目分步指南

分步過程

?需要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 API 的 FastAPI 文檔接口

你離獲得本地法學碩士(LLM)學位已經不遠了:太令人興奮了!在顯示的界面中,點擊方框旁邊的箭頭POST/generate將其展開,然后點擊“試用”按鈕。

輸入你選擇的提示符,向 LLM 提出一些問題。你必須使用專用的 JSON 格式參數值來執行此操作,如下所示,通過替換默認提示符:"string"。例如:

輸入提示

點擊“執行”按鈕后,幾秒鐘后你可以通過稍微向下滾動來獲得響應:

本地法學碩士回應

恭喜,您已設置好自己的本地 LLM API!?
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/88927.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88927.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88927.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

日本的所得稅計算方式

? 【1】所得稅的計算步驟(概要) 日本的所得稅大致按照以下順序來計算: 1?? 統計收入(銷售額、工資等) 2?? 扣除必要經費等,得到「所得金額」 3?? 扣除各類「所得控除」(所得扣除&#xf…

【langchain4j篇01】:5分鐘上手langchain4j 1.1.0(SpringBoot整合使用)

目錄 一、環境準備 二、創建項目、導入依賴 三、配置 application.yml 四、注入Bean,開箱即用 五、日志觀察 一、環境準備 首先和快速上手 Spring AI 框架一樣的前置條件:先申請一個 apikey ,此部分步驟參考:【SpringAI篇01…

js運算符

運算符 jarringslee*賦值運算符 - / 對變量進行賦值的運算符,用于簡化代碼。左邊是容器,右邊是值一元運算符正號 符號- 賦予數據正值、負值自增 自減– 前置和后置:i和i:一般情況下習慣使用后置i,兩者在單獨…

next.js 登錄認證:使用 github 賬號授權登錄。

1. 起因, 目的: 一直是這個報錯。2. 最終效果, 解決問題,能成功登錄、體驗地址:https://next-js-gist-app.vercel.app/代碼地址: https://github.com/buxuele/next-js-gist-app3. 過程: 根本原因: github 的設置&…

深入理解設計模式:原型模式(Prototype Pattern)

在軟件開發中,對象的創建是一個永恒的話題。當我們需要創建大量相似對象,或者對象創建成本較高時,傳統的new操作符可能不是最佳選擇。原型模式(Prototype Pattern)為我們提供了一種優雅的解決方案——通過克隆現有對象…

Rocky Linux 9 源碼包安裝php8

Rocky Linux 9 源碼包安裝php8大家好,我是星哥!今天咱們不聊yum一鍵安裝的“快餐式”部署,來點兒硬核的——源碼編譯安裝PHP 8.3。為什么要折騰源碼?因為它能讓你深度定制PHP功能、啟用最新特性,還能避開系統默認源的版…

Django母嬰商城項目實踐(四)

4、路由規劃與設計 1、概述 介紹 路由稱為 URL(Uniform Resource Locator,統一資源定位符),也稱為 URLconf,對互聯網上得到的資源位置和訪問方式的一種簡潔表示,是互聯網上標準梓源的地址。互聯網上的每個文件都有一個唯一的路由,用于指出網站文件的路由位置,也可以理…

論文閱讀:arxiv 2025 A Survey of Large Language Model Agents for Question Answering

https://arxiv.org/pdf/2503.19213 https://www.doubao.com/chat/12038636966213122 A Survey of Large Language Model Agents for Question Answering 文章目錄速覽論文翻譯面向問答的大型語言模型代理綜述摘要一、引言速覽 這篇文檔主要是對基于大型語言模型(…

ONNX 是什么

ONNX 是什么? ONNX,全稱 Open Neural Network Exchange,是微軟和 Facebook(現在的 Meta)聯合發起的一個開放的神經網絡模型交換格式。簡單理解:ONNX 是一個通用的「AI 模型存檔格式」。用 PyTorch、TensorF…

【Python3】掌握DRF核心裝飾器:提升API開發效率

在 Django REST Framework (DRF) 中,裝飾器(Decorators)通常用于視圖函數或類視圖,以控制訪問權限、請求方法、認證等行為。以下是 DRF 中常用的裝飾器及其功能說明: 1. api_view 用途: 用于基于函數的視圖&#xff0c…

Datawhale AI 夏令營第一期(機器學習方向)Task2 筆記:用戶新增預測挑戰賽 —— 從業務理解到技術實現

Datawhale AI夏令營第一期(機器學習方向)Task2筆記:用戶新增預測挑戰賽——從業務理解到技術實現 一、任務核心:業務與技術的“翻譯” 本次Task聚焦“用戶新增預測挑戰賽”的核心邏輯,核心目標是鍛煉“將業務問題轉化為…

【人工智能】華為昇騰NPU-MindIE鏡像制作

本文通過不使用官方鏡像,自己在910b 進行華為mindie的鏡像制作,可離線安裝部署。 硬件:cann 8.0 1. 部署參考文檔: 安裝依賴-安裝開發環境-MindIE安裝指南-MindIE1.0.0開發文檔-昇騰社區 2. 參數說明文檔:https://www.hiascend.com/document/detail/zh/mindie/100/min…

關于我用AI編寫了一個聊天機器人……(番外1)

極大地精簡了1.3.6版本的邏輯。 不會作為正式版發布。 未填充數據。核心結構代碼包含兩個主要部分&#xff1a;數據結構&#xff1a;使用map<string, string>存儲問答對&#xff0c;其中鍵是問題&#xff0c;值是答案主程序流程&#xff1a;初始化預定義的問答對進入無限…

全球鈉離子電池市場研究,市場占有率及市場規模

鈉離子電池是一種新興的儲能技術&#xff0c;利用鈉離子&#xff08;Na?&#xff09;代替鋰離子作為電荷載體&#xff0c;為鋰離子電池提供了一種經濟高效且可持續的替代品。它們的工作原理類似&#xff0c;在充電和放電循環過程中&#xff0c;鈉離子在陽極和陰極之間移動。關…

SwiftUI 全面介紹與使用指南

目錄一、SwiftUI 核心優勢二、基礎組件與布局2.1、基本視圖組件2.2、布局系統2.3、列表與導航三、狀態管理與數據流3.1、狀態管理基礎3.2、數據綁定與共享四、高級功能與技巧4.1、動畫效果4.2、繪圖與自定義形狀4.3、網絡請求與異步數據五、SwiftUI 最佳實踐六、SwiftUI 開發環…

ADC采集、緩存

FPGA學習筆記_李敏兒oc的博客-CSDN博客 TLV5618.v&#xff1a;實現DAC數模轉換&#xff0c;產生模擬信號&#xff0c;輸出指定電壓值 時序圖 FPGA學習筆記&#xff1a;數據采集傳輸系統設計&#xff08;二&#xff09;&#xff1a;TLV5618型DAC驅動-CSDN博客 ADC128S052.v&…

(C++)STL:stack、queue簡單使用解析

stack 棧 簡介 stack 棧——容器適配器 container adapter 與前面學的容器vector、list的底層實現不同&#xff0c;stack功能的實現是要借助其他容器的功能的&#xff0c;所以看stack的第二個模板參數是容器。 最大特點&#xff1a;LIFO&#xff1a;Last In, First Out&#xf…

在Adobe Substance 3D Painter中,已經有基礎圖層,如何新建一個圖層A,clone基礎圖層的紋理和內容到A圖層

在Adobe Substance 3D Painter中&#xff0c;已經有基礎圖層&#xff0c;如何新建一個圖層A&#xff0c;clone基礎圖層的紋理和內容到A圖層 在 Substance 3D Painter 中克隆底層紋理到新圖層的最快做法 操作步驟 添加空白 Paint Layer 在 Layer Stack 頂部點擊 → Paint La…

視頻編碼中熵編碼之基于上下文的變長編碼(Huffman霍夫曼編碼和指數哥倫布)

視頻編碼中熵編碼之基于上下文的變長編碼&#xff08;Huffman霍夫曼編碼和指數哥倫布&#xff09; 視頻編碼中熵編碼之基于上下文的變長編碼Huffman霍夫曼編碼和指數哥倫布&#xff09;視頻編碼中熵編碼之基于上下文的變長編碼&#xff08;Huffman霍夫曼編碼和指數哥倫布&#…

游戲玩法的專利博弈

首席數據官高鵬律師數字經濟團隊創作 AI輔助一、數字戰場的護城河&#xff1a;游戲玩法的專利價值覺醒在數字經濟的浪潮中&#xff0c;游戲行業正以每年超15%的增速重塑全球娛樂版圖。2024年中國游戲市場規模突破3257億元&#xff0c;用戶規模達6.74億&#xff08;數據來源&…