Ollama 是什么? 一个开源的本地大语言模型运行工具,让你在个人电脑上一键下载、运行和管理 Llama、Mistral、Qwen 等开源 AI 模型,无需 GPU 集群,无需云端 API。


目录

  1. Ollama 是什么?
  2. 安装 Ollama
  3. 快速上手:运行你的第一个模型
  4. 模型管理:下载、切换、删除
  5. Ollama API:集成到你的应用
  6. 实战案例:构建本地 AI 助手
  7. 性能优化与 GPU 加速
  8. 常见问题 FAQ
  9. 总结

Ollama 是什么?

Ollama 是一个开源的本地大语言模型(LLM)运行工具,由 Jeff Hancock 创建,采用 MIT 许可证。它的核心目标是:让任何人都能轻松在本地运行开源 AI 模型。

核心特性

特性 说明
一键运行 ollama run llama3 即可启动模型
模型库 内置数十种热门模型,支持自定义 Modelfile
REST API 标准 OpenAI 兼容接口,方便集成
跨平台 macOS、Linux、Windows 全覆盖
GPU 加速 自动检测并利用 NVIDIA/AMD GPU
开源免费 MIT 许可证,商业可用

为什么选择 Ollama?

在 Ollama 出现之前,想在本地运行大语言模型通常需要复杂的配置:手动下载权重文件、安装 PyTorch、处理依赖冲突、编写推理代码。Ollama 把这些全部封装成一行命令。

与其他本地 LLM 工具对比:

工具 易用性 模型数量 API 兼容性 GPU 支持
Ollama ⭐⭐⭐⭐⭐ 50+ OpenAI 兼容 NVIDIA/AMD/Apple Silicon
LM Studio ⭐⭐⭐⭐ 30+ OpenAI 兼容 NVIDIA/AMD
GPT4All ⭐⭐⭐ 20+ 自定义 NVIDIA/AMD
手动部署 不限 自定义 需手动配置

Ollama 的优势在于极简的使用方式丰富的模型生态,特别适合开发者快速原型开发和日常 AI 辅助编程。


安装 Ollama

macOS

# 方法 1:一键安装(推荐)
curl -fsSL https://ollama.com/install.sh | sh

# 方法 2:Homebrew 安装
brew install ollama

# 验证安装
ollama --version

macOS 版本会自动利用 Apple Silicon (M1/M2/M3/M4) 的 Metal GPU 加速,性能表现优秀。

Linux

# 一键安装(包含 systemd 服务)
curl -fsSL https://ollama.com/install.sh | sh

# 手动安装(二进制方式)
curl -fsSL https://ollama.com/install.sh | OLLAMA_INSTALL=1 sh

# 使用 systemd 管理
sudo systemctl start ollama
sudo systemctl enable ollama

# 验证
ollama --version

Linux 安装会自动检测 NVIDIA GPU 并安装 CUDA 驱动支持。

Windows

# 下载 Windows 安装程序
winget install Ollama.Ollama

# 或者从官网下载安装包
# https://ollama.com/download/OllamaSetup.exe

# 验证
ollama --version

Windows 版本支持 NVIDIA CUDA 和 AMD ROCm GPU 加速。

Docker 部署

# 拉取官方镜像
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

# 验证
docker exec ollama ollama list

Docker 部署适合服务器环境和 CI/CD 场景。


快速上手:运行你的第一个模型

一步运行

ollama run llama3.2

就这么简单!Ollama 会自动: 1. 检查本地是否已有该模型 2. 没有则从官方模型库下载 3. 启动交互式对话界面

首次运行会下载模型(大约 2-4 GB),之后启动只需几秒钟。

交互式对话

运行模型后,你会看到一个交互式终端界面:

>>> 你好!请用中文介绍一下你自己。

你好!我是一个 AI 助手,基于 Llama 3.2 模型运行。我可以帮助
你回答问题、编写代码、翻译文本、进行头脑风暴等等。有什么我
可以帮你的吗?

>>> 帮我写一段 Python 快速排序代码

当然!这是快速排序的 Python 实现:

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quick_sort(left) + middle + quick_sort(right)

