Ubuntu 22.04 + Windows 本地部署 AI 大模型完全指南:Ollama + Python 调用实战(附国内加速配置)

🌸你好呀!我是 lbb小魔仙
🌟 感谢陪伴~ 小白博主在线求友
🌿 跟着小白学Linux/Java/Python
📖 专栏汇总:
《Linux》专栏 | 《Java》专栏 | 《Python》专栏

- [Ubuntu 22.04 + Windows 本地部署 AI 大模型完全指南:Ollama + Python 调用实战(附国内加速配置)](#Ubuntu 22.04 + Windows 本地部署 AI 大模型完全指南:Ollama + Python 调用实战(附国内加速配置))
-
- [1. 引言:为什么要在本地跑大模型?](#1. 引言:为什么要在本地跑大模型?)
- [2. 环境准备](#2. 环境准备)
-
- [2.1 硬件要求](#2.1 硬件要求)
- [2.2 系统要求](#2.2 系统要求)
- [2.3 Python 环境确认](#2.3 Python 环境确认)
- [3. Ollama 安装](#3. Ollama 安装)
-
- [3.1 Ubuntu 22.04 安装 Ollama](#3.1 Ubuntu 22.04 安装 Ollama)
- [3.2 Windows 11 安装 Ollama](#3.2 Windows 11 安装 Ollama)
- [3.3 验证 Ollama 安装](#3.3 验证 Ollama 安装)
- [4. 模型拉取与管理](#4. 模型拉取与管理)
-
- [4.1 推荐模型列表](#4.1 推荐模型列表)
- [4.2 国内加速拉取模型](#4.2 国内加速拉取模型)
- [4.3 常用模型管理命令](#4.3 常用模型管理命令)
- [5. Python 调用 Ollama](#5. Python 调用 Ollama)
-
- [5.1 安装 Python 依赖](#5.1 安装 Python 依赖)
- [5.2 基础对话调用](#5.2 基础对话调用)
- [5.3 流式输出(Stream)](#5.3 流式输出(Stream))
- [5.4 多轮对话实现](#5.4 多轮对话实现)
- [5.5 REST API 调用方式](#5.5 REST API 调用方式)
- [6. 进阶:构建简单的 AI 问答程序](#6. 进阶:构建简单的 AI 问答程序)
- [7. 常见问题与解决方案](#7. 常见问题与解决方案)
-
- [问题一:`Error: connection refused`](#问题一:
Error: connection refused) - 问题二:模型拉取速度极慢或中断
- 问题三:运行时内存不足(OOM)
- [问题四:Python 调用报 `ModuleNotFoundError`](#问题四:Python 调用报
ModuleNotFoundError)
- [问题一:`Error: connection refused`](#问题一:
- [8. 总结与拓展建议](#8. 总结与拓展建议)
-
- [📊 本教程覆盖内容回顾](#📊 本教程覆盖内容回顾)
- [🚀 拓展学习路径](#🚀 拓展学习路径)
- [📚 参考资源](#📚 参考资源)
摘要:本教程手把手带你在 Ubuntu 22.04 / Windows 11 上安装 Ollama,拉取 Qwen2.5、LLaMA3 等主流开源大模型,并通过 Python 调用本地模型实现对话、流式输出、多轮对话等功能。全程无需翻墙,附国内镜像加速方案,适合零基础到进阶的 AI 开发者。
1. 引言:为什么要在本地跑大模型?
随着 LLaMA、Qwen、Mistral 等开源大模型的兴起,越来越多的开发者选择在本地运行 AI 大模型,原因主要有以下几点:
| 痛点 | 本地部署的解决方式 |
|---|---|
| API 调用费用高 | 本地推理完全免费 |
| 数据隐私问题 | 数据不出本机,绝对安全 |
| 网络不稳定 | 离线可用,无需网络 |
| 调用频率限制 | 本地无并发限制 |
Ollama 是目前最流行的本地大模型运行工具之一,它将复杂的模型部署封装成极简的命令行工具,支持 macOS / Linux / Windows,并内置了与 OpenAI API 兼容的 REST 接口,可以无缝接入 Python 生态。
💡 适用场景:本地 AI 助手、私有知识库问答、代码辅助、文档分析等
2. 环境准备
2.1 硬件要求
| 模型规模 | 推荐内存(RAM) | 推荐显存(VRAM) | 说明 |
|---|---|---|---|
| 1B ~ 3B | 8 GB | 4 GB | 入门级,速度快 |
| 7B | 16 GB | 8 GB | 推荐配置,效果与速度平衡 |
| 13B | 32 GB | 16 GB | 效果更好,需较强硬件 |
| 70B | 64 GB+ | 40 GB+ | 顶级效果,需专业级显卡 |
⚠️ 注意 :没有独立显卡也可以运行,Ollama 支持纯 CPU 推理,但速度会较慢。推荐至少 16GB 系统内存 以运行 7B 模型。
2.2 系统要求
Linux(Ubuntu 22.04):
bash
# 确认系统版本
lsb_release -a
# 预期输出:
# No LSB modules are available.
# Distributor ID: Ubuntu
# Description: Ubuntu 22.04.x LTS
# Release: 22.04
# Codename: jammy
Windows:
- Windows 10 版本 1903 或更高(推荐 Windows 11)
- 如需 GPU 加速:NVIDIA 显卡需安装 CUDA 驱动(版本 ≥ 12.1)
2.3 Python 环境确认
本教程需要 Python 3.8+(推荐 3.10 或 3.11):
bash
# 检查 Python 版本
python3 --version # Linux
python --version # Windows
# 预期输出(版本号应 ≥ 3.8):
# Python 3.11.x
如果版本过低,请先升级 Python:
bash
# Ubuntu 22.04 安装最新 Python
sudo apt update
sudo apt install python3.11 python3.11-pip -y
3. Ollama 安装
3.1 Ubuntu 22.04 安装 Ollama
方式一:官方一键安装脚本(推荐)
bash
# 下载并执行官方安装脚本
curl -fsSL https://ollama.com/install.sh | sh
💡 网络问题 :如果
curl下载缓慢,请参考 [4.2 节](#4.2 节) 的代理方案,或使用方式二手动安装。
方式二:手动安装(网络受限时使用)
bash
# 第一步:从 GitHub Releases 下载对应平台的包
# 访问:https://github.com/ollama/ollama/releases
# 选择 ollama-linux-amd64.tgz(x86_64 架构)
# 或 ollama-linux-arm64.tgz(ARM 架构)
# 第二步:解压到系统目录
sudo tar -C /usr -xzf ollama-linux-amd64.tgz
# 第三步:创建 systemd 服务(实现开机自启)
sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama
sudo usermod -a -G ollama $(whoami)
# 创建服务文件
sudo tee /etc/systemd/system/ollama.service > /dev/null <<EOF
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=$PATH"
[Install]
WantedBy=default.target
EOF
# 启动 Ollama 服务
sudo systemctl daemon-reload
sudo systemctl enable ollama
sudo systemctl start ollama
验证 Linux 安装:
bash
# 查看 Ollama 服务状态
sudo systemctl status ollama
# 预期输出(Active 应为 active (running)):
# ● ollama.service - Ollama Service
# Loaded: loaded (/etc/systemd/system/ollama.service; enabled; vendor preset: enabled)
# Active: active (running) since ...
3.2 Windows 11 安装 Ollama
-
访问 https://ollama.com/download,点击 Download for Windows 下载安装包(
OllamaSetup.exe) -
双击运行安装包,按照向导完成安装(默认安装即可)
-
安装完成后,Ollama 会自动在系统托盘中运行
-
打开 PowerShell 或 命令提示符 进行后续操作
💡 提示:Windows 版 Ollama 会自动添加到系统 PATH,无需手动配置环境变量。
3.3 验证 Ollama 安装
在终端中执行以下命令,确认安装成功:
bash
# 查看 Ollama 版本
ollama --version
# 预期输出:
# ollama version is 0.x.x
# 查看帮助信息
ollama --help
4. 模型拉取与管理
4.1 推荐模型列表
以下是适合不同硬件配置的推荐模型:
| 模型名称 | 参数量 | 拉取命令 | 特点 |
|---|---|---|---|
| qwen2.5:7b | 7B | ollama pull qwen2.5:7b |
阿里通义,中文最强,首推 |
| llama3.2:3b | 3B | ollama pull llama3.2:3b |
Meta 出品,轻量快速 |
| qwen2.5:1.5b | 1.5B | ollama pull qwen2.5:1.5b |
超轻量,低配电脑可用 |
| deepseek-r1:7b | 7B | ollama pull deepseek-r1:7b |
深度求索,推理能力强 |
| codellama:7b | 7B | ollama pull codellama:7b |
代码专用模型 |
| nomic-embed-text | --- | ollama pull nomic-embed-text |
文本向量化,RAG 必备 |
💡 推荐新手从
qwen2.5:7b开始:中文理解能力强,7B 大小在普通电脑上即可流畅运行。
4.2 国内加速拉取模型
由于 Ollama 模型存储在境外服务器,直接拉取可能较慢。以下是国内加速方案:
方案一:配置 Ollama 环境变量代理(Linux)
bash
# 编辑 Ollama 服务配置
sudo systemctl edit ollama.service
# 在文件中添加以下内容(替换为你的代理地址):
[Service]
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1"
# 重载并重启服务
sudo systemctl daemon-reload
sudo systemctl restart ollama
方案二:使用国内镜像站(无需代理)
bash
# 设置环境变量使用国内镜像(临时生效)
export OLLAMA_HOST=0.0.0.0
export OLLAMA_MODELS=/path/to/models # 自定义模型存储路径(可选)
# Linux 永久生效:写入 ~/.bashrc 或 ~/.zshrc
echo 'export OLLAMA_HOST=0.0.0.0' >> ~/.bashrc
source ~/.bashrc
方案三:Windows 系统代理
在 Windows 系统设置中配置好代理后,Ollama 会自动读取系统代理,无需额外配置。
4.3 常用模型管理命令
bash
# 拉取模型(首次使用时下载,约 4GB)
ollama pull qwen2.5:7b
# 列出已下载的所有模型
ollama list
# 预期输出:
# NAME ID SIZE MODIFIED
# qwen2.5:7b abc123def456 4.7 GB 2 minutes ago
# 在终端直接对话(测试用)
ollama run qwen2.5:7b
# 删除模型(释放磁盘空间)
ollama rm qwen2.5:7b
# 查看模型详情
ollama show qwen2.5:7b
# 查看当前运行中的模型
ollama ps
5. Python 调用 Ollama
5.1 安装 Python 依赖
bash
# 创建虚拟环境(强烈推荐,避免依赖冲突)
python3 -m venv ollama_env
# 激活虚拟环境
source ollama_env/bin/activate # Linux/macOS
ollama_env\Scripts\activate # Windows
# 安装 ollama Python 客户端
pip install ollama
# 安装 requests(REST API 调用备选方案)
pip install requests
# 确认安装成功
pip show ollama
# 预期输出:
# Name: ollama
# Version: 0.x.x
⚠️ 注意 :调用前请确保 Ollama 服务正在运行(
ollama serve或系统服务已启动),默认监听地址为http://localhost:11434。
5.2 基础对话调用
python
# basic_chat.py
import ollama
def simple_chat(prompt: str, model: str = "qwen2.5:7b") -> str:
"""
最简单的单轮对话调用
Args:
prompt: 用户输入的问题
model: 使用的模型名称
Returns:
模型回复的文本内容
"""
response = ollama.chat(
model=model,
messages=[
{
"role": "user",
"content": prompt
}
]
)
# 提取回复内容
return response["message"]["content"]
if __name__ == "__main__":
# 测试调用
answer = simple_chat("请用一句话介绍 Python 语言")
print(f"模型回复:{answer}")
运行结果示例:
模型回复:Python 是一种简洁易读、功能强大的高级编程语言,广泛用于数据科学、Web 开发、人工智能等领域。
5.3 流式输出(Stream)
流式输出可以实现"边生成边显示"的效果,大幅提升用户体验:
python
# stream_chat.py
import ollama
import sys
def stream_chat(prompt: str, model: str = "qwen2.5:7b") -> None:
"""
流式输出模式:字符逐一打印,类似 ChatGPT 的打字效果
Args:
prompt: 用户输入的问题
model: 使用的模型名称
"""
print(f"模型 [{model}] 回复:", end="", flush=True)
# stream=True 开启流式模式
for chunk in ollama.chat(
model=model,
messages=[{"role": "user", "content": prompt}],
stream=True # 关键参数:开启流式输出
):
# 提取当前 chunk 的文本内容
content = chunk["message"]["content"]
print(content, end="", flush=True)
print() # 输出完成后换行
if __name__ == "__main__":
stream_chat("解释一下什么是机器学习?")
5.4 多轮对话实现
python
# multi_turn_chat.py
import ollama
from typing import List, Dict
class OllamaChat:
"""
支持多轮对话的 Ollama 对话类
维护对话历史,实现上下文感知
"""
def __init__(self, model: str = "qwen2.5:7b", system_prompt: str = None):
"""
初始化对话类
Args:
model: 模型名称
system_prompt: 系统提示词(设定 AI 角色和行为)
"""
self.model = model
self.history: List[Dict] = []
# 如果有系统提示词,添加到历史开头
if system_prompt:
self.history.append({
"role": "system",
"content": system_prompt
})
def chat(self, user_input: str, stream: bool = True) -> str:
"""
发送消息并获取回复
Args:
user_input: 用户输入
stream: 是否使用流式输出
Returns:
模型的完整回复
"""
# 将用户消息添加到历史
self.history.append({
"role": "user",
"content": user_input
})
full_response = ""
if stream:
print("AI: ", end="", flush=True)
for chunk in ollama.chat(
model=self.model,
messages=self.history,
stream=True
):
content = chunk["message"]["content"]
print(content, end="", flush=True)
full_response += content
print()
else:
response = ollama.chat(
model=self.model,
messages=self.history
)
full_response = response["message"]["content"]
print(f"AI: {full_response}")
# 将 AI 回复也加入历史,维护上下文
self.history.append({
"role": "assistant",
"content": full_response
})
return full_response
def clear_history(self) -> None:
"""清空对话历史(保留系统提示词)"""
system_messages = [m for m in self.history if m["role"] == "system"]
self.history = system_messages
print("对话历史已清空")
def main():
# 创建对话实例,设定角色
bot = OllamaChat(
model="qwen2.5:7b",
system_prompt="你是一个专业的 Python 编程助手,回答要简洁准确,代码示例要规范。"
)
print("=== 本地 AI 对话系统 ===")
print("输入 'quit' 退出,输入 'clear' 清空历史\n")
while True:
user_input = input("你: ").strip()
if not user_input:
continue
if user_input.lower() == "quit":
print("再见!")
break
if user_input.lower() == "clear":
bot.clear_history()
continue
bot.chat(user_input)
print()
if __name__ == "__main__":
main()
5.5 REST API 调用方式
Ollama 提供了与 OpenAI 兼容的 REST API,可以直接用 requests 或 openai 库调用:
python
# rest_api_call.py
import requests
import json
def call_ollama_api(
prompt: str,
model: str = "qwen2.5:7b",
host: str = "http://localhost:11434"
) -> str:
"""
通过 REST API 调用 Ollama(与 OpenAI API 格式兼容)
Args:
prompt: 用户输入
model: 模型名称
host: Ollama 服务地址
Returns:
模型回复文本
"""
url = f"{host}/api/chat"
payload = {
"model": model,
"messages": [
{"role": "user", "content": prompt}
],
"stream": False # 关闭流式,直接返回完整结果
}
try:
response = requests.post(
url,
json=payload,
timeout=120 # 设置超时时间(秒)
)
response.raise_for_status() # 检查 HTTP 状态码
result = response.json()
return result["message"]["content"]
except requests.exceptions.ConnectionError:
return "错误:无法连接到 Ollama 服务,请确认服务已启动(ollama serve)"
except requests.exceptions.Timeout:
return "错误:请求超时,模型可能正在加载中,请稍后重试"
except Exception as e:
return f"错误:{str(e)}"
# 使用 openai 库调用(无缝切换)
# pip install openai
from openai import OpenAI
def call_with_openai_sdk(prompt: str) -> str:
"""
使用 OpenAI SDK 调用本地 Ollama(代码与调用云端 API 完全一致)
"""
client = OpenAI(
base_url="http://localhost:11434/v1", # 指向本地 Ollama
api_key="ollama" # 随便填,本地不校验
)
response = client.chat.completions.create(
model="qwen2.5:7b",
messages=[{"role": "user", "content": prompt}]
)
return response.choices[0].message.content
if __name__ == "__main__":
# 测试 REST API 调用
result = call_ollama_api("Python 中列表和元组的区别是什么?")
print(result)
6. 进阶:构建简单的 AI 问答程序
综合以上内容,构建一个功能完整的命令行 AI 助手:
python
# ai_assistant.py
import ollama
import os
import json
from datetime import datetime
from pathlib import Path
class LocalAIAssistant:
"""
功能完整的本地 AI 助手
- 支持多轮对话
- 支持对话历史保存/加载
- 支持多模型切换
"""
SUPPORTED_MODELS = [
"qwen2.5:7b",
"qwen2.5:1.5b",
"llama3.2:3b",
"deepseek-r1:7b",
"codellama:7b"
]
def __init__(self, model: str = "qwen2.5:7b"):
self.model = model
self.history = []
self.session_file = Path(f"session_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json")
def _get_installed_models(self) -> list:
"""获取本地已安装的模型列表"""
try:
models = ollama.list()
return [m["name"] for m in models.get("models", [])]
except Exception:
return []
def switch_model(self, model_name: str) -> bool:
"""切换模型"""
installed = self._get_installed_models()
if model_name not in installed:
print(f"模型 {model_name} 未安装,请先执行: ollama pull {model_name}")
return False
self.model = model_name
print(f"已切换到模型: {model_name}")
return True
def chat(self, user_input: str) -> str:
"""发送消息(流式输出)"""
self.history.append({"role": "user", "content": user_input})
full_response = ""
print(f"\n🤖 [{self.model}]: ", end="", flush=True)
try:
for chunk in ollama.chat(
model=self.model,
messages=self.history,
stream=True
):
content = chunk["message"]["content"]
print(content, end="", flush=True)
full_response += content
except ollama.ResponseError as e:
full_response = f"模型响应错误: {e.error}"
print(full_response)
except Exception as e:
full_response = f"调用失败: {str(e)}"
print(full_response)
print("\n")
self.history.append({"role": "assistant", "content": full_response})
return full_response
def save_session(self):
"""保存当前对话到文件"""
with open(self.session_file, "w", encoding="utf-8") as f:
json.dump({
"model": self.model,
"timestamp": datetime.now().isoformat(),
"history": self.history
}, f, ensure_ascii=False, indent=2)
print(f"对话已保存至: {self.session_file}")
def run(self):
"""启动交互式对话循环"""
installed_models = self._get_installed_models()
print("=" * 50)
print(" 🚀 本地 AI 助手(基于 Ollama)")
print("=" * 50)
print(f"当前模型: {self.model}")
print(f"本地可用模型: {', '.join(installed_models) or '无'}")
print("\n命令提示:")
print(" /switch <模型名> - 切换模型")
print(" /save - 保存对话")
print(" /clear - 清空历史")
print(" /quit - 退出")
print("=" * 50 + "\n")
while True:
try:
user_input = input("👤 你: ").strip()
if not user_input:
continue
# 处理命令
if user_input.startswith("/"):
parts = user_input.split(maxsplit=1)
cmd = parts[0].lower()
if cmd == "/quit":
self.save_session()
print("再见!👋")
break
elif cmd == "/clear":
self.history.clear()
print("对话历史已清空\n")
elif cmd == "/save":
self.save_session()
elif cmd == "/switch" and len(parts) > 1:
self.switch_model(parts[1])
else:
print("未知命令,请输入 /quit /clear /save /switch <模型名>")
continue
# 普通对话
self.chat(user_input)
except KeyboardInterrupt:
print("\n\n检测到 Ctrl+C,正在保存对话...")
self.save_session()
break
if __name__ == "__main__":
assistant = LocalAIAssistant(model="qwen2.5:7b")
assistant.run()
7. 常见问题与解决方案
问题一:Error: connection refused
错误信息:
Error: dial tcp 127.0.0.1:11434: connect: connection refused
原因:Ollama 服务未启动
解决方案:
bash
# Linux:启动 Ollama 服务
sudo systemctl start ollama
# 或手动启动(前台运行,方便查看日志)
ollama serve
# Windows:在系统托盘找到 Ollama 图标,右键启动
# 或在命令提示符中运行:
ollama serve
问题二:模型拉取速度极慢或中断
解决方案:
bash
# 方法一:设置代理后重新拉取
export HTTPS_PROXY=http://127.0.0.1:7890 # 替换为你的代理
# 方法二:断点续传(重新执行 pull 命令,Ollama 支持自动续传)
ollama pull qwen2.5:7b
# 方法三:使用 modelscope 国内镜像手动下载
# 访问:https://modelscope.cn/models?q=qwen2.5-gguf
问题三:运行时内存不足(OOM)
错误信息:
Error: model requires more system memory than is available
解决方案:
bash
# 切换到更小的模型
ollama pull qwen2.5:1.5b # 1.5B 参数,约 1GB
# 或调整 Ollama 内存使用(Linux)
export OLLAMA_MAX_LOADED_MODELS=1 # 同时只加载 1 个模型
export OLLAMA_NUM_PARALLEL=1 # 限制并行请求数
问题四:Python 调用报 ModuleNotFoundError
bash
# 确认在正确的虚拟环境中
which python # Linux
where python # Windows
# 重新安装
pip install --upgrade ollama
# 确认版本
python -c "import ollama; print(ollama.__version__)"
8. 总结与拓展建议
📊 本教程覆盖内容回顾
| 章节 | 内容 |
|---|---|
| 环境准备 | 硬件要求、系统版本、Python 环境 |
| Ollama 安装 | Ubuntu + Windows 双平台安装 |
| 模型管理 | 拉取、列出、删除、国内加速 |
| Python 调用 | 基础对话、流式输出、多轮对话 |
| 进阶实战 | 完整 AI 助手程序 |
| 常见问题 | 4 个高频报错 + 解决方案 |
🚀 拓展学习路径
完成本教程后,推荐继续学习:
- LangChain 集成:将 Ollama 接入 LangChain,构建 Agent、RAG 知识库等高级应用
- Open WebUI :为本地模型搭建类 ChatGPT 的网页界面(
docker run -d -p 3000:8080 ghcr.io/open-webui/open-webui) - 向量数据库:结合 ChromaDB / FAISS,让大模型"读懂"你的私有文档
- 模型微调:使用 Unsloth / LLaMA Factory 对模型进行领域微调
💡 关注博主 ,后续将陆续更新 LangChain + Ollama 构建本地知识库 、Python 批量处理文档 + AI 摘要等进阶教程!
📚 参考资源
如果本文对你有帮助,欢迎点赞 👍 + 收藏 ⭐ + 关注!有问题欢迎在评论区留言,博主会及时回复 💬
📕个人领域 :Linux/C++/java/AI🚀 个人主页 :有点流鼻涕 · CSDN
💬 座右铭 : "向光而行,沐光而生。"
