Ollama講解與使用

1 Ollama

1.1 簡介

Ollama 是一個開源的本地大語言模型運行框架,專為在本地機器上便捷部署和運行大型語言模型(LLM)而設(shè)計,支持多種操作系統(tǒng),包括 macOS、Windows、Linux 以及通過 Docker 容器運行。
Ollama 的特點在于它不僅僅提供了現(xiàn)成的模型和工具集,還提供了方便的界面和 API,使得從文本生成、對話系統(tǒng)到語義分析等任務(wù)都能快速實現(xiàn)。
與其他 NLP 框架不同,Ollama 旨在簡化用戶的工作流程,Ollama 支持多種硬件加速選項,包括純 CPU 推理和各類底層計算架構(gòu)(如 Apple Silicon),能夠更好地利用不同類型的硬件資源。

核心功能與特點:

  • 多種預(yù)訓(xùn)練語言模型支持:Ollama 提供了多種開箱即用的預(yù)訓(xùn)練模型,包括常見的 GPT、BERT 等大型語言模型。
  • 易于集成和使用:Ollama 提供了命令行工具(CLI)和 Python SDK,簡化了與其他項目和服務(wù)的集成。無需擔(dān)心復(fù)雜的依賴或配置,可以快速將 Ollama 集成到現(xiàn)有的應(yīng)用中。
  • 本地部署與離線使用:不同于一些基于云的 NLP 服務(wù),Ollama 允許開發(fā)者在本地計算環(huán)境中運行模型。
  • 支持模型微調(diào)與自定義:用戶不僅可以使用 Ollama 提供的預(yù)訓(xùn)練模型,還可以在此基礎(chǔ)上進(jìn)行模型微調(diào)。

1.2 下載安裝

Ollama 官方下載地址:https://ollama.com/download

下載后,打開命令提示符或 PowerShell,輸入以下命令驗證安裝是否成功:ollama --version
更改安裝路徑(可選)
如果需要將 Ollama 安裝到非默認(rèn)路徑,可以在安裝時通過命令行指定路徑,例如:

OllamaSetup.exe /DIR="d:\some\location"

這樣可以將 Ollama 安裝到指定的目錄
或者使用 scoop 安裝也可以 (點擊此處了解scoop用法

1.3 基本概念

1.3.1 模型(Model)

Ollama 中,模型是核心組成部分。它們是經(jīng)過預(yù)訓(xùn)練的機器學(xué)習(xí)模型,能夠執(zhí)行不同的任務(wù),例如文本生成、文本摘要、情感分析、對話生成等。

Ollama 支持多種流行的預(yù)訓(xùn)練模型,常見的模型有:

  • deepseek-v3:深度求索提供的大型語言模型,專門用于文本生成任務(wù)。
  • LLama2:Meta 提供的大型語言模型,專門用于文本生成任務(wù)。
  • GPTOpenAI 的 GPT 系列模型,適用于廣泛的對話生成、文本推理等任務(wù)。
  • BERT:用于句子理解和問答系統(tǒng)的預(yù)訓(xùn)練模型。
  • 其他自定義模型:用戶可以上傳自己的自定義模型,并利用 Ollama 進(jìn)行推理。

Ollama 支持的模型可以訪問:https://ollama.com/library

模型的主要功能:

  • 推理(Inference):根據(jù)用戶輸入生成輸出結(jié)果。
  • 微調(diào)(Fine-tuning):用戶可以在已有模型的基礎(chǔ)上使用自己的數(shù)據(jù)進(jìn)行訓(xùn)練,從而定制化模型以適應(yīng)特定的任務(wù)或領(lǐng)域。

1.3.2 任務(wù)(Task)

Ollama 支持多種 NLP 任務(wù)。每個任務(wù)對應(yīng)模型的不同應(yīng)用場景,主要包括但不限于以下幾種:

  • 對話生成(Chat Generation):通過與用戶交互生成自然的對話回復(fù)。
  • 文本生成(Text Generation):根據(jù)給定的提示生成自然語言文本,例如寫文章、生成故事等
  • 情感分析(Sentiment Analysis):分析給定文本的情感傾向(如正面、負(fù)面、中立)
  • 文本摘要(Text Summarization):將長文本壓縮為簡潔的摘要。
  • 翻譯(Translation):將文本從一種語言翻譯成另一種語言。

1.3.3 推理(Inference)

推理是指在已訓(xùn)練的模型上進(jìn)行輸入處理,生成輸出的過程。
Ollama 提供了易于使用的命令行工具或 API,可以快速向模型提供輸入并獲取結(jié)果。

推理是 Ollama 的主要功能之一,也是與模型交互的核心。
推理過程:

  • 輸入:用戶向模型提供文本輸入,可以是一個問題、提示或者對話內(nèi)容。
  • 模型處理:模型通過內(nèi)置的神經(jīng)網(wǎng)絡(luò)根據(jù)輸入生成適當(dāng)?shù)妮敵觥?/li>
  • 輸出:模型返回生成的文本內(nèi)容,可能是回復(fù)、生成的文章、翻譯文本等。