# 测试
print(quick_sort([3, 6, 8, 10, 1, 2, 1]))
# 输出: [1, 1, 2, 3, 6, 8, 10]

常用快捷键

快捷键 功能
Enter 发送消息
Ctrl+C 中断当前响应
Ctrl+D/bye 退出对话
Ctrl+R 重新生成回复
/set parameter 修改生成参数

模型管理:下载、切换、删除

查看可用模型

# 查看本地已安装的模型
ollama list

# 示例输出:
# NAME                    ID              SIZE    MODIFIED
# llama3.2:latest         a1b2c3d4e5f6    2.0 GB  2 hours ago
# mistral:7b              f6e5d4c3b2a1    4.1 GB  1 day ago
# qwen2.5:14b             1a2b3c4d5e6f    8.9 GB  3 days ago

浏览官方模型库

访问 ollama.com/library 查看所有可用模型。以下是 2026 年最热门的模型推荐:

模型 参数量 大小 适用场景
Llama 3.2 1B/3B/8B 0.8-4.7 GB 通用对话、代码生成
Mistral 7B 7B 4.1 GB 通用任务、多语言
Qwen 2.5 7B/14B/32B 4-18 GB 中文优化、数学推理
DeepSeek Coder V2 16B/236B 9-133 GB 代码生成、编程助手
Phi-4 14B 8.4 GB 轻量级、推理能力强
Gemma 2 2B/9B/27B 1.6-15 GB Google 出品、高效推理
Yi 1.5 6B/9B/34B 3.5-20 GB 中英文双语优化

下载模型

# 下载指定模型
ollama pull llama3.2
ollama pull mistral:7b
ollama pull qwen2.5:14b

# 下载特定版本
ollama pull llama3.2:3b

切换模型

在交互式对话中:

>>> /model mistral:7b
已切换到 mistral:7b 模型

或者在命令行直接指定:

ollama run mistral:7b

删除模型

# 删除单个模型
ollama rm llama3.2

