Ollama 核心笔记 - 本地大模型部署与调用

一、Ollama 基础认知

1.1 什么是 Ollama

Ollama 是一款轻量级、开源的本地大模型部署工具,专为简化大模型本地运行流程设计,无需关注复杂的底层环境配置,一键即可实现开源大模型的下载、部署和调用。

核心定位:阿里云百炼等云端大模型的本地备用方案,依托本地电脑硬件(CPU/GPU)提供算力,无网络/额度限制,数据完全私有化。

1.2 核心优势

1.3 官方资源

二、Ollama 环境部署(全平台通用)

2.1 安装步骤

  1. 打开 Ollama 官方官网:https://ollama.com
  2. 点击页面「Download」按钮,根据自己的系统(Windows/Mac/Linux)下载对应安装包;
  3. 双击安装包,一路默认下一步完成安装(无需手动配置环境变量,安装后自动添加);
  4. 安装完成后,打开命令行终端(CMD/PowerShell/终端),输入验证命令,测试是否安装成功。

2.2 安装验证

# 验证Ollama是否安装成功,输出版本信息即表示成功
ollama --version
                

2.3 硬件选型建议(模型参数量匹配)

本地硬件配置 推荐运行模型参数量 代表模型
集显/核显(8G内存以上) 1.5B 以内 DeepSeek-R1:1.5b、Qwen:1.8b
4G 独立显卡 8B 以内 Qwen3:4b、DeepSeek-V3:7b
8G 独立显卡 14B 以内 Qwen:14b、LLaMA3:8b
16G+ 独立显卡 32B 以内 Qwen3:32b、DeepSeek-R1:32b
注意:模型参数量越大,对硬件要求越高,若硬件不足,模型运行/推理速度会大幅下降;优先选择蒸馏模型(大模型的轻量化版本,保留核心能力,资源占用更低)。

三、Ollama 核心命令(全平台通用)

Ollama 所有操作均通过命令行终端完成,核心命令仅需掌握5个,即可实现模型的全生命周期管理,操作前需确保 Ollama 服务已启动(安装后默认后台启动)。

# 1. 运行模型(不存在则自动下载,推荐指定参数量)
ollama run 模型名称:参数量  # 示例:ollama run deepseek-r1:1.5b、ollama run qwen3:4b
ollama run qwen3            # 不指定参数量,默认运行官方推荐版本

# 2. 单独下载模型(不运行,仅缓存到本地)
ollama pull 模型名称:参数量  # 示例:ollama pull phi4:mini

# 3. 查看本地已下载的所有模型
ollama list

# 4. 删除本地无用模型(释放磁盘空间)
ollama rm 模型名称:参数量  # 示例:ollama rm deepseek-r1:1.5b

# 5. 查看Ollama所有命令帮助(忘记命令时使用)
ollama --help
                

3.1 命令行直接对话模型

运行ollama run 模型名称后,终端进入交互模式,直接输入问题即可和本地模型对话,核心退出命令:

# 交互模式下,退出模型对话(返回终端正常界面)
/exit  # 核心退出命令,必记
/clear # 清空对话历史
/help  # 查看交互模式下的帮助
                

四、Ollama 原生 RESTful API 调用

Ollama 启动后,会在本地开启11434端口,提供 RESTful API 接口,可通过curl命令直接调用,无需额外配置。

# curl 调用本地Ollama模型(以deepseek-r1:1.5b为例)
curl -X POST http://127.0.0.1:11434/api/chat -d '{
  "model": "deepseek-r1:1.5b",  # 本地已下载的模型名称
  "messages": [{"role": "user", "content": "你是谁?能做什么?"}],
  "stream": false  # 是否流式输出,false为一次性返回结果
}'
                
端口说明:Ollama 本地默认端口为 127.0.0.1:11434,若端口被占用,需修改Ollama配置文件重新指定端口(一般无需修改)。

五、Python 调用 Ollama(核心实操,兼容OpenAI)

Ollama 完美兼容 OpenAI 接口规范,原有调用阿里云百炼/OpenAI的代码,仅需修改base_urlmodel两个参数,即可直接迁移到本地 Ollama,无需修改核心逻辑

5.1 前置准备

# 安装OpenAI库(和云端调用共用一个库,无需额外安装)
pip install openai>=1.0.0
                

5.2 基础调用(非流式)

from openai import OpenAI

# 初始化Ollama客户端(核心修改:base_url指向本地Ollama端口)
client = OpenAI(
    api_key="ollama",  # 本地调用无需真实API_KEY,任意字符串即可
    base_url="http://127.0.0.1:11434/v1"  # Ollama固定OpenAI兼容接口地址
)

# 调用本地模型(model为本地已下载的模型名称,如deepseek-r1:1.5b/qwen3:4b)
response = client.chat.completions.create(
    model="deepseek-r1:1.5b",  # 必须和本地ollama list显示的模型名称一致
    messages=[
        {"role": "system", "content": "你是一个专业的AI助手,回答简洁明了"},
        {"role": "user", "content": "什么是Ollama?"}
    ],
    temperature=0.7,  # 随机性,0-1之间,值越小回答越严谨
    stream=False  # 非流式输出,一次性返回结果
)

# 提取模型回答结果
answer = response.choices[0].message.content
print("模型回答:", answer)
                

5.3 流式调用(逐字输出,体验更好)

流式调用是实际开发中常用方式,逐字返回结果,避免长时间等待,核心仅需将stream=True,并通过循环遍历结果。

from openai import OpenAI

client = OpenAI(
    api_key="ollama",
    base_url="http://127.0.0.1:11434/v1"
)

# 流式调用本地模型
response = client.chat.completions.create(
    model="qwen3:4b",
    messages=[
        {"role": "system", "content": "你是一个Python编程老师,用简单的语言讲解知识点"},
        {"role": "user", "content": "讲解一下Python中的for循环"}
    ],
    temperature=0.6,
    stream=True  # 开启流式输出
)

# 循环遍历流式结果,逐字打印
print("模型流式回答:", end="", flush=True)
for chunk in response:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
                

5.4 多轮对话调用(带上下文)

通过维护messages列表,保存历史对话记录,实现本地模型的多轮上下文对话,和云端大模型逻辑完全一致。

from openai import OpenAI

client = OpenAI(api_key="ollama", base_url="http://127.0.0.1:11434/v1")

# 维护对话上下文,初始可设置system角色
messages = [{"role": "system", "content": "你是一个数学老师,只回答数学问题"}]

# 多轮对话模拟
questions = ["1+1等于几?", "那2+3呢?", "刚才的两个答案相加是多少?"]
for q in questions:
    messages.append({"role": "user", "content": q})
    # 调用模型
    response = client.chat.completions.create(model="qwen3:4b", messages=messages, stream=False)
    answer = response.choices[0].message.content
    print(f"问题:{q}\n回答:{answer}\n")
    # 将模型回答加入上下文,供下一轮使用
    messages.append({"role": "assistant", "content": answer})
                

六、Ollama 常见问题与避坑指南

6.1 模型下载慢/下载失败

6.2 运行模型时提示“内存不足”

6.3 Python 调用时提示“连接拒绝”

6.4 命令行输入ollama提示“不是内部命令”

6.5 本地模型回答效果不如云端

七、核心总结