本地 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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;数据来源&…