【AI】利用生成式AI 建構應用 - 03 - 使用Ollama 進行單次對話

  • 98
  • 0
  • AI
  • 2026-01-13

本篇將建構一個LLM 服務,並用簡單的程式呼叫LLM

Ollama 是什麼 ?

Ollama 是一個本地運行的 LLM 服務,可以把大型語言模型變成本地 API。
它會管理模型下載、加載和運行,並提供 HTTP 或 Python 接口給程式呼叫。
支援多模型管理,並能自動利用 GPU 或 CPU 加速推論。
開發者可以用它做聊天機器人、RAG 或 Agent,而不用管底層推論細節。

總之,它就像「本地版的 OpenAI API」,方便把 LLM 整合到應用中。

Ollama 讓使用LLM 變得非常方便,並考量之後會引用RAG 來加強回答的精確度,所以採用Ollama 作為LLM 服務。

本篇會照以下步驟進行:

  1. 安裝Ollama
  2. 下載、用Ollama 加載模型
  3. 寫python 程式呼叫LLM

安裝Ollama

我使用Linux Ubuntu 來當作Server,參考官方的安裝教學:
https://docs.ollama.com/linux

curl -fsSL https://ollama.com/install.sh | sh

安裝好之後,設定讓Ollama 可以監聽內網來的Request。
使用systemctl 來做永久性設定,即使服務重啟之後也保留設定值:

# 打開設定畫面
systemctl edit ollama

# 加上設定後退出
> [Service]
> Environment="OLLAMA_HOST=0.0.0.0"

# reload設定、重啟服務
systemctl daemon-reload
systemctl restart ollama

先在內部檢查socket 連線狀態,看到 *:11434 代表設定生效,Socket 正在11434 上監聽來自任何IP 的request

ss -lntp | grep 11434

用同內網電腦的瀏覽器輸入網址 IP:11434,看到:Ollama is running 就代表Ollama 有在跑


下載、用Ollama 加載模型

準備好Ollama 之後就要啟用模型,本篇使用Llama-3.1-Taiwan 8B 模型。此模型是基於 Meta Llama-3 做繁體中文Fine-Tuning 的開源 LLM 模型,以提升對於繁體中文的處理品質。其實Ollama 也可以下指令直接把model pull 下來,但本篇先使用hugging face CLI 工具下載。

下載模型

# url: https://huggingface.co/yentinglin/Llama-3.1-Taiwan-8B-Instruct/tree/main

# 1. 先安裝Hugging face 的CLI 工具 
curl -LsSf https://hf.co/cli/install.sh | bash

# 2. 下載model
hf download yentinglin/Llama-3.1-Taiwan-8B-Instruct

# 檔案會跑到huggingface 的快取資料夾,有存取權限問題
# 3. 先創個資料夾
mkdir -p ~/models/llama3.1-tw

# 4. 將檔案複製到 ~/model
cp -L /home/user/.cache/huggingface/hub/models--yentinglin--Llama-3.1-Taiwan-8B-Instruct/snapshots/7a0e2caca6d8e7919130fe7574a35db2ad3875b5/* ~/models/llama3.1-tw/

加載、運行模型

Model 下載完之後,就是要告訴Ollama 要跑哪一個模型。因為Ollama 可以同時跑很多模型,所以要寫一個叫做Modelfile 的檔案,裡面宣告、設定使用的模型跟參數,類似設定檔。再下指令給Ollama 定義服務名稱跟這個設定檔,所以當我呼叫Ollama 並指定名稱,Ollama 就知道我是要用哪個模型。

# 1. 進去目錄裡建立Modelfile
cd ~/models/llama3.1-tw
vi Modelfile
	>FROM .
	>PARAMETER temperature 0.7
	>PARAMETER top_p 0.9

# 2. 運行模型 
ollama create llama3.1-tw

# 這寫的"llama3.1-tw" 就是服務名稱,後面呼叫ollama 帶這個名字
# 因為當前目錄中有一個Modelfile,所以ollama 會自己抓這個檔案來當設定檔

輸入 ollama list 可以看到現在有什麼模型可以呼叫


寫python 程式呼叫LLM

在Windows 上打開PyCharm 左下角的Terminal,在.venv (虛擬環境) 中安裝Ollama 套件

因為Ollama 在遠端機器,所以要先用client 指定遠端主機位置。再來進行簡單的單次對話。
傳給LLM 的訊息,稱為提示詞(Prompt)。其中又以Role 分成兩個種類:

  • system: 系統提示詞 system prompt,開發者設定,敘明要怎麼約束LLM 的行為/語氣/安全邊界。
  • user: 使用者提示詞 user prompt,在不違反system prompt 前提下回覆使用者。
import ollama

# 指定遠端
client = ollama.Client(
    host='http://192.168.0.XXX:11434'
)

# 取得回應
response = client.chat(
    model="llama3.1-tw",    # 輸入ollama 中設定的model name
    messages=[
        {"role": "system", "content": "你是一個很有幫助的AI 助手,用繁體中文回答問題"},
        {"role": "user", "content": "酷拉皮卡是誰?"}
    ]
)

print('user: 酷拉皮卡是誰?')
print(f'ai: {response["message"]["content"]}')

原來待在船上這麼久不下來,是去演其他動漫嗎… 
是說排球少年也沒這種劇情吧 XD


結語

到這裡可以成功單次對話了。但如果你重複呼叫model,會發現他不記得剛剛說的話。因為目前程式結構下,每次對話都是獨立的,所以模型不會知道你剛剛問甚麼,以及他剛剛講了什麼。所以下篇要進行多次對話。

references:
[Project TAME] Llama-3-Taiwan 模型:Taiwan-LLM 模型系列再更新 | by Simon Liu | Medium
Day9 - 選擇適合你的中文local LLM - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天