1.3.4 微調(diào)(Fine-tuning)

微調(diào)是指在一個已預(yù)訓(xùn)練的模型上,基于特定的領(lǐng)域數(shù)據(jù)進(jìn)行進(jìn)一步的訓(xùn)練,以便使模型在特定任務(wù)或領(lǐng)域上表現(xiàn)得更好。
Ollama 支持微調(diào)功能,用戶可以使用自己的數(shù)據(jù)集對預(yù)訓(xùn)練模型進(jìn)行微調(diào),來定制模型的輸出。

微調(diào)過程:

  • 準(zhǔn)備數(shù)據(jù)集:用戶準(zhǔn)備特定領(lǐng)域的數(shù)據(jù)集,數(shù)據(jù)格式通常為文本文件或 JSON 格式。
  • 加載預(yù)訓(xùn)練模型:選擇一個適合微調(diào)的預(yù)訓(xùn)練模型,例如 LLama2 或 GPT 模型。
  • 訓(xùn)練:使用用戶的特定數(shù)據(jù)集對模型進(jìn)行訓(xùn)練,使其能夠更好地適應(yīng)目標(biāo)任務(wù)。
  • 保存和部署:訓(xùn)練完成后,微調(diào)過的模型可以保存并部署,供以后使用。

1.4 Ollama命令

Ollama 提供了多種命令行工具(CLI)與本地運行的模型進(jìn)行交互。

基本格式:ollama <command> [args]
ollama --help 查看包含有哪些命令

