Ollama

言午日尧耳总發表於2024-08-18
  • BiliBili影片
  • 官網:https://ollama.com/
  • GitHub: https://github.com/ollama/ollama
  • 官方文件(GitHub):https://github.com/ollama/ollama/tree/main/docs
  • 標籤:對話型,客戶端,開源大模型
  • 網路
    • 部分需要訪問GitHub,可以使用Watt Toolkit免費工具訪問
    • 容器映象,國內映象被禁用,下載可檢視該文件:https://wkdaily.cpolar.cn/archives/gc
    • 其他均可直連訪問及下載

安裝

Docker

docker run -d -p 11434:11434 -e OLLAMA_HOST=0.0.0.0 --name ollama ollama/ollama

# 掛載GPU(--gpus=all)
docker run -d -p 11434:11434 -e OLLAMA_HOST=0.0.0.0 --name ollama --gpus=all ollama/ollama

Windows

  • 開啟官網 > "Download" > Windows圖示 > "Download for Windows"
  • 點選安裝

Linux

  • 開啟官網 > "Download" > Linux圖示 > 複製下載命令
curl -fsSL https://ollama.com/install.sh | sh

驗證

  • 驗證ollama是否安裝成功
# 列印Ollama版本
ollama -v
# ollama version is 0.3.4


# 請求Ollama服務(Windows直接瀏覽器訪問 http://localhost:11434 效果相同)
curl localhost:11434
# Ollama is running

下載模型

  • ollama相當於平臺,執行需要另外下載模型
  • 開啟官網 > 右上角"Models" > 列表中選擇一個模型
  • 模型詳情頁中,可以切換模型版本,然後複製程式碼下載模型
    • 大部分模型有多個版本,例如"8b"/"70b"/"405b"
# 檢視已下載模型
ollama list

# 拉取模型(在Ollama官網的"Models"模組中)
ollama pull <模型名稱>:<版本>
# 示例
ollama pull qwen2
ollama pull qwen2:0.5b

# 刪除模型
ollama rm <模型名稱>:<版本>
# 示例
ollama rm qwen2
ollama rm qwen2:0.5b

呼叫

cli呼叫

# 開啟對話(未載入的會自動下載模型)
ollama run <模型名稱>:<版本>

# 執行模型,進行問答
ollama run qwen2
>>> Send a message (/? for help)

API呼叫

  • 文件:https://github.com/ollama/ollama/blob/main/docs/api.md
  • 下方將其中一個介面作為示例,更多介面及詳情看文件
  • 也可以參考curl語句使用HTTP客戶端呼叫
# 根據提示詞生成
# POST /api/generate
curl http://localhost:11434/api/generate -d '{
  "model": "llama3",
  "prompt": "如何呼叫ollama的api?",
  "stream": false
}'

# 識圖
curl http://localhost:11434/api/generate -d '{
  "model": "llava",
  "prompt": "這張圖片是什麼意思(特定模型才有這個功能,如:llava)",
  "images": ["iVBORw0KGgoAA...(base64編碼的圖片)"]
  "stream": false
}'
  • 對話
    • role: 資訊的角色,用於上下文資訊,如"system","user","assistant"
      • system: 場景設定
      • user: 使用者提問,或使用者提供的資訊
      • assistant: 一般是ollama響應,response裡也會有role欄位
    • content: 內容
    • images: 類似generate介面,使用base64編碼
# 對話
# POST /api/chat
curl http://localhost:11434/api/chat -d '{
  "model": "qwen2",
  "messages": [
    { "role": "user", "content": "why is the sky blue?" }
  ]
}'

# 包含上下文(對話歷史)
curl http://localhost:11434/api/chat -d '{
  "model": "llama3",
  "messages": [
    { "role": "system", "content": "你是小學老師,解答小學生回答的問題,解釋儘量直白,能讓小學生聽懂"},
    { "role": "user", "content": "天空為什麼是藍色的?"},
    { "role": "assistant", "content": "阿巴阿巴..."},
    { "role": "user", "content": "說的簡練一下,然後用英文終結一下"}
  ]
}'

python呼叫

  • 官方Github: https://github.com/ollama/ollama-python
