当前位置: 首页 > news >正文

本地 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.lryc.cn/news/589613.html

相关文章:

  • 10分钟搞定!Chatbox+本地知识库=你的私人语音导师:企业级全栈实现指南
  • 【C语言进阶】字符函数和字符串函数的内部原理
  • 一区 Top (HPJ) | WGAS+WGCNA分析文章套路
  • 详解低速容错CAN(附与高速CAN对比表)
  • 区块链:以太坊侧链Polygon
  • 简单工厂设计模式
  • I/O 多路复用详解笔记
  • JS中async/await功能介绍和使用演示
  • [Dify]--进阶3-- 如何通过插件扩展 Dify 的功能能力
  • 基于华为欧拉系统安装FileGator文件管理器
  • screen -r 2050449 # 重新连接到 run_models 会话
  • saltstack安装部署
  • docker搭建freeswitch实现点对点视频,多人视频
  • vscode里面怎么配置ssh步骤
  • 【PTA数据结构 | C语言版】层序遍历二叉树
  • js分支语句和循环语句
  • 小架构step系列15:白盒集成测试
  • NE综合实验3:链路聚合、VLAN与Trunk、STP、DHCP、OSPF及PPP整合部署
  • 经典排序算法之插入排序
  • 二分查找栈堆
  • 笔试——Day8
  • 力扣经典算法篇-25-反转链表 II(头插法)
  • AI 增强大前端数据加密与隐私保护:技术实现与合规遵
  • 牛客:HJ22 汽水瓶[华为机考][数字处理]
  • C# 网口demo
  • Neo4j Python 驱动库完整教程(带输入输出示例)
  • deepseekAI对接大模型的网页PHP源码带管理后台(可实现上传分析文件)
  • Python初学者笔记第十三期 -- (常用内置函数)
  • RestTemplate 实现后端 HTTP 调用详解
  • python 基于 httpx 的流式请求