📌 新手提示:本文结尾提供了一键部署脚本(Windows / macOS / Linux 通用),自动安装 Ollama 并引导你运行第一个模型,不想手动操作的同学直接拉到文末运行。

前言

这几年"大模型"(能对话、能写代码的人工智能模型,像 ChatGPT、DeepSeek 背后的大脑)都是云端服务——你的问题发到别人服务器上,算完再传回来。好处是效果强,坏处是你得注册、充值、排队,还有隐私顾虑:所有对话都经过第三方。

Ollama 是另一条路:它把开源大模型装到你自己的电脑上,本地运行,不联网、不花钱、数据不出门。它的定位可以这么理解:

云端模型像"点外卖",本地模型像"自己家做饭"——外卖(云端)省事但付钱、排队;做饭(本地)要一次投入食材和设备(下载模型、占内存),但之后无限吃、私密、断网也能吃。

本教程面向零基础读者,走完五步:

  1. 明白 Ollama 是什么
  2. 在自己的电脑上装好它
  3. 跑起人生第一个本地大模型
  4. 学会用代码调用它(本地 API)
  5. 弄清"本地 vs 云端"怎么选

官方文档:https://docs.ollama.com/;模型库列表:https://ollama.com/search

一、Ollama 是什么

一句话:Ollama 是一个"大模型运行工具"——装好后,你在命令行输入一条命令,它就从官方模型库下载一个开源模型到本地(几 GB 到几十 GB),然后在你的电脑上把它跑起来,你就能像和 ChatGPT 聊天一样和它对话。

几个关键事实:

  • 开源免费:Ollama 本身是开源项目,模型也大多是开源模型(如 Qwen、DeepSeek、Llama、Gemma、GPT-OSS 等系列)
  • 离线可用:模型下载完成后完全本地运行,不需要网络(断网也能聊)
  • 有 API:暴露一个本地接口(默认端口 11434),你可以用普通 HTTP 请求或 OpenAI 兼容的 SDK 调用它——也就是说,你在云端 API 写过的调用代码,改一行地址就能指向本地模型
  • 跨平台:macOS / Windows / Linux / WSL2 / Docker 都支持

二、安装 Ollama(三平台)

打开终端(macOS"终端"、Linux"终端"、Windows 建议 WSL,即 Windows 自带的 Linux 子系统),按你的系统执行一行命令:

macOS 与 Linux:

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

解释一下这条命令:curl 从官网下载安装脚本,-fsSL 是参数(静默、跟随跳转、出错即停),| sh 表示把下载的脚本直接交给 shell 执行。想先看看脚本内容再执行的话,把 | sh 去掉只跑前半段即可——脚本完全公开,欢迎审查。

Windows(PowerShell):

irm https://ollama.com/install.ps1 | iex

**Windows 用 WSL:**在 WSL 的 Ubuntu 里执行上面的 Linux 命令即可,Windows 端可直接访问 http://localhost:11434(Ollama 默认监听本机端口)。

装完验证:

ollama --version

看到版本号就成功了。

国内用户若官网下载慢:Linux/macOS 可手动从 GitHub Releases 下载压缩包(见文末脚本,脚本内置了国内镜像回退);Windows 可下载 OllamaSetup.exe 安装包。

三、跑起第一个本地模型

装好后,运行你人生中第一个本地大模型(Ollama 官方示例用 gemma4——Gemma 是 Google 的开源模型系列):

ollama run gemma4

第一次运行会先自动下载模型(几个 GB,取决于模型大小,耐心等),下载完就进入聊天界面——直接打字回车,就能和它对话了!

>>> 你好,简单介绍一下你自己
<<< 你好!我是 Gemma,一个由 Google 开发的开源语言模型……

退出聊天输入:

/bye

想换模型怎么办?模型库里还有成百上千个开源模型(DeepSeek、Qwen 千问、Llama、GPT-OSS 等都有)。去 https://ollama.com/search 搜索模型名,然后用同样的命令格式运行即可:

ollama run deepseek-r1   # 举例:DeepSeek 推理模型
ollama run qwen3         # 举例:阿里千问

💡 模型名右侧标注了参数量大小(如 7b = 70 亿参数、8b、70b),参数越多越聪明、占用内存越大。入门建议从 7b~8b 档开始,你的电脑跑得动再说。

四、常用命令速查

命令作用
ollama run <模型名>下载并进入聊天(等价于"下载 + 运行")
ollama pull <模型名>只下载不运行
ollama list查看本地已有哪些模型
ollama ps查看当前正在运行的模型
ollama rm <模型名>删除本地模型(释放磁盘)
/bye退出聊天界面

模型列表页:https://ollama.com/search

五、用代码调用本地模型(本地 API)