pip install ollama
  • 基礎用法
  • 對話
    • role: 資訊的角色,用於上下文資訊,如"system","user","assistant"
      • system: 場景設定
      • user: 使用者提問,或使用者提供的資訊
      • assistant: 一般是ollama響應,response裡也會有role欄位
    • content: 內容
    • images: 類似generate介面,使用base64編碼
import ollama

# 設定host
client = ollama.Client(host='http://localhost:11434')

# 拉取映象(通義千問2,0.5b)
client.pull("qwen2:0.5b")

# 檢視所有模型資訊
images = client.list()
print(images)

# 呼叫generate介面
response = client.generate(model='llama3.1', prompt='python中如何呼叫ollama?')
print(response)

# chat介面(包含歷史上下文)
response = client.chat("qwen2:0.5b", messages=[
    {"role": "system", "content": "你是小學老師,解答小學生回答的問題,解釋儘量直白,能讓小學生聽懂"},
    {"role": "user", "content": "天空為什麼是藍色的?"},
    {"role": "assistant", "content": "阿巴阿巴..."},
    {"role": "user", "content": "說的簡練一下,然後用英文終結一下"}
])
print(response)
  • 多模態(圖片)
    • 多模態需要模型支援,如"llava"模型支援圖片解析
    • 圖片讀寫均使用base64編碼
import base64


def read_image_as_base64(file_path):
    """讀取圖片,返回base64編碼字元"""
    with open(file_path, 'rb') as f:
        images_bytes = f.read()

    base64_encoded = base64.b64encode(images_bytes)
    base64_str = base64_encoded.decode('utf-8')
    return base64_str

import ollama
from image_helper import read_image_as_base64


client = ollama.Client(host='http://localhost:11434')
response = client.generate(model="llava", prompt="描述一下這張圖片裡有哪些物體",
                           images=[read_image_as_base64("./cat.jpg")])
print(response)

js呼叫

  • 官方Github: https://github.com/ollama/ollama-js
npm i ollama
import ollama from 'ollama'

const response = await ollama.chat({
  model: 'llama3.1',
  messages: [{ role: 'user', content: 'Why is the sky blue?' }],
})
console.log(response.message.content)

區域網訪問

  • 預設情況下,Ollama服務僅在本地執行,只能本機(localhost/127.0.0.1)訪問,不對外提供服務
    • 設定文章(chatbox):https://chatboxai.app/zh/help-center/connect-chatbox-remote-ollama-service-guide
  • 設定後,區域網中可以使用IP訪問

Linux

# 修改Ollama配置
systemctl edit ollama.service

# 按下方修改後,重啟服務
systemctl daemon-reload
systemctl restart ollama
  • 配置增加環境變數
[Service]
Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_ORIGINS=*"


# 修改埠號拼接到0.0.0.0後面
# Environment="OLLAMA_HOST=0.0.0.0:11434"

Windows

  • 在環境變數裡設定OLLAMA_HOST和OLLAMA_ORIGINS
  • 重啟Ollama
OLLAMA_HOST=0.0.0.0
OLLAMA_ORIGINS=*

介面

Chatbox

  • 官網:https://chatboxai.app/zh
    • 可下載客戶端
  • 設定Ollama訪問地址即可
    • Ollama都在本機,直接使用 "http://localhost:11434" 訪問
    • Ollama在其他主機時,Ollama需要配置區域網設定,然後使用ip訪問

OpenWebUI

  • 官網:https://docs.openwebui.com/
  • 開啟"外部連結"設定介面時很卡,發現是後臺在查詢openai介面,耐心等待一會兒

docker run -d -p 3000:8080 --gpus=all --name open-webui ghcr.io/open-webui/open-webui:ollama

# 單open-webui,然後設定ollama地址
docker run -d -p 3000:8080 --name open-webui ghcr.io/open-webui/open-webui:main
# 執行後,進入主頁 > 頭像 > 管理員皮膚 > 設定 > 外部連線 > Ollama API > 地址修改為Ollama地址

# ollama與open-webui同一臺電腦
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway --name open-webui ghcr.io/open-webui/open-webui:main

相關文章