Skip to content

Ollama

本笔记为Linux系统下Ollama的使用教程, 其他系统近似,但部分命令可能需要调整。

1. Ollama基础使用

1.1安装Ollama

  • 访问https://ollama.com/download/,根据系统下载ollma安装文件,Linux使用命令 curl -fsSL https://ollama.com/install.sh | sh 进行安装
  • 若无法使用 install.sh 进行安装,可以到 https://github.com/ollama/ollama/releases 手动下载,然后根据 install.sh 中的目录,进行解压,比如对于Linux,解压的目录为 /usr/local,命令为 sudo tar -xzf ollama-linux-amd64.tgz -C /usr/local
  • 检查安装,查看版本:ollama --version

1.2 启动Ollama

  • 若没有 ollama 服务运行,使用 ollama serve 启动一个 ollama 服务, 打开新的终端,即可使用ollama

1.3 Ollama常用命令

  • ollama serve:启动一个 ollama 服务,启动后,就可以使用 ollama 命令执行任务,若 ollama 在后台服务中运行,则不需要使用该命令。若需要指定端口:OLLAMA_HOST=0.0.0.0:8000 ollama serve。后台运行:ollama serve &

  • ollama pull:下载模型到本地,可用模型可在 https://ollama.com/search 查看,比如可以使用 ollama pull qwen3:8b 下载qwen3的8b版本

  • ollama list:查看已经下载的模型

  • ollama show:显示模型信息,比如 ollama show llama2

  • ollama run:运行已经下载的模型,比如已经下载了 llama2 模型,则可以使用 ollama run llama2 来运行

  • ollama rm:删除已经下载的模型

  • ollama create -f:从 Modelfile 创建自定义模型,比如 ollama create my-model -f ./Modelfile

  • ollama push:将模型推送到 Ollama 仓库,比如 ollama push my-model

  • ollama ps:列出正在运行的模型

  • ollama stop:停止一个正在运行的模型,若 qwen3 正在运行,使用 ollama stop qwen3 即可停止

  • ollama cp:复制一个模型,比如 ollama cp llama2 backup

1.4 Ollama 相关配置

  • 模型默认下载位置:~/.ollama/models/

  • 更改模型下载位置:export OLLAMA_MODELS=/custom/path,然后重新启动 ollama 即可

  • 修改 Ollama 端口:设置 OLLAMA_HOST

    • 比如允许监听所有网络接口,允许外部访问:export OLLAMA_HOST=0.0.0.0:8080
    • 若仅允许本地连接:export OLLAMA_HOST=127.0.0.1:8080
  • Ollama 安装时会使用 lspcilshw,若未安装,则可以使用命令安装

    • bash
      # 安装 lspci
      sudo apt-get update
      sudo apt-get install -y pciutils
    • bash
      # 安装 lshw
      sudo apt-get update
      sudo apt-get install -y lshw

1.5 Ollama 交互式聊天

  • ollama run qweb3:8b 启动交互式对话环境
  • 交互模式命令:
    • /set:设置模型的参数和行为
      • 比如 temperature、top_p、top_k、num_predict、repeat_penalty,使用 /set parameter temperature 0 进行设置
      • /set system your-prompt 设置提示词
    • /show:显示当前模型的信息和配置
    • /load:加载另一个模型,或者加载之前保存的会话
    • /save:保存历史对话,如 /save python
    • /clear:清楚当前会话历史,开始新的对话
    • /bye:退出
    • /?:显示帮助信息

1.6 Ollama 支持的模型

  • 可从 https://ollama.com/library 查看所有Ollama官方支持的模型,点击模型名称即可进入详情页,在详情页中,会显示模型支持的能力和参数量,Models会显示当前模型的不同版本,点击右侧的 View all可以查看该模型所有的版本(包括不同量化版本,比如qwen3-vl:32b-instruct-q4_K_M、qwen3-vl:32b-instruct-bf16)
  • Ollama还支持从HuggingFace中下载模型并通过配置Modelfile来使用社区模型

