大语言模型:Ollama大语言模型运行器

855 阅读8分钟

Ollama是一个使用Go语言开发的的开源的本地大语言模型(LLM)运行框架,通过少量命令即可在本地机器上快速部署和运行大语言模型,Ollama支持在多个操作系统上运行,包括Windows、Linux和macOS。Ollama提供对模型量化的支持,可以显著降低显存要求,使得在普通计算机上运行大型模型成为可能。

Ollama makes it easy to get up and running with large language models locally.

image.png

Ollama支持多种流行的开源大语言模型,可以根据自己的需求和硬件条件选择合适的模型进行下载和使用,完整模型列表详见ollama.com/library

image.png

模型通常是由大量参数构成的神经网络,通过对大量文本数据进行训练,能够学习语言规律并进行高效的推理。

  • 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"

image.png

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

image.png

模型命令

使用方式类似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命令运行模型之后就可以通过命令行进行交互。

image.png

  • /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

image.png

(2)Page Assist (Chrome Extension)

访问chromewebstore.google.com/search/,搜索Page Assist

image.png

image.png

(3)Chatbox(Desktop)

从官网主页下载安装程序,双击安装程序并按照提示完成安装。

image.png

image.png

(4)Cherry Studio(Desktop)

从官网主页下载安装程序,双击安装程序并按照提示完成安装。 image.png

image.png

模型文件

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>