Ollama 是什么? 一个开源的本地大语言模型运行工具,让你在个人电脑上一键下载、运行和管理 Llama、Mistral、Qwen 等开源 AI 模型,无需 GPU 集群,无需云端 API。
目录
- Ollama 是什么?
- 安装 Ollama
- 快速上手:运行你的第一个模型
- 模型管理:下载、切换、删除
- Ollama API:集成到你的应用
- 实战案例:构建本地 AI 助手
- 性能优化与 GPU 加速
- 常见问题 FAQ
- 总结
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))