# 查看所有模型占用空间
du -sh ~/.ollama/models/*

自定义 Modelfile

Ollama 支持创建自定义模型配置。创建 Modelfile 文件:

FROM llama3.2:3b

# 设置系统提示词
SYSTEM """
你是一个专业的 Python 开发助手。
回答时请:
1. 优先给出可运行的代码示例
2. 解释代码的关键逻辑
3. 指出潜在的陷阱和优化点
"""

# 调整生成参数
PARAMETER temperature 0.7
PARAMETER top_p 0.9
PARAMETER num_ctx 4096

然后创建自定义模型:

# 创建模型
ollama create my-python-assistant -f Modelfile

# 运行自定义模型
ollama run my-python-assistant

Ollama API:集成到你的应用

REST API 基础

Ollama 默认在 http://localhost:11434 提供 REST API,兼容 OpenAI 接口格式。

# 生成文本(非流式)
curl http://localhost:11434/api/generate -d '{
  "model": "llama3.2",
  "prompt": "用 Python 写一个冒泡排序",
  "stream": false
}'

# Chat 格式(多轮对话)
curl http://localhost:11434/api/chat -d '{
  "model": "llama3.2",
  "messages": [
    {"role": "system", "content": "你是一个代码专家"},
    {"role": "user", "content": "解释 async/await"}
  ],
  "stream": false
}'

OpenAI 兼容接口

Ollama 提供 OpenAI 兼容端点,方便迁移现有应用:

# 兼容 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"}]
  }'

Python 集成

使用官方 ollama Python 库:

# 安装
# pip install ollama

import ollama

# 简单生成
response = ollama.generate(
    model='llama3.2',
    prompt='用一句话解释什么是量子计算'
)
print(response['response'])

# Chat 格式
response = ollama.chat(
    model='llama3.2',
    messages=[
        {'role': 'system', 'content': '你是代码审查专家'},
        {'role': 'user', 'content': '这段代码有什么问题?\n\nfor i in range(len(arr)):\n    if arr[i] == x: return i'}
    ]
)
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

# 指向 Ollama 本地端点
client = OpenAI(
    base_url='http://localhost:11434/v1',
    api_key='ollama'  # 任意值即可
)

response = client.chat.completions.create(
    model='llama3.2',
    messages=[
        {'role': 'user', 'content': '解释什么是 RAG'}
    ]
)
print(response.choices[0].message.content)

JavaScript/TypeScript 集成

// npm install ollama
import { Ollama } from 'ollama';

const ollama = new Ollama();

// 简单生成
const response = await ollama.generate({
  model: 'llama3.2',
  prompt: '什么是 Docker?',
});
console.log(response.response);

// Chat 格式
const chat = await ollama.chat({
  model: 'llama3.2',
  messages: [
    { role: 'user', content: '推荐 5 个学习 Rust 的资源' }
  ],
});
console.log(chat.message.content);

实战案例:构建本地 AI 助手

案例 1:本地代码审查助手

创建一个专门审查代码的 AI 助手:

import ollama
import sys

def review_code(code: str, language: str = "Python"):
    """本地代码审查"""
    response = ollama.chat(
        model='llama3.2',
        messages=[
            {'role': 'system', 'content': f'''你是一个资深 {language} 代码审查员。
请从以下维度审查代码:
1. 代码风格(PEP 8 / 最佳实践)
2. 潜在 bug 和边界情况
3. 性能问题
4. 安全漏洞
5. 改进建议

输出格式:
- 问题等级:🔴 严重 / 🟡 警告 / 🟢 建议
- 问题描述
- 修复代码示例'''},
            {'role': 'user', 'content': f'请审查以下代码:\n\n```{language}\n{code}\n```'}
        ]
    )
    return response['message']['content']

if __name__ == '__main__':
    # 从文件读取代码
    with open(sys.argv[1], 'r') as f:
        code = f.read()
    print(review_code(code))

使用方式:

python review.py my_script.py

案例 2:本地 RAG 知识库

结合向量数据库构建本地 RAG 系统:

# pip install ollama chromadb sentence-transformers

import ollama
import chromadb
from chromadb.utils import embedding_functions

# 初始化 Chroma 客户端
chroma_client = chromadb.Client()

# 使用本地嵌入模型
embed_fn = embedding_functions.SentenceTransformerEmbeddingFunction(
    model_name="all-MiniLM-L6-v2"
)

collection = chroma_client.get_or_create_collection(
    name="knowledge_base",
    embedding_function=embed_fn
)

# 添加文档
def add_document(text: str, metadata: dict = None):
    collection.add(
        documents=[text],
        metadatas=[metadata or {}],
        ids=[f"doc_{collection.count()}"]
    )

# 查询相关文档
def retrieve(query: str, n_results: int = 3):
    results = collection.query(
        query_texts=[query],
        n_results=n_results
    )
    return results['documents'][0]

# 生成回答
def rag_answer(question: str) -> str:
    # 1. 检索相关文档
    context_docs = retrieve(question)
    context = "\n\n".join(context_docs)

    # 2. 调用 Ollama 生成回答
    response = ollama.chat(
        model='llama3.2',
        messages=[
            {'role': 'system', 'content': f'基于以下上下文回答问题:\n\n{context}'},
            {'role': 'user', 'content': question}
        ]
    )
    return response['message']['content']

# 使用示例
add_document("Ollama 支持 Llama、Mistral、Qwen 等开源模型")
add_document("Ollama 提供 OpenAI 兼容的 REST API")
print(rag_answer("Ollama 支持哪些模型?"))

案例 3:批量文本处理

import ollama
import json

def extract_entities(text: str) -> dict:
    """从文本中提取实体"""
    response = ollama.chat(
        model='llama3.2',
        messages=[{
            'role': 'user',
            'content': f'''从以下文本中提取实体,以 JSON 格式返回:
{text}

返回格式:
{{
  "人物": [],
  "组织": [],
  "地点": [],
  "时间": [],
  "事件": []
}}'''
        }]
    )
    try:
        return json.loads(response['message']['content'])
    except json.JSONDecodeError:
        return {}

# 批量处理
texts = [
    "苹果公司 CEO 库克于 2026 年 6 月访问北京",
    "OpenAI 在旧金山发布了 GPT-5"
]

for text in texts:
    entities = extract_entities(text)
    print(json.dumps(entities, ensure_ascii=False, indent=2))