Ollama 不只是个聊天窗口——它启动了本地 API(应用程序编程接口,程序调用通道),默认地址 http://localhost:11434。你的任何程序都能调用它。

方法一:最原始的 curl

用 curl(命令行 HTTP 工具,macOS/Linux/WSL 自带)直接发请求:

curl http://localhost:11434/api/chat -d '{
  "model": "gemma4",
  "messages": [{"role": "user", "content": "Why is the sky blue?"}],
  "stream": false
}'

方法二:Python 官方包

pip install ollama
from ollama import chat

response = chat(model='gemma4', messages=[{'role': 'user', 'content': '为什么天是蓝的?'}])
print(response.message.content)

方法三:OpenAI 兼容端点(重点!)

Ollama 提供 OpenAI 兼容的 /v1 端点,这意味着:你以前为 OpenAI / DeepSeek 写过的所有调用代码,只需要把 base_url 改成本地地址,就能直接调用本地模型:

from openai import OpenAI

client = OpenAI(
    base_url='http://localhost:11434/v1/',
    api_key='ollama',   # 本地服务不校验 Key,任意值即可(官方文档注明 "required but ignored")
)

chat_completion = client.chat.completions.create(
    messages=[{'role': 'user', 'content': '我这是在调用本地模型!'}],
    model='gemma4',     # 换成你本地已下载的模型名
)
print(chat_completion.choices[0].message.content)

也就是说,OpenAI 兼容生态(LangChain、各种 AI 框架、OpenCode 等工具)通通能指向你的本地模型——写一次代码,云端/本地随意切换。

六、进阶:模型存哪 & 端口怎么改

  • 模型默认存储位置:Ollama 会把模型文件存到用户目录下的 .ollama/models(macOS/Linux 在 ~/.ollama/models)。想换盘存(比如存到 D 盘/移动硬盘),设置环境变量 OLLAMA_MODELS=/你的/路径 即可(环境变量是操作系统级的配置值,“存钥匙的口袋”,设置后重启 Ollama 生效)
  • 默认端口 11434:想改监听地址,设置 OLLAMA_HOST=0.0.0.0:11434——注意 0.0.0.0 表示局域网可访问,你的电脑就变成了"局域网内的 AI 服务器",家里其他设备也能连。只在信任的局域网这么做,暴露到公网有安全风险
  • 详细配置见官方文档:https://docs.ollama.com/

七、本地模型 vs 云端 API:怎么选?

维度本地 Ollama云端 API
费用免费(只花电费,占电脑内存/磁盘)按 token 计费(token 是模型处理文本的最小单位)
隐私✅ 数据不出门❌ 对话经过服务商
断网✅ 可用❌ 不可用
模型效果看你机器配置,入门级(7b~8b)与云端旗舰有差距旗舰模型(Claude、GPT、DeepSeek 顶配)效果最好
门槛要下载几 GB 模型、要有 8GB+ 内存注册 + 充值 + Key 即可

建议:日常闲聊、隐私数据、离线场景 → 本地模型;追求最强效果、要做批量生产级应用 → 云端 API。

