一、Ollama 是什么:本地 AI 的 Docker

Ollama 系统架构概览

如果你曾经为高昂的 API 费用犯愁,或者担心把公司代码、个人文档发送给第三方服务存在安全隐患,那么 Ollama 就是你一直在寻找的答案。

Ollama 是一个开源工具,让你能在自己的笔记本或服务器上本地运行 Llama、Mistral、DeepSeek、Gemma 等主流大语言模型。它的理念就像 Docker 之于容器:把复杂的模型权重、运行时依赖、推理引擎全部打包成一个简单的命令,一行搞定。

🌟 核心优势一览
· 隐私保护:所有数据在本机处理,永不上传云端
· 零 API 成本:一次安装,无限调用
· 离线可用:模型下载后,断网也能运行
· 低延迟:本地网络响应,适合实时交互场景
· OpenAI 兼容 API:改一行代码,现有应用无缝迁移

Ollama 目前在 GitHub 上已积累超过 10 万 Star,是 2025-2026 年度最热门的本地 AI 工具之一。支持 macOS(Apple Silicon 原生加速)、Linux(CUDA / ROCm GPU 加速)、Windows(WSL2 / 原生)三大平台。

二、环境准备与安装

Ollama 安装流程图

硬件要求

配置级别硬件要求推荐模型规模典型用途
入门级8GB 内存,无 GPU1B ~ 3B 参数简单问答、代码补全
中等配置16GB 内存,或 8GB 显存 GPU7B ~ 8B 参数通用对话、代码生成
高性能32GB 内存,或 16GB+ 显存 GPU13B ~ 30B 参数深度分析、多轮长对话
旗舰配置64GB+ 内存,或多 GPU70B+ 参数媲美 GPT-4 的推理能力
⚠️ 注意:模型实际运行时会完整加载到内存(或显存)中。7B 模型约需 4-5GB,13B 约需 8-9GB,70B 约需 40GB+。请根据实际硬件选择合适的模型规模。

安装步骤

1

macOS 安装(推荐使用 Homebrew)

Apple Silicon(M1/M2/M3/M4)原生支持,Metal GPU 加速开箱即用:

# 方式一:Homebrew(推荐)
brew install ollama

# 方式二:官网下载安装包
# 访问 https://ollama.com/download 下载 .dmg 文件
bash

安装完成后,Ollama 会作为后台服务自动启动(菜单栏图标)。

2

Linux 安装(一键脚本)

支持 Ubuntu 20.04+、Debian 11+、RHEL 8+ 等主流发行版,自动检测 NVIDIA/AMD GPU:

# 官方一键安装脚本(自动配置 systemd 服务)
curl -fsSL https://ollama.com/install.sh | sh

# 安装完成后验证服务状态
systemctl status ollama
bash

脚本会自动安装到 /usr/local/bin/ollama,并创建 systemd 服务确保开机自启。

3

Windows 安装

Windows 10 (22H2) / Windows 11 原生支持,支持 NVIDIA GPU 加速:

# 方式一:winget 包管理器
winget install Ollama.Ollama

# 方式二:官网下载 OllamaSetup.exe 直接安装
# 安装后可在 Windows 任务栏找到 Ollama 图标
powershell
4

Docker 部署(生产环境推荐)

适合服务器部署和团队共享,通过 CPU 运行(GPU 版需额外配置):

# CPU 版本(适合测试环境)
docker run -d -v ollama:/root/.ollama \
  -p 11434:11434 \
  --name ollama \
  ollama/ollama

# NVIDIA GPU 版本(需安装 NVIDIA Container Toolkit)
docker run -d --gpus=all \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  --name ollama \
  ollama/ollama
bash
5

验证安装

# 查看版本
ollama --version

# 手动启动服务(如果没有自动启动)
ollama serve

# 检查 API 是否可用(应返回 "Ollama is running")
curl http://localhost:11434
bash
💡 提示:Ollama 默认监听 localhost:11434。如需对外暴露,设置环境变量 OLLAMA_HOST=0.0.0.0:11434,但请注意配置防火墙规则。

三、运行你的第一个大模型

首次运行模型操作流程

安装完成后,一条命令即可下载并运行模型。Ollama 会自动从官方模型库拉取模型文件(类似 Docker pull):

# 下载并进入交互式聊天(模型首次使用时自动下载)
ollama run llama3.2

# 也可以先 pull 下载,再 run 运行
ollama pull llama3.2
ollama run llama3.2
bash