使用方法:

  • ollama [flags]:使用標(biāo)志(flags)運行 ollama
    可用標(biāo)志(Flags):
    • -h, --help:顯示 ollama 的幫助信息
    • -v, --version:顯示版本信息
  • ollama [command]:運行 ollama 的某個具體命令
    可用命令如下:
    • serve:啟動 ollama 服務(wù)
      REST 端點(默認(rèn) http://localhost:11434/api):
      • /api/generate:文本生成
      • /api/chat:對話流式接口
      • /api/pull:遠(yuǎn)程拉取
      • /api/tags:本地模型列表
    • create:根據(jù)一個 Modelfile 創(chuàng)建一個模型
    • show:顯示某個模型的詳細(xì)信息,查看模型的元數(shù)據(jù)、參數(shù)或 Modelfile
    • run:運行一個模型,如果不存在則自動拉取
      • --num-predict <number>:限制輸出 token 數(shù)
      • --temperature <float>:控制隨機性
      • --top-k <int>:采樣范圍
      • --top-p <float>:核采樣
      • --seed <int>:固定隨機性
      • --format json:輸出 JSON
      • --keepalive <seconds>:會話保持時間
    • stop:停止一個正在運行的模型
    • pull:從一個模型倉庫(registry)拉取一個模型,但不運行
    • push:將一個模型推送到一個模型倉庫
    • list:列出本地所有已下載的模型
    • ps:列出所有正在運行的模型及顯存占用
    • cp:復(fù)制一個模型,將現(xiàn)有模型復(fù)制為新名稱
    • rm:移除本地模型釋放空間
    • help:獲取關(guān)于任何命令的幫助信息

當(dāng)輸入 ollama run 進(jìn)入聊天界面后,不再是在操作命令行,而是在和 AI 對話。這時可以使用以 / 開頭的快捷指令來控制對話:

  • /bye/exit:退出聊天界面,返回命令行
  • /clear:清空當(dāng)前的上下文記憶(開啟一段新的對話)。
  • /show info:查看當(dāng)前模型的詳細(xì)參數(shù)信息
  • /set parameter seed 123:設(shè)置隨機種子(高級玩法,用于復(fù)現(xiàn)結(jié)果)
  • /help:在聊天中查看所有可用的快捷鍵

構(gòu)建模型時使用 Modelfile 指令:

  • FROM <model>:基礎(chǔ)模型
  • SYSTEM "xxx":設(shè)定系統(tǒng)提示
  • PARAMETER key=value:設(shè)定默認(rèn)參數(shù)
  • TEMPLATE "xxx":自定義 Chat 模板
  • LICENSE "xxx":設(shè)置 License
  • ADAPTER <file> / WEIGHTS <file>:加載 LoRA 或額外權(quán)重

1.5 模型操作

1.5.1 運行模型

Ollama 運行模型使用 ollama run 命令。
比如:ollama run llama3.2,執(zhí)行以上命令如果沒有該模型會去下載 llama3.2 模型

通過 Python SDK 使用模型
如果想將 OllamaPython 代碼集成,可以使用 OllamaPython SDK 來加載和運行模型。
安裝 Ollama 的 Python SDK,打開終端,執(zhí)行:pip install ollama

使用 Python 代碼來加載和與模型交互。

import ollama
response = ollama.generate(
    model="llama3.2",  # 模型名稱
    prompt="你是誰。"  # 提示文本
)
print(response)

流式響應(yīng)
from ollama import chat
stream = chat(
    model="llama3.2",
    messages=[{"role": "user", "content": "為什么天空是藍(lán)色的?"}],
    stream=True
)
for chunk in stream:
    print(chunk["message"]["content"], end="", flush=True)

1.5.2 模型交互

  • 命令行交互:
    通過命令行直接與模型進(jìn)行交互是最簡單的方式
    使用 ollama run 命令啟動模型并進(jìn)入交互模式:ollama run <model-name>
    啟動后,您可以直接輸入問題或指令,模型會實時生成響應(yīng)。
    在交互模式下,輸入 /bye 或按下 Ctrl+d 退出
  • 單次命令交互:
    如果只需要模型生成一次響應(yīng),可以直接在命令行中傳遞輸入。
    通過管道將輸入傳遞給模型:
    echo "你是誰?" | ollama run deepseek-coder
    直接在命令行中傳遞輸入:ollama run deepseek-coder "Python 的 hello world 代碼?"
  • 多輪對話
    Ollama 支持多輪對話,模型可以記住上下文
  • 文件輸入
    可以將文件內(nèi)容作為輸入傳遞給模型
    ollama run deepseek-coder < input.txt
  • 自定義提示詞
    通過 Modelfile 定義自定義提示詞或系統(tǒng)指令,使模型在交互中遵循特定規(guī)則。
    創(chuàng)建自定義模型
    編寫一個 ModelfileFROM deepseek-coder SYSTEM "你是一個編程助手,專門幫助用戶編寫代碼。"
    然后創(chuàng)建自定義模型:ollama create test-coder -f ./Modelfile
    運行自定義模型:ollama run test-coder
  • 交互日志
    Ollama 會記錄交互日志,方便調(diào)試和分析:ollama logs

1.6 與瀏覽器交互

1.6.1 Open WebUI

1.6.1.1 簡介

Open WebUI 用戶友好的 AI 界面(支持 Ollama、OpenAI API 等)。
Open WebUI 支持多種語言模型運行器(如 Ollama 和 OpenAI 兼容 API),并內(nèi)置了用于檢索增強生成(RAG)的推理引擎,使其成為強大的 AI 部署解決方案。
Open WebUI 可自定義 OpenAI API URL,連接 LMStudio、GroqCloud、Mistral、OpenRouter 等。

官方文檔:https://docs.openwebui.com

1.6.1.2 安裝

使用 Docker 安裝
如果 Ollama 已安裝在電腦上,使用以下命令:

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

使用 Nvidia GPU 支持運行 Open WebUI:

docker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:cuda

裝完成后,通過訪問 http://localhost:3000 使用 Open WebUI。

Open WebUI 可以通過 Python 的包安裝程序 pip 進(jìn)行安裝,在開始安裝之前,請確保使用的是 Python 3.11,以避免可能出現(xiàn)的兼容性問題。
打開終端,運行以下命令以安裝 Open WebUI:pip install open-webui
安裝完成后,通過以下命令啟動 Open WebUI:open-webui serve
啟動后,Open WebUI 服務(wù)器將運行在 http://localhost:8080

1.6.2 Page Assist

1.6.2.1 簡介

Page Assist 是一款開源的瀏覽器擴(kuò)展程序,主要為本地 AI 模型提供直觀的交互界面,讓用戶可以在任何網(wǎng)頁上與本地 AI 模型進(jìn)行對話和交互。

Page AssistGithub 源代碼:https://github.com/n4ze3m/page-assist

基本功能:

  • 側(cè)邊欄交互:用戶可以在任何網(wǎng)頁上打開側(cè)邊欄,與本地 AI 模型進(jìn)行對話,獲取與網(wǎng)頁內(nèi)容相關(guān)的智能輔助。
  • 網(wǎng)頁 UI:提供類似 ChatGPT 的網(wǎng)頁界面,用戶可以在此界面中與 AI 模型進(jìn)行更全面的對話。
  • 網(wǎng)頁內(nèi)容對話:用戶可以直接與網(wǎng)頁內(nèi)容進(jìn)行對話,獲取相關(guān)信息的解釋或分析。
    多瀏覽器支持:支持 Chrome、Brave、Edge 和 Firefox 等主流瀏覽器。
  • 快捷鍵操作:通過快捷鍵可以快速打開側(cè)邊欄和網(wǎng)頁 UI,方便用戶使用。
  • 支持多種本地 AI 提供商:目前支持 Ollama 和 Chrome AI (Gemini Nano) 等本地 AI 提供商。
  • 文檔解析:支持與 PDF、CSV 等多格式文檔進(jìn)行聊天交流。
  • 離線模型適配:適用于離線環(huán)境,用戶可以在本地運行 AI 模型。
  • 隱私保護(hù):所有交互都在本地完成,不會收集用戶個人數(shù)據(jù),數(shù)據(jù)存儲在瀏覽器的本地存儲中。
  • 開發(fā)模式:支持開發(fā)者模式,便于進(jìn)行擴(kuò)展的開發(fā)和測試。

1.6.2.2 安裝與使用

直接從 Chrome Web StoreFirefox Add-ons 商店下載安裝,也可以通過手動安裝的方式進(jìn)行,訪問 https://chromewebstore.google.com/search/,搜索 Page Assist

打開后就可以看到 Ollama 正在運行的提示,如果還沒啟動則需要啟動 Ollama

714eb70e5502b48890f365c73f484828_b651ca400e014c4a82e9becedcb3e791.png

接下來我們可以選擇指定的模型,然后輸入提示詞:


image

1.7 與Python交互

1.7.1 安裝SDK

安裝 Ollama 的 Python SDK。
pip install ollama
確保環(huán)境中已安裝了 Python 3.x,并且網(wǎng)絡(luò)環(huán)境能夠訪問 Ollama 本地服務(wù)

在使用 Python SDK 之前,確保 Ollama 本地服務(wù)已經(jīng)啟動。
使用命令行工具來啟動它:ollama serve

如果已經(jīng)用run啟動了為什么還要用server?

因為 ollama run 只能打開一個交互式命令行會話;它本身不會監(jiān)聽任何端口,也就無法被 Python 程序調(diào)用。
因此想讓 Ollama 對外提供 API(HTTP 或官方 SDK),都必須先執(zhí)行ollama serve

這條命令會在后臺啟動本地服務(wù),默認(rèn)監(jiān)聽 localhost:11434,然后才能用 Python 通過 HTTP 或 ollama-python 與之通信 。

1.7.2 使用SDK交互

1.7.2.1 簡單使用

通過 Python SDK,向指定的模型發(fā)送請求,生成文本或?qū)υ挘?/p>