2. Ollama加载自定义模型

Ollama 可以通过配置 Modelfile 来加载自定义的模型,常用的模型文件为 gguf 格式的模型文件

gguf:GPT-Generated Unified Format,是一种存储大型语言模型的文件格式,将模型的所有组件(权重、配置、元数据等)统一打包在一个文件中,支持多种量化级别

2.1 通过 Modelfile 加载 gguf 模型

HuggingFace中有成千上万的官方模型和社区模型,并且往往能够找到全面的量化版本

一些最新的模型也往往及时发布在HuggingFace社区,即使Ollama官方还未收录

步骤如下:

  • 下载需要的 gguf 模型文件,例如:Qwen3-8B-128K-Q8_0.gguf,可从HuggingFace中找到

  • 配置 Modelfile 如下:

    • # 指定本地 gguf 文件
      FROM /root/dev/ollama/Qwen3-8B-Q8_0.gguf
      
      # 设置参数
      PARAMETER temperature 0.2
      
      # 设置 prompt
      SYSTEM """
      你是一个有丰富经验的Rust开发者。
      """
      
      # 定义模型的对话格式,不同模型可能会使用不同的消息格式
      # 对于Qwen3-8B-Q8_0.gguf,若不定义下方格式,则Ollama不知何时结束模型响应
      TEMPLATE """
      <|im_start|>system
      {{ .System }}<|im_end|>
      <|im_start|>user
      {{ .Prompt }}<|im_end|>
      <|im_start|>assistant
      """
  • Ollama创建模型:使用命令 ollama create rustqwen -f Modelfile 来通过Modelfile创建模型,Ollama会自动加载gguf模型文件创建一个本地模型

  • Ollama启动模型:从本地gguf文件创建好模型后,就可以使用 ollama run rustqwen 来启动该模型,此时你可以询问它擅长哪个编程语言,模型应该能够回答擅长 Rust 语言,并且能够在合适的时间点结束对话,而不是无限输出响应。

3. Ollama API

  • Ollama API Doc
  • Ollama 启动后,会在本地端口提供 Restful API 风格的服务,可以使用多种工具来使用API,以达到交互效果
  • 由于 API 服务同 Ollama命令相似,仅仅是通过API调用的形式来使用,故本文不会特别详细的介绍,具体可参阅Ollama文档
  • 本文使用 Python requests 库来使用API端口
  • 在使用 Ollama时,如需要前置服务(如用户认证、消息队列优化等)以及更全面的后端服务,可以通过Fastapi集成的方式来调用Ollama API

TIP

没有模型运行时,Ollama会自动启动对应 name 的模型,并保持5分钟,5分钟内再次请求,不会重新加载模型,若5分钟没有请求,会自动关闭该模型服务

3.1 启动Ollama

  • Ollama服务时独立运行的,安装后,会自动在后台启动服务,监听在 http://localhost:11434端口,可通过 ps aux | grep ollama查看后台是否运行 Ollama服务

  • 若没有 Ollama 服务,可以通过 ollama serve 来启动,此时就可以通过 11434 端口来使用Ollama API

  • API 端口:基本同Ollama命令功能一致

    • 回答补全(文本补全):POST /api/generate
    • 对话补全:POST /api/chat
    • 创建模型: POST /api/create
    • 复制模型:POST /api/copy
    • 删除模型:DELETE /api/delete
    • 列出运行中的模型: GET /api/ps
    • 列出本地模型:GET /api/tags
    • 查看模型信息: POST /api/show
    • 下载模型:POST /api/pull
    • 生成文本嵌入:POST /api/embed,并不是所有模型都支持该功能

3.2 Python中使用 Ollama API

