Python本地LLM API项目逐步指南

Python本地LLM API项目逐步指南

感兴趣在本地机器上使用Python和轻量级工具框架运行大型语言模型(LLM)API吗? 本文将通过分步指南,帮助您搭建一个本地API,能够向下载到本地的LLM发送提示并获取响应——类似于ChatGPT,但完全在本地运行。

通过以下步骤,您将实现:

  • 安装Ollama框架:用于本地运行开源LLM(如LLaMA、Gemma或Mistral)的用户友好工具
  • 使用FastAPI构建轻量级REST API:通过HTTP请求实现用户与模型的交互
  • 通过本地端点发送提示并获取近实时响应,无需依赖外部云服务

准备工作

建议阅读以下内容以熟悉相关概念:

  • 《5个入门LLM的必备免费工具》
  • 《大型语言模型10大核心概念解析》
  • 《Python中使用Ollama的LLM初学者指南》

分步实现过程

本教程假设您已安装Python 3.9+版本并具备Python中阶理解能力。代码需在IDE(如VS Code)中实现,不适用于在线笔记本环境。

1. 安装Ollama并下载本地LLM

根据操作系统从官网下载Ollama后,在终端执行:

ollama run llama3

此命令将下载Llama 3模型(默认版本为llama3:latest)。首次下载耗时取决于网络带宽。下载完成后,终端将启动对话助手。

2. 创建VS Code项目

新建名为"local-llm-api"的文件夹,创建两个文件:

  • requirements.txt:添加以下依赖
    fastapi
    uvicorn
    requests
    
  • main.py:暂留空

推荐设置虚拟环境

  1. 通过Command+Shift+P打开命令面板
  2. 选择"Python: Create Environment" → "Venv"
  3. 选择Python 3.11版本
  4. 选择requirements.txt安装依赖

若安装失败,可在终端运行:

pip install fastapi uvicorn requests

3. 主程序代码

main.py中添加以下代码:

from fastapi import FastAPI
from pydantic import BaseModel
import requests
import json
import uvicorn
import os

app = FastAPI()

class Prompt(BaseModel):
    prompt: str

@app.post("/generate")
def generate_text(prompt: Prompt):
    try:
        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",
            json={"model": ollama_model, "prompt": prompt.prompt},
            stream=True,
            timeout=120
        )
        response.raise_for_status()
        
        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}")
                    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__":
    uvicorn.run("main:app", host="127.0.0.1", port=8000, reload=False)

代码关键解析

  • app = FastAPI():创建基于REST服务的Web API
  • class Prompt(BaseModel):定义接收提示词的JSON输入架构
  • @app.post("/generate"):定义API端点处理函数
  • 核心请求代码向本地LLM发送提示词(需确保模型名称与下载一致)
  • 流式响应处理确保输出可读性

4. 运行与测试API

运行python main.py后,终端将显示:

INFO: Uvicorn running on http://127.0.0.1:8000

访问http://127.0.0.1:8000/docs打开FastAPI文档界面:

  1. 展开POST/generate框并点击"Try it out"
  2. 在JSON参数中替换默认提示词(例如:{"prompt": "解释量子计算"}
  3. 点击"Execute"获取模型响应

进阶改进建议

  • 使用Streamlit构建前端界面消费FastAPI接口
  • 探索针对特定领域(如营销、保险、物流)的微调模型应用

总结

本文逐步演示了如何使用Ollama本地模型和FastAPI框架,通过REST服务接口搭建本地大型语言模型API,实现完全在本地运行的模型推理功能。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)或者 我的个人博客 https://blog.qife122.com/
公众号二维码

posted @ 2025-09-02 08:02  CodeShare  阅读(2)  评论(0)    收藏  举报