如果本地跑不动大参数模型、又想要旗舰模型效果,国内最省事的做法是接 API 中转站——一把 Key 同时调用 Claude / GPT / DeepSeek / GLM 等主流模型,按 token 精确计费、国内直连。比如云间 API 中转站(https://cloudzone-api.cyou/):香港节点低延迟,最低官方定价 0.05 倍起,而且它也是 OpenAI 兼容格式——上面第三节的代码把 base_url 换成它的地址,就能从"本地模型"无缝切到"云端最强模型"。两篇文章读下来你会发现:换 base_url 是 AI 世界里最万能的技能。

尾声

到这你已经把 AI"搬回了家":Ollama 装好、模型跑起来、代码能调用、知道了和云端的取舍。Ollama 官方还支持一键连接 Claude Code、OpenCode 等终端 AI 工具(ollama launch claude),感兴趣的可以去官方文档探索。

不想手动操作的话,直接跑文末一键脚本,剩下的交给脚本:自动检测网络、下载安装 Ollama、引导你运行第一个模型。

最后提醒一条安全底线:本地能跑≠本地永远更好。生产环境、重要业务还是建议用云端 API(效果稳定、有团队维护),需要对比的话,去云间 API(https://cloudzone-api.cyou/)注册一个账号,和你的本地模型同时测一测,谁好用谁,检测成本几乎为零。


附:一键部署脚本

不方便下载的同学可以直接复制下方完整源码,新建文本文档粘贴后改后缀为 .sh(macOS/Linux/WSL)或 .ps1(Windows)运行。也可以下载现成文件:

macOS / Linux / WSL(.sh)

#!/usr/bin/env bash
set -u
# ============================================================
#  Ollama 本地部署大模型 一键脚本(macOS / Linux / WSL)
#  公开源码,欢迎审查 —— 不放心可先复制给 AI 判断
#  依赖:本脚本仅安装 Ollama 本身,模型需另行 ollama run
# ============================================================

GREEN='\033[0;32m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; CYAN='\033[0;36m'; NC='\033[0m'
info()  { echo -e "${GREEN}[INFO]${NC} $1"; }
warn()  { echo -e "${YELLOW}[WARN]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1"; }
step()  { echo -e "${CYAN}[STEP]${NC} $1"; }

detect_network() {
  step "检测网络环境(国内 / 国外)..."
  if curl -fsI --max-time 5 "https://claude.ai" >/dev/null 2>&1; then
    info "可直连 claude.ai,判定为海外网络"
    echo "overseas"
  else
    warn "无法直连 claude.ai,判定为国内网络环境(将自动切换国内镜像)"
    echo "domestic"
  fi
}

install_official() {
  # 官方安装脚本
  step "使用官方安装脚本安装 Ollama..."
  if curl -fsSL --max-time 60 https://ollama.com/install.sh | sh; then
    info "官方脚本安装成功"
    return 0
  fi
  warn "官方脚本安装失败,回退备用方案(手动下载二进制)..."
  return 1
}

install_binary() {
  local net="$1"
  step "备用方案:从 GitHub Releases 下载 Ollama 二进制..."
  local sys="$(uname -s)"
  local asset=""
  case "$sys" in
    Darwin) asset="Ollama-darwin.zip" ;;
    Linux)  asset="ollama-linux-amd64.tgz" ;;
    *)
      error "未知系统 $sys,请手动到 https://ollama.com/download 下载安装包"
      return 1
      ;;
  esac

  local base_url="https://github.com/ollama/ollama/releases/latest/download/$asset"
  if [ "$net" = "domestic" ]; then
    base_url="https://ghfast.top/https://github.com/ollama/ollama/releases/latest/download/$asset"
  fi

  local tmp="/tmp/ollama-dl"
  mkdir -p "$tmp"
  if curl -fsSL --max-time 300 "$base_url" -o "$tmp/$asset"; then
    info "下载成功($asset)"
  else
    warn "主源失败,回退备用源(ghfast.top 镜像)..."
    base_url="https://ghfast.top/https://github.com/ollama/ollama/releases/latest/download/$asset"
    if ! curl -fsSL --max-time 300 "$base_url" -o "$tmp/$asset"; then
      error "二进制下载失败。请手动访问 https://ollama.com/download 下载安装"
      return 1
    fi
  fi

  local dest="$HOME/ollama"
  mkdir -p "$dest"
  case "$asset" in
    *.zip)
      if command -v unzip >/dev/null 2>&1; then
        unzip -qo "$tmp/$asset" -d "$dest" || { error "解压失败"; return 1; }
      else
        ditto -x -k "$tmp/$asset" "$dest" 2>/dev/null || { error "解压失败(需要 unzip 或 ditto)"; return 1; }
      fi
      ;;
    *.tgz)
      tar -xzf "$tmp/$asset" -C "$dest" || { error "解压失败"; return 1; }
      ;;
  esac

  # 加入 PATH(当前会话立即生效,永久写入 ~/.bashrc / ~/.zshrc;原因:ollama 需要能找到)
  local bin_dir="$dest/bin"
  export PATH="$PATH:$bin_dir"
  local rc="$HOME/.bashrc"
  [ "$SHELL" = "/bin/zsh" ] && rc="$HOME/.zshrc"
  if grep -qF "$bin_dir" "$rc" 2>/dev/null; then
    :
  else
    echo "" >> "$rc"
    echo "# Ollama - 由一键脚本写入" >> "$rc"
    echo "export PATH=\"\$PATH:$bin_dir\"" >> "$rc"
  fi
  info "已安装到 $dest,执行 ollama 前请先运行:source $rc(或新开终端)"
  return 0
}

main() {
  echo "============================================"
  echo "  Ollama 本地部署大模型 一键脚本"
  echo "  适用于 macOS / Linux / WSL"
  echo "============================================"
  echo ""

  local NET
  NET=$(detect_network)

  if command -v ollama >/dev/null 2>&1; then
    info "检测到 Ollama 已安装:$(ollama --version 2>&1)"
  else
    if ! install_official; then
      if ! install_binary "$NET"; then
        error "安装失败,脚本终止。请手动到 https://ollama.com/download 安装后重跑。"
        exit 1
      fi
    fi

    if ! command -v ollama >/dev/null 2>&1; then
      # 备用二进制安装时可能未在 PATH;定位提示
      if [ -x "$HOME/ollama/bin/ollama" ]; then
        export PATH="$PATH:$HOME/ollama/bin"
      fi
    fi
  fi

  if command -v ollama >/dev/null 2>&1; then
    info "Ollama 安装完成:$(ollama --version 2>&1)"
  else
    error "未能在当前会话找到 ollama 命令。请 source ~/.bashrc(或 ~/.zshrc)后重试,或手动安装。"
    exit 1
  fi

  echo ""
  echo "============================================"
  info "全部完成!现在运行你的第一个本地模型:"
  echo "    ollama run gemma4"
  echo "(首次运行自动下载模型,约数 GB,请耐心等待)"
  echo "退出聊天:输入 /bye"
  echo "============================================"
}

