Ollama是一个使用Go语言开发的的开源的本地大语言模型(LLM)运行框架,通过少量命令即可在本地机器上快速部署和运行大语言模型,Ollama支持在多个操作系统上运行,包括Windows、Linux和macOS。Ollama提供对模型量化的支持,可以显著降低显存要求,使得在普通计算机上运行大型模型成为可能。
Ollama makes it easy to get up and running with large language models locally.
Ollama支持多种流行的开源大语言模型,可以根据自己的需求和硬件条件选择合适的模型进行下载和使用,完整模型列表详见ollama.com/library。
模型通常是由大量参数构成的神经网络,通过对大量文本数据进行训练,能够学习语言规律并进行高效的推理。
DeepSeek-R1:深度求索(中国)的开源大语言模型
Qwen 2.5:阿里巴巴(中国)的开源大语言模型
Llama 3.3:脸书的开源大语言模型
Phi 4:微软的开源大语言模型
Mistral:Mistral AI(法国)的开源大语言模型
Gemma 2:谷歌的开源大语言模型
LLaVA:多模态模型
下载安装
Windows
从官网主页下载安装程序(OllamaSetup.exe),双击安装程序并按照提示完成安装。
# 更改安装路径
OllamaSetup.exe /DIR="d:\some\location"
Linux
方式1:快速安装
curl -fsSL https://ollama.com/install.sh | sh
# 安装指定版本
# curl -fsSL https://ollama.com/install.sh | OLLAMA_VERSION=0.5.7 sh
方式2:手动安装
curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz
# 安装指定版本
# curl -L https://ollama.com/download/ollama-linux-amd64.tgz?version=0.5.7 -o ollama-linux-amd64.tgz
sudo tar -C /usr -xzf ollama-linux-amd64.tgz
验证安装
打开命令提示符或PowerShell,输入以下命令验证安装是否成功
ollama --version
模型命令
使用方式类似Docker
-
ollama [command] --help:显示帮助信息
-
ollama run:运行模型
-
ollama list:查看已下载的模型列表,别名ollama ls
-
ollama show:显示模型信息
-
ollama ps:查看正在运行的模型列表
-
ollama stop:停止正在运行的模型
-
ollama serve:启动服务,别名ollama start
-
ollama create:创建模型
-
ollama cp:复制模型
-
ollama rm:删除模型
-
ollama push:将模型推送到模型仓库
-
ollama pull:从模型仓库拉取模型
说明:通过设置环境变量可以配置Ollama服务器
c:\>ollama serve --help
Start ollama
Usage:
ollama serve [flags]
Aliases:
serve, start
Flags:
-h, --help help for serve
Environment Variables:
OLLAMA_DEBUG Show additional debug information (e.g. OLLAMA_DEBUG=1) --- 调试模式
OLLAMA_HOST IP Address for the ollama server (default 127.0.0.1:11434) --- 服务的监听地址(<scheme>://<host>:<port>)。为避免安全风险,请不要将 Ollama 服务暴露在公共网络中。
OLLAMA_KEEP_ALIVE The duration that models stay loaded in memory (default "5m") --- 模型加载到内存后存活时间
OLLAMA_MAX_LOADED_MODELS Maximum number of loaded models per GPU
OLLAMA_MAX_QUEUE Maximum number of queued requests
OLLAMA_MODELS The path to the models directory --- 模型文件的存储路径
OLLAMA_NUM_PARALLEL Maximum number of parallel requests
OLLAMA_NOPRUNE Do not prune model blobs on startup
OLLAMA_ORIGINS A comma separated list of allowed origins --- 允许跨域请求,如果本地使用不受限制,可以设置成星号 *
OLLAMA_SCHED_SPREAD Always schedule model across all GPUs
OLLAMA_FLASH_ATTENTION Enabled flash attention
OLLAMA_KV_CACHE_TYPE Quantization type for the K/V cache (default: f16)
OLLAMA_LLM_LIBRARY Set LLM library to bypass autodetection
OLLAMA_GPU_OVERHEAD Reserve a portion of VRAM per GPU (bytes)
OLLAMA_LOAD_TIMEOUT How long to allow model loads to stall before giving up (default "5m")
模型运行
使用ollama run命令运行模型,如果本地没有模型则先自动拉取模型(ollama pull),然后再加载和运行模型。
ollama run llama3.2:1b
ollama run qwen2.5:0.5b
ollama run deepseek-r1:1.5b
模型交互
Ollama提供了多种方式与模型进行交互
命令行
使用ollama run命令运行模型之后就可以通过命令行进行交互。
- /show info:查看当前模型信息
- /bye:退出交互
- 三引号("""):输入多行文本
REST API
Ollama允许开发者通过HTTP方式与模型进行交互。在使用API之前,需要确保Ollama服务已经启动。默认情况下,服务访问地址为http://localhost:11434。
import requests
model = 'deepseek-r1:1.5b'
messages = [
{
'role': 'user',
'content': '你是谁?',
},
]
base_url = "http://localhost:11434/api/chat"
response = requests.post(base_url,
json={
"model": model,
"messages": messages,
"stream": False
}
)
print(response.json())
(1)补全(Generate a completion)---文本生成,不考虑对话的上下文
端点:POST /api/generate
请求格式:
{
"model": "<model-name>", // 模型名称,格式为[namespace/]model[:tag],标签是可选的,如果未提供,则默认为latest
"prompt": "<input-text>", // 提示词
"stream": false, // 是否启用流式响应,false表示模型生成完所有内容后一次性返回结果,true表示边生成边返回(适用于实时生成文本的场景)
"format": "json", // 响应格式---在prompt里指示模型以JSON格式响应
"options": { // 模型参数(可选)
"temperature": 0.7, // 采样温度,取值范围为[0, 2)。temperature越高,生成的文本更多样(随机),反之,生成的文本更确定
"max_tokens": 100 // 最大输出令牌数
}
}
响应格式:
{
"response": "<generated-text>", // 响应内容
"done": true // 是否完成
}
- 加载模型:prompt不填
- 卸载模型:prompt不填&keep_alive为0
(2)对话补全(Generate a chat completion)---聊天对话,考虑对话的上下文
端点:POST /api/chat
请求格式:
{
"model": "<model-name>", // 模型名称,格式为[namespace/]model[:tag]
"messages": [ // 由历史对话组成的消息列表
{
"role": "user", // 消息角色:system(系统消息)、user(用户消息)、assistant或tool
"content": "<input-text>" // 消息内容
}
],
"stream": false, // 是否启用流式响应
"options": { // 模型参数(可选)
"temperature": 0.7, // 采样温度
"max_tokens": 100 // 最大输出Token数
}
}
响应格式:
{
"message": {
"role": "assistant", // 助手角色
"content": "<generated-text>" // 响应内容
},
"done": true
}
OpenAI Python SDK
Ollama提供了与OpenAI兼容的API接口,方便用户与模型进行交互。
# pip install openai
from openai import OpenAI
client = OpenAI(
base_url='http://localhost:11434/v1/',
api_key='ollama',
)
response = client.chat.completions.create(
model='deepseek-r1:1.5b',
messages=[
{
'role': 'user',
'content': '你是谁?',
}
],
)
print(response)
# print(response.choices[0].message.content)
Ollama Python SDK
Ollama提供了Python SDK,可以方便地使用Python代码与本地运行的模型进行交互。
# pip install ollama
import ollama
model = 'deepseek-r1:1.5b'
messages = [
{
'role': 'user',
'content': '你是谁?',
},
]
response = ollama.chat(model=model, messages=messages)
print(response)
# 自定义客户端
# host = 'http://localhost:11434'
# headers = {'x-some-header': 'some-value'}
# response = ollama.Client(host=host, headers=headers).chat(model=model, messages=messages)
# print(response['message']['content'])
Ollama Go SDK
package main
import (
"context"
"fmt"
"github.com/ollama/ollama/api"
)
func main() {
messages := []api.Message{
api.Message{
Role: "user",
Content: "你是谁?",
},
}
req := &api.ChatRequest{
Model: "deepseek-r1:1.5b",
Messages: messages,
}
respFunc := func(resp api.ChatResponse) error {
fmt.Print(resp.Message.Content)
return nil
}
client, err := api.ClientFromEnvironment()
if err != nil {
panic(err)
}
err = client.Chat(context.Background(), req, respFunc)
if err != nil {
panic(err)
}
}
AI图形界面
(1)Open WebUI(Web)
# 安装 Open WebUI
pip install open-webui -i https://pypi.tuna.tsinghua.edu.cn/simple/
# 启动 Open WebUI
open-webui serve
# 访问 Open WebUI
http://localhost:8080
(2)Page Assist (Chrome Extension)
访问chromewebstore.google.com/search/,搜索Page Assist
(3)Chatbox(Desktop)
从官网主页下载安装程序,双击安装程序并按照提示完成安装。
(4)Cherry Studio(Desktop)
从官网主页下载安装程序,双击安装程序并按照提示完成安装。
模型文件
Modelfile是Ollama的核心配置文件,用于创建和共享模型。Modelfile采用类似Dockerfile的语法,由一系列指令组成,每条指令通常包含一个关键字和相应的参数。
语法格式
# comment
INSTRUCTION arguments
- 不区分大小写。使用大写指令是为了更容易区分指令与参数。
- 指令可以按任意顺序排列。FROM 指令放在最前面是为了保持可读性。
基本指令
- FROM(必需):基础模型
- PARAMETER:运行参数,包括上下文长度、温度、随机种子等
- TEMPLATE:提示模板,使用Go语言的模板语法
- SYSTEM:系统消息
- ADAPTER:适配器
- LICENSE:许可证
- MESSAGE:消息历史
# Build from existing model
FROM <model name>:<tag>
# Build from a Safetensors model
FROM <model directory>
# Build from a GGUF file
FROM ./ollama-model.gguf
PARAMETER <parameter> <parametervalue>
TEMPLATE """{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
"""
SYSTEM """<system message>"""
# Safetensor adapter
ADAPTER <path to safetensor adapter>
# GGUF adapter
ADAPTER ./ollama-lora.gguf
LICENSE """
<license text>
"""
MESSAGE <role> <message>