不想再被 API 账单吓一跳?教你用 Python 搭一个本地大模型推理 API

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 不想再被 API 账单吓一跳?教你用 Python 搭一个本地大模型推理 API

不想再被 API 账单吓一跳?教你用 Python 搭一个本地大模型推理 API

作者:Echo_Wish

这两年做 AI 的朋友,大概都有一个共同的体验:

刚开始用大模型的时候,觉得 云 API 太香了

写两行代码:

client.chat.completions(...)

模型就能帮你写代码、写文案、写报告。

可等项目稍微跑起来,账单也跟着飞起来了。

很多团队到第二阶段就开始思考一个问题:

能不能把大模型放到本地跑?

原因很现实:

  • 数据安全(不想把内部数据发到云)
  • 成本控制(API 调用太贵)
  • 延迟更低(本地推理更快)
  • 离线可用(无网络环境)

所以今天咱就聊一个很实用的话题:

如何用 Python 搭一个本地大模型推理 API(完全不依赖云)

目标很简单:

最终你可以像这样调用模型:

curl http://localhost:8000/chat

返回:

{
   
  "reply": "你好,我可以帮你解决问题。"
}

整个过程 完全在本地运行


一、本地大模型架构长什么样?

核心结构其实很简单:

用户请求
   ↓
FastAPI API服务
   ↓
本地推理引擎
   ↓
大模型权重
   ↓
返回结果

关键组件就三个:

1️⃣ 模型运行框架
2️⃣ Python API 服务
3️⃣ 模型权重


二、选一个本地推理框架

现在主流本地推理方案有几个:

方案 特点
Ollama 最简单
vLLM 高性能
llama.cpp 轻量
Transformers 最灵活

如果你是第一次玩本地模型,我个人最推荐:

Ollama

原因很简单:

安装快、运行稳定、配置简单。

安装命令:

curl -fsSL https://ollama.com/install.sh | sh

安装完成后可以直接运行模型。

比如:

ollama run llama3

第一次会自动下载模型。

下载完成后就能对话:

>>> 写一段Python代码

三、用 Python 调用本地模型

Ollama 本身已经提供了 HTTP API。

默认端口:

http://localhost:11434

我们可以直接用 Python 调用。

import requests

url = "http://localhost:11434/api/generate"

data = {
   
    "model": "llama3",
    "prompt": "用Python写一个快速排序",
    "stream": False
}

response = requests.post(url, json=data)

print(response.json()["response"])

返回示例:

def quick_sort(arr):
    if len(arr) <= 1:
        return arr

看到这里你会发现:

其实模型已经能用了。

但问题是:

这个接口太底层,不适合业务系统调用。

所以我们通常会再封一层 API 服务


四、用 FastAPI 构建本地推理 API

这里推荐用 FastAPI

优点:

  • 性能高
  • 代码简洁
  • 自动生成接口文档

先安装:

pip install fastapi uvicorn requests

然后写一个 API 服务。

# llm_api.py

from fastapi import FastAPI
import requests

app = FastAPI()

OLLAMA_URL = "http://localhost:11434/api/generate"


@app.post("/chat")
def chat(prompt: str):

    payload = {
   
        "model": "llama3",
        "prompt": prompt,
        "stream": False
    }

    r = requests.post(OLLAMA_URL, json=payload)

    result = r.json()

    return {
   
        "reply": result["response"]
    }

启动服务:

uvicorn llm_api:app --reload --port 8000

现在访问:

http://localhost:8000/docs

就能看到接口文档。

测试:

curl -X POST \
"http://localhost:8000/chat?prompt=你好"

返回:

{
   
 "reply": "你好!有什么我可以帮你的吗?"
}

恭喜你。

本地大模型 API 已经跑起来了。


五、加入上下文对话能力

上面只是单轮对话。

如果想支持 连续聊天,需要保存历史。

简单示例:

# memory_chat.py

history = []

def chat_with_memory(prompt):

    history.append({
   "role": "user", "content": prompt})

    context = ""

    for msg in history:
        context += f"{msg['role']}:{msg['content']}\n"

    payload = {
   
        "model": "llama3",
        "prompt": context
    }

    r = requests.post(
        "http://localhost:11434/api/generate",
        json=payload
    )

    reply = r.json()["response"]

    history.append({
   "role": "assistant", "content": reply})

    return reply

这样模型就能记住上下文。

比如:

用户:我叫Echo
AI:你好 Echo
用户:我叫什么?
AI:你叫 Echo

六、性能优化:并发处理

如果你要在公司内部提供服务,还要考虑并发。

