本地 LLM API Python 项目分步指南

发布于:2025-07-17 ⋅ 阅读:(21) ⋅ 点赞:(0)

分步过程

 需要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! 
 


网站公告

今日签到

点亮在社区的每一天
去签到