from ollama import chat
from ollama import ChatResponse

response: ChatResponse = chat(model='deepseek-coder', messages=[
  {
    'role': 'user',
    'content': '你是誰?',
  },
])
# 打印響應(yīng)內(nèi)容
print(response['message']['content'])

# 或者直接訪問響應(yīng)對象的字段
#print(response.message.content)

1.7.2.2 常用 API 方法

Ollama Python SDK 提供了一些常用的 API 方法,用于操作和管理模型。

  • chat 方法
    與模型進(jìn)行對話生成,發(fā)送用戶消息并獲取模型響應(yīng):
    ollama.chat(model='llama3.2', messages=[{'role': 'user', 'content': 'Why is the sky blue?'}])
  • generate 方法
    用于文本生成任務(wù)。與 chat 方法類似,但是它只需要一個 prompt 參數(shù):ollama.generate(model='llama3.2', prompt='Why is the sky blue?')
  • list 方法
    列出所有可用的模型:ollama.list()
  • show 方法
    顯示指定模型的詳細(xì)信息:ollama.show('llama3.2')
  • create 方法
    從現(xiàn)有模型創(chuàng)建新的模型:
    ollama.create(model='example', from_='llama3.2', system="You are Mario from Super Mario Bros.")
  • copy 方法
    復(fù)制模型到另一個位置:ollama.copy('llama3.2', 'user/llama3.2')
  • delete 方法
    刪除指定模型:ollama.delete('llama3.2')
  • pull 方法
    從遠(yuǎn)程倉庫拉取模型:ollama.pull('llama3.2')
  • push 方法
    將本地模型推送到遠(yuǎn)程倉庫:ollama.push('user/llama3.2')
  • embed 方法
    生成文本嵌入:
    ollama.embed(model='llama3.2', input='The sky is blue because of rayleigh scattering')
  • ps 方法
    查看正在運行的模型列表:ollama.ps()