在python中使用 requests 来请求Ollama api,较为简单,故本节仅提供部分示例

  • 使用 /api/generate 进行文本补全:

    • python
      import requests
      import json
      
      BASE_URL = "http://localhost:11434"
      ollama_api_url = f"{BASE_URL}/api/generate"
      
      # 构造数据
      data = {
        'model': 'qwen3:8b',	# 指定模型名,Ollama会使用该模型进行响应
        'prompt': 'UE引擎的蓝图是什么?',
        'stream': False,
        'options': {
          'temperature': 0.2,
          'top_p': 0.9,
          'max_tokens': 100
        }
      }
      
      response = requests.post(ollama_api_url, json=data)
      
      result = response.json()
      print(result["response"])
  • 使用 /api/tags 查看本地已下载模型列表:

    • python
      # /api/tags: 获取已下载模型列表
      
      def list_models():
        url = f'{BASE_URL}/api/tags'
      
        response = requests.get(url)
      
        if response.status_code == 200:
          data = response.json()
          return data['models']
        else:
          print('Error: list_models---', response.status_code)
          return []
      
      models = list_models()
      
      for model in models:
        print(model['name'])
  • 使用 /api/chat 进行多轮对话:

    • python
      chat_history = []
      
      def chat():
        url = f'{BASE_URL}/api/chat'
      
        '''
        messages (list): 对话历史,格式:
        [
          {"role": "system", "content": "系统提示词"},
          {"role": "user", "content": "用户消息"},
          {"role": "assistant", "content": "助手回复"}
        ]
      
        返回响应:
            {
            "message": {
              "role": "assistant",
              "content": "这里是文本内容",
              "think": "Think 的内容"
            },
            "done": false
          }
        '''
      
        chat_history.append(
          {
            'role': 'user',
            'content': 'UE引擎的蓝图是什么?'
          }
        )
        data = {
          'model': 'qwen3:8b',
          'messages': chat_history,
          'stream': True,
          'options': {
            'temperature': 0,
          }
        }
      
        response = requests.post(url, json=data, stream=data['stream'])
        full_response = ''
      
        for line in response.iter_lines():
          if line:
            chunk = json.loads(line)
            message = chunk.get('message', {})
      
            if message.get('think', ''):
              print(message.get('think'), end='', flush=True)
            if message.get('content', ''):
              full_response += message.get('content')
              print(message.get('content'), end='', flush=True)
      
            if chunk.get('done'):
              chat_history.append({
                'role': 'assistant',
                'content': full_response
              })
              print()
              break
      
      chat()

4. WebUI 中使用 Ollama 服务

OpenWebUI 是由 Rust 语言编写的功能强大的 webui 库,用于连接 LLM,并提供良好的交互体验

4.1 确保 Ollama 服务可用

  • 安装 Ollama
  • 启动Ollama,通常安装后会自动启动,若未启动,可以使用 ollama serve 启动服务
  • 下载需要使用的 LLM,比如 Qwen3:8b
  • 验证Ollama API可用:可以通过查看本地下载的模型来验证,命令为 curl http://localhost:11434/api/tags

4.2 安装 WebUI

  • pip 安装较为简单,推荐使用,安装命令:pip install open-webui

4.3 启动 WebUI

  • 启动:open-webui serve

  • 默认会连接到 Ollama 服务

  • 启动后,会看到提示信息:

    • bash
      # 你会看到类似这样的输出:
      # INFO:     Started server process
      # INFO:     Uvicorn running on http://0.0.0.0:8080
  • 此时打开浏览器,访问 http://localhost:8080 即可

  • 左上角模型选择中,若检测到 Ollama服务,默认会加载 Ollama 服务,可以通过下拉列表来切换不同的模型

4.4 相关配置

  • 首次使用,需要填写注册信息,用于创建一个管理员账户,需要提供用户名和邮箱,并设置密码,本地使用,邮箱可以为虚假邮箱,符合格式即可
  • 设置端口:WebUI默认端口为 8080,可以通过 open-webui serve --port 3000 来指定端口

千里之行,始于足下。