进入交互模式后,直接输入文字对话。试试这几个命令:

>>> 用一句话解释什么是量子计算
量子计算利用量子力学原理(叠加态和纠缠态)进行并行计算,能够在某些问题上比传统计算机快得多。

>>> /bye       # 退出对话
>>> /?         # 查看内置命令帮助

常用的 Ollama 命令行操作:

# 查看已下载的模型列表
ollama list

# 删除模型(释放磁盘空间)
ollama rm llama3.2

# 查看模型详情和参数
ollama show llama3.2

# 将提示词通过管道传入(非交互模式,适合脚本调用)
echo "用中文解释 Docker 的作用" | ollama run llama3.2
bash

四、主流模型选型指南

主流模型对比选型

Ollama 官方模型库(ollama.com/library)提供了 200+ 个模型,按任务场景选择合适的模型非常关键:

Llama 3.2 (3B)

Meta 最新轻量模型,中英双语表现优秀

内存需求:~2GB

通用对话

Llama 3.1 (8B)

综合能力强,推理和代码均表现良好

内存需求:~5GB

综合推荐

DeepSeek-R1 (7B)

中文能力突出,数学和代码推理强

内存需求:~4.5GB

中文场景

CodeLlama (7B)

专为代码生成优化,支持多种编程语言

内存需求:~4GB

代码生成

Mistral (7B)

速度快、推理能力强,适合实时应用

内存需求:~4GB

快速响应

Gemma3 (4B)

Google 出品,多模态支持,适合图文理解

内存需求:~3GB

多模态
# 快速下载并体验各个模型
ollama pull deepseek-r1:7b       # DeepSeek R1 蒸馏版
ollama pull codellama:7b         # 代码专用
ollama pull mistral              # 快速通用
ollama pull gemma3               # Google Gemma3
ollama pull qwen2.5:7b           # 阿里千问,中文优化
bash
💡 选型建议:日常开发调试用 llama3.2:3bmistral(速度快),需要高质量输出用 llama3.1:8bdeepseek-r1:7b,中文场景首选 qwen2.5:7bdeepseek-r1

五、REST API 集成实战

Ollama REST API 集成架构

Ollama 内置 HTTP 服务,提供两套 API 接口:

  • 原生 Ollama API:功能完整,支持流式输出、模型管理
  • OpenAI 兼容 API:直接替换 OpenAI,改一行 base_url 即可

原生 API:文本生成

# 基础文本生成(流式输出)
curl http://localhost:11434/api/generate \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama3.2",
    "prompt": "请用三句话解释什么是 RAG 技术",
    "stream": false
  }'
bash

原生 API:多轮对话(Chat)

# 多轮对话接口(维护 messages 历史)
curl http://localhost:11434/api/chat \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama3.2",
    "messages": [
      {
        "role": "system",
        "content": "你是一位专业的 TypeScript 开发助手,回答简洁精准。"
      },
      {
        "role": "user",
        "content": "如何在 TypeScript 中定义一个泛型工厂函数?"
      }
    ],
    "stream": false
  }'
bash

OpenAI 兼容接口

Ollama 完全兼容 OpenAI Chat Completions API,只需修改 base_url,无需改动任何业务逻辑:

# OpenAI 兼容接口(/v1/chat/completions)
curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ollama" \
  -d '{
    "model": "llama3.2",
    "messages": [
      {"role": "user", "content": "Hello! What can you do?"}
    ]
  }'
bash

模型管理 API

# 列出所有可用模型
curl http://localhost:11434/api/tags

# 拉取新模型(异步,可查看进度)
curl http://localhost:11434/api/pull \
  -d '{"name": "mistral"}'

# 查看模型详细信息
curl http://localhost:11434/api/show \
  -d '{"name": "llama3.2"}'
bash

六、Python 与 JavaScript SDK 集成

Python 与 JavaScript SDK 集成对比

Python 集成

Ollama 提供官方 Python SDK,同时也可以直接用 OpenAI SDK 切换到本地模型:

# 安装 Ollama Python 官方库
pip install ollama

# 或者用 OpenAI SDK(修改 base_url 即可)
pip install openai
bash
import ollama

# 方式一:官方 SDK - 简单问答
response = ollama.chat(
    model='llama3.2',
    messages=[
        {'role': 'user', 'content': '请解释 Python 的 GIL 机制'}
    ]
)
print(response['message']['content'])