main "$@"

Windows(.ps1)

Windows 运行 .ps1 若提示执行策略限制:打开 PowerShell 输入 Set-ExecutionPolicy -Scope Process Bypass 后回车,再运行脚本。-Scope Process 仅对当前窗口生效,关掉即恢复,不会改动系统全局策略(系统默认限制来自安全设计,不要为了省事永久 Bypass)。

# ============================================================
#  Ollama 本地部署大模型 一键脚本(Windows PowerShell)
#  公开源码,欢迎审查 -- 不放心可先复制给 AI 判断
#  依赖:本脚本仅安装 Ollama 本身,模型需另行 ollama run
# ============================================================
$ErrorActionPreference = "Stop"

function Write-Info  { Write-Host "[INFO] $args" -ForegroundColor Green }
function Write-Warn  { Write-Host "[WARN] $args" -ForegroundColor Yellow }
function Write-Err   { Write-Host "[ERROR] $args" -ForegroundColor Red }
function Write-Step  { Write-Host "[STEP] $args" -ForegroundColor Cyan }

function Detect-Network {
    Write-Step "检测网络环境(国内 / 国外)..."
    try {
        $null = Invoke-WebRequest -Uri "https://claude.ai" -Method Head -TimeoutSec 5 -UseBasicParsing
        Write-Info "可直连 claude.ai,判定为海外网络"
        return "overseas"
    } catch {
        Write-Warn "无法直连 claude.ai,判定为国内网络环境(将自动切换国内镜像)"
        return "domestic"
    }
}

function Install-Official {
    Write-Step "使用官方安装脚本安装 Ollama..."
    try {
        iex (irm https://ollama.com/install.ps1)
        Write-Info "官方脚本安装成功"
        return $true
    } catch {
        Write-Warn "官方脚本安装失败:$_"
        return $false
    }
}

function Install-Manual {
    param([string]$Net)
    Write-Step "备用方案:引导手动安装 OllamaSetup.exe ..."
    $exeUrl = if ($Net -eq "domestic") {
        "https://ghfast.top/https://github.com/ollama/ollama/releases/latest/download/OllamaSetup.exe"
    } else {
        "https://github.com/ollama/ollama/releases/latest/download/OllamaSetup.exe"
    }
    $out = Join-Path $env:TEMP "OllamaSetup.exe"

    try {
        Invoke-WebRequest -Uri $exeUrl -OutFile $out -TimeoutSec 300 -UseBasicParsing
        Write-Info "安装包已下载到 $out"
        Write-Host "正在启动安装程序,请在弹出的窗口中完成安装(默认选项即可)。"
        Start-Process $out
    } catch {
        Write-Warn "自动下载失败:$_"
        $alt = if ($Net -eq "domestic") {
            "https://ghfast.top/https://github.com/ollama/ollama/releases/latest/download/OllamaSetup.exe"
        } else {
            "https://ollama.com/download"
        }
        Write-Err "请手动下载安装包:$alt (或官网 https://ollama.com/download)"
    }

    Write-Host ""
    Write-Host "安装完成后回到本窗口,按回车继续验证..."
    $null = Read-Host
}

Write-Host "============================================"
Write-Host "  Ollama 本地部署大模型 一键脚本"
Write-Host "  适用于 Windows(PowerShell)"
Write-Host "============================================"
Write-Host ""

$net = Detect-Network

if (Get-Command ollama -ErrorAction SilentlyContinue) {
    $ver = (ollama --version 2>&1 | Out-String).Trim()
    Write-Info "检测到 Ollama 已安装:$ver"
} else {
    if (-not (Install-Official)) {
        Install-Manual -Net $net
    }
}

if (-not (Get-Command ollama -ErrorAction SilentlyContinue)) {
    Write-Err "未找到 ollama 命令。若已完成安装,请新开一个 PowerShell 窗口再运行本脚本,或手动输入 ollama --version 验证。"
    exit 1
}

Write-Host ""
Write-Host "============================================"
Write-Info "全部完成!现在运行你的第一个本地模型:"
Write-Host "    ollama run gemma4"
Write-Host "(首次运行自动下载模型,约数 GB,请耐心等待)"
Write-Host "退出聊天:输入 /bye"
Write-Host "============================================"