FastAPI 本身支持 async。

示例:

from fastapi import FastAPI
import httpx

app = FastAPI()

OLLAMA_URL = "http://localhost:11434/api/generate"

@app.post("/chat")
async def chat(prompt: str):

    payload = {
   
        "model": "llama3",
        "prompt": prompt
    }

    async with httpx.AsyncClient() as client:
        r = await client.post(OLLAMA_URL, json=payload)

    return r.json()

这样吞吐量会明显提升。


七、本地推理的硬件建议

很多人最关心的是:

电脑能不能跑?

给一个经验值。

模型 显存
7B 8GB
13B 16GB
70B 48GB

如果没有 GPU:

也可以跑 量化模型

例如:

llama3:8b-q4

占用只有 4GB 内存


八、一个真实的使用场景

我之前给一个团队做过一个内部工具:

日志分析助手。

流程是这样的:

日志系统
   ↓
Python API
   ↓
本地 LLM
   ↓
生成故障分析

开发者只需要输入:

分析这段日志

模型会返回:

可能是数据库连接池耗尽
建议检查连接配置

因为模型在本地运行:

  • 数据不会泄露
  • 成本为 0
  • 延迟 200ms

效果其实比云 API 更稳定。


九、我对本地大模型的一点真实看法

很多人现在对 AI 有一个误解:

觉得必须用云大模型。

其实未来会越来越多出现一种模式:

本地小模型 + 云大模型

简单理解:

简单任务 → 本地模型
复杂任务 → 云模型

比如:

  • 文档总结
  • 日志分析
  • 代码补全

这些其实 7B 模型就够用

本地跑不仅便宜,还更可控。

我个人甚至觉得:

未来很多公司都会有一个东西:

内部 AI API 平台

就像现在的:

  • 内部 Kubernetes
  • 内部 CI/CD
  • 内部组件市场

AI 也会变成 基础设施

而本地推理 API,就是第一步。

目录
相关文章
|
2月前
|
数据采集 供应链 物联网
别再只会调用 API 了:一步步教你用 Python Fine-Tune 一个定制化大模型
别再只会调用 API 了:一步步教你用 Python Fine-Tune 一个定制化大模型
362 4
|
1月前
|
自然语言处理 PyTorch 算法框架/工具
大模型太慢?别急着上 GPU 堆钱:Python + ONNX Runtime 优化推理性能实战指南
大模型太慢?别急着上 GPU 堆钱:Python + ONNX Runtime 优化推理性能实战指南
477 10
大模型太慢?别急着上 GPU 堆钱:Python + ONNX Runtime 优化推理性能实战指南
|
1月前
|
机器学习/深度学习 人工智能 JSON
AI 术语满天飞?90% 的人只懂名词,不懂为什么!
本文不堆砌概念,只讲前因后果:从大模型底层逻辑,到 Context、RAG、Function Calling、MCP、Skills 的核心关联,拆解所有面试高频考点,让你告别 “名词解释”,吃透原理,面试直接碾压面试官!
AI 术语满天飞?90% 的人只懂名词,不懂为什么!
|
2月前
|
人工智能 机器人 API
从“调个 API”到“自己养模型”:用 Python 快速构建聊天机器人的完整路径
从“调个 API”到“自己养模型”:用 Python 快速构建聊天机器人的完整路径
322 3
|
1月前
|
自然语言处理 调度 语音技术
一行 Python,三种世界:聊聊文本 + 图像 + 音频的多模态协同生成
一行 Python,三种世界:聊聊文本 + 图像 + 音频的多模态协同生成
173 4
|
7天前
|
人工智能 安全 数据挖掘
GitHub 14万星!Claude Code 从「会写代码」到「工程系统」的升级指南
小华同学专注AI工程化实践!「Everything Claude Code」是面向Claude等AI编程工具的开源系统,含47个代理、181个技能、79个命令,支持上下文持久化、验证闭环、安全扫描(AgentShield)与持续学习,助开发者将AI从“对话助手”升级为可交付、可沉淀的智能工程系统。(239字)
471 1
|
2月前
|
人工智能 Linux API
[大模型实战 01] 本地大模型初体验:Ollama 部署与 Python 调用指南
大模型实战系列第一篇。拒绝晦涩理论,直接上手!我会带着各位友人们零基础安装 Ollama,利用国内 ModelScope 极速下载模型,详解服务端口配置与 Python 脚本调用,涵盖显存计算与常见避坑指南。
[大模型实战 01] 本地大模型初体验:Ollama 部署与 Python 调用指南
下一篇
开通oss服务