# 方式二:流式输出(适合实时显示)
stream = ollama.chat(
    model='llama3.2',
    messages=[{'role': 'user', 'content': '写一首关于代码的诗'}],
    stream=True
)
for chunk in stream:
    print(chunk['message']['content'], end='', flush=True)

# 方式三:通过 OpenAI SDK 使用 Ollama(最少改动迁移)
from openai import OpenAI

client = OpenAI(
    base_url='http://localhost:11434/v1',
    api_key='ollama',  # 任意字符串即可
)

completion = client.chat.completions.create(
    model='llama3.2',
    messages=[
        {'role': 'system', 'content': '你是一个专业的代码审查助手'},
        {'role': 'user', 'content': '请帮我审查以下 Python 代码的安全性'}
    ]
)
print(completion.choices[0].message.content)
python

JavaScript / TypeScript 集成

# 安装 Ollama JS 官方库
npm install ollama
# 或者 bun add ollama
bash
import ollama from 'ollama';

// 方式一:官方 SDK - 简单问答
async function simpleChat() {
  const response = await ollama.chat({
    model: 'llama3.2',
    messages: [{ role: 'user', content: '解释 TypeScript 装饰器的用法' }],
  });
  console.log(response.message.content);
}

// 方式二:流式输出
async function streamChat() {
  const stream = await ollama.chat({
    model: 'llama3.2',
    messages: [{ role: 'user', content: '写一个 React Hook 最佳实践示例' }],
    stream: true,
  });

  for await (const part of stream) {
    process.stdout.write(part.message.content);
  }
}

// 方式三:使用 OpenAI SDK 接入 Ollama(Next.js / Node.js 项目迁移首选)
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'http://localhost:11434/v1',
  apiKey: 'ollama',
});

async function openaiCompatible() {
  const completion = await client.chat.completions.create({
    model: 'llama3.2',
    messages: [
      { role: 'system', content: '你是一个专业的前端架构师' },
      { role: 'user', content: '请推荐 2026 年 React 项目的最佳目录结构' },
    ],
  });
  console.log(completion.choices[0].message.content);
}

simpleChat();
typescript

七、搭建私有化 RAG 知识库

RAG 知识库搭建架构

RAG(Retrieval-Augmented Generation,检索增强生成)是当前最实用的 AI 应用模式。结合 Ollama 本地模型,你可以搭建一套完全私有化、零成本的企业知识库。

整个 RAG 流程分为两阶段:

📚 索引阶段(一次性):文档 → 文本分块 → 向量化 → 存入向量数据库
🔍 检索阶段(每次查询):用户问题 → 向量检索相关文档 → 拼入 Prompt → LLM 生成答案
1

安装依赖

# 安装必要的 Python 包
pip install ollama chromadb pypdf2 langchain langchain-community
bash
2

下载向量嵌入模型

RAG 需要将文本转化为向量,Ollama 提供专用的 Embedding 模型:

# nomic-embed-text 是目前 Ollama 最推荐的 Embedding 模型
ollama pull nomic-embed-text

# 验证 Embedding 是否正常工作
curl http://localhost:11434/api/embeddings \
  -d '{"model": "nomic-embed-text", "prompt": "Ollama 是一个本地 AI 工具"}'
bash
3

构建完整 RAG 系统

import ollama
import chromadb
from pathlib import Path

# 初始化向量数据库(本地持久化)
client = chromadb.PersistentClient(path="./knowledge_base")
collection = client.get_or_create_collection(
    name="my_docs",
    metadata={"hnsw:space": "cosine"}
)

def get_embedding(text: str) -> list[float]:
    """调用 Ollama 生成文本向量"""
    response = ollama.embeddings(
        model='nomic-embed-text',
        prompt=text
    )
    return response['embedding']

def index_document(file_path: str, doc_id: str):
    """将文档索引到向量数据库"""
    text = Path(file_path).read_text(encoding='utf-8')

    # 按段落分块(简单示例,生产环境建议用 langchain 的 TextSplitter)
    chunks = [chunk.strip() for chunk in text.split('\n\n') if len(chunk.strip()) > 50]

    embeddings = [get_embedding(chunk) for chunk in chunks]
    ids = [f"{doc_id}_{i}" for i in range(len(chunks))]

    collection.add(
        embeddings=embeddings,
        documents=chunks,
        ids=ids
    )
    print(f"✅ 已索引 {len(chunks)} 个文本块")

