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

举报
Echo_Wish 发表于 2026/03/05 17:19:05 2026/03/05
【摘要】 不想再被 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,就是第一步。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。