1.7.3 使用Http方式交互

1.7.3.1 使用Ollama http

Ollama 的端口兼容 OpenAI 格式,也提供原生 REST 端點

from ollama import Client

client = Client(
    host='http://localhost:11434',
    headers={'x-some-header': 'some-value'}
)

response = client.chat(model='deepseek-coder', messages=[
    {
        'role': 'user',
        'content': '你是誰?',
    },
])
print(response['message']['content'])

異步執(zhí)行請求,可以使用 AsyncClient 類,適用于需要并發(fā)的場景。

import asyncio
from ollama import AsyncClient

async def chat():
    message = {'role': 'user', 'content': '你是誰?'}
    response = await AsyncClient().chat(model='deepseek-coder', messages=[message])
    print(response['message']['content'])

asyncio.run(chat())

異步客戶端支持與傳統(tǒng)的同步請求一樣的功能,唯一的區(qū)別是請求是異步執(zhí)行的,可以提高性能,尤其是在高并發(fā)場景下。

1.7.3.2 使用其他http請求

import requests, json
url = 'http://localhost:11434/api/chat'
payload = {
  "model": "deepseek-coder",
  "messages": [{"role": "user", "content": "寫個快速排序"}],
  "stream": False
}
resp = requests.post(url, json=payload)
print(resp.json()['message']['content'])
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容