def rag_query(question: str, top_k: int = 3) -> str:
    """执行 RAG 查询:检索相关文档 + 生成答案"""
    # Step 1: 将问题向量化,检索相关文档
    query_embedding = get_embedding(question)
    results = collection.query(
        query_embeddings=[query_embedding],
        n_results=top_k
    )

    # Step 2: 构建包含上下文的 Prompt
    context = "\n\n".join(results['documents'][0])
    prompt = f"""请根据以下参考资料回答问题。如果资料中没有相关信息,请如实说明。

参考资料:
{context}

问题:{question}

回答:"""

    # Step 3: 调用本地 LLM 生成答案
    response = ollama.chat(
        model='llama3.2',
        messages=[{'role': 'user', 'content': prompt}]
    )
    return response['message']['content']

# 使用示例
if __name__ == "__main__":
    # 索引你的文档
    index_document("./docs/api-manual.txt", "api_manual")
    index_document("./docs/user-guide.txt", "user_guide")

    # 开始问答
    answer = rag_query("如何重置用户密码?")
    print(answer)
python
💡 进阶建议:生产环境推荐使用 LangChainLlamaIndex 框架,它们已内置对 Ollama 的完整支持,提供更完善的文本分块、元数据过滤、多路召回等能力。

八、常见问题排查

常见问题与解决方案
❓ GPU 没有被使用,推理速度很慢?
首先确认 GPU 驱动版本足够新(NVIDIA 需 ≥ 520.61.05)。然后通过日志确认 GPU 是否被识别:
# macOS 查看日志
cat ~/.ollama/logs/server.log

# Linux 查看日志
journalctl -u ollama -n 50

# 强制指定 GPU 库(NVIDIA)
OLLAMA_LLM_LIBRARY=cuda ollama serve
❓ 模型下载到一半断了,怎么续传?
直接重新执行 ollama pull <model-name>,Ollama 支持断点续传,会从上次下载的位置继续。模型文件存储在 ~/.ollama/models/(macOS/Linux)或 C:\Users\<user>\.ollama\models(Windows)。
❓ 如何在局域网内共享 Ollama 服务?
设置 OLLAMA_HOST 环境变量,让 Ollama 监听所有网卡:
# Linux / macOS
OLLAMA_HOST=0.0.0.0:11434 ollama serve

# 也可以写入系统环境变量(以 Linux systemd 为例)
sudo systemctl edit ollama  # 添加 Environment="OLLAMA_HOST=0.0.0.0:11434"
注意:共享前请确保配置了访问控制,避免服务暴露到公网。
❓ 响应速度太慢,如何优化?
1. 选择更小的模型:3B 比 7B 快 2-3 倍,质量略有下降但日常够用。
2. 启用量化版本ollama pull llama3.2:3b-q4_K_M(4bit 量化,内存减少 50%,速度提升明显)。
3. 调整并发参数:设置 OLLAMA_NUM_PARALLEL=4 处理多并发请求。
4. 保持模型常驻内存:设置 OLLAMA_KEEP_ALIVE=-1 避免模型被卸载。
❓ Linux 上遇到 "permission denied" 或 tmp noexec 错误?
部分 Linux 系统的 /tmp 分区挂载了 noexec 标志,导致 Ollama 无法执行临时文件。解决方法是指定其他临时目录:
TMPDIR=/var/tmp ollama serve
❓ 如何自定义系统提示词(System Prompt)?
通过 Modelfile 创建自定义模型:
# 创建 Modelfile
cat > Modelfile << 'EOF'
FROM llama3.2
SYSTEM """你是公司内部的技术文档助手,专注于回答关于我们产品的问题。
请始终使用中文回答,保持专业、简洁的风格。"""
PARAMETER temperature 0.7
EOF

# 基于 Modelfile 创建新模型
ollama create my-assistant -f Modelfile

# 使用自定义模型
ollama run my-assistant

总结

Ollama 让本地大模型部署变得和 Docker 一样简单。从一行命令安装,到 REST API 集成,再到私有 RAG 知识库,整个流程门槛极低但上限很高。最重要的是:你的数据,完全由你掌控

下一步可以探索:自定义 Modelfile、多模型路由、与 LangChain 深度集成,以及在 Kubernetes 上的集群化部署。

🔗 延伸资源
· Ollama 官方文档:docs.ollama.com
· Ollama 模型库:ollama.com/library
· GitHub 仓库:github.com/ollama/ollama(100k+ Stars)
· Open WebUI:为 Ollama 提供 ChatGPT 风格的 Web 界面