測驗:llama-cli 完整指南
共 5 題,點選答案後會立即顯示結果
1. 使用 llama-cli 進行推論時,哪兩個參數是必要的?
2. Temperature 參數的作用是什麼?
3. 若要讓模型生成的程式碼更加確定、一致,Temperature 應該設定為多少較為合適?
4. 關於 -cnv 和 -i 互動模式的差異,下列敘述何者正確?
5. 使用 -ngl 參數的主要目的是什麼?
前言
在前兩篇文章中,我們完成了 llama.cpp 的編譯安裝,並成功下載了 GGUF 格式的模型。現在是時候讓模型開口說話了。
llama-cli 是 llama.cpp 的主要命令列工具,讓你直接在終端機與大型語言模型對話。本篇將帶你從基本的單次推論,到進階的參數調校,最後掌握互動模式的多輪對話。
學習目標
讀完本篇後,你將能夠:
- 使用 llama-cli 載入模型並進行對話
- 理解並調整關鍵推論參數(temperature、topp、topk)
- 設定上下文長度與記憶體使用
- 使用互動模式進行多輪對話
llama-cli 基本用法
最簡單的推論指令
載入模型並生成文字的最基本指令:
llama-cli -m ./models/phi-4-q4.gguf -p "今天天氣真好"
Code language: JavaScript (javascript)這裡有兩個必要參數:
-m:指定模型檔案路徑-p:提供輸入提示詞(prompt)
執行後,模型會根據你的提示詞繼續生成文字。
控制輸出長度
預設情況下,模型會持續生成直到達到上下文限制或遇到停止符號。使用 -n 參數限制生成的 token 數量:
llama-cli -m ./models/phi-4-q4.gguf \
-p "請用三句話介紹台北" \
-n 100
Code language: JavaScript (javascript)-n 100 表示最多生成 100 個 token。
從 Hugging Face 直接下載並執行
如果你還沒下載模型,可以讓 llama-cli 自動從 Hugging Face 下載:
llama-cli --hf-repo unsloth/phi-4-GGUF:q4_k_m \
-p "Hello, world!"
Code language: JavaScript (javascript)--hf-repo 格式是 用戶名/模型名:量化版本,首次執行會自動下載到快取目錄。
重要參數詳解
Temperature:控制隨機性
Temperature 決定模型輸出的「創意程度」:
# 低 temperature:輸出較為確定、一致
llama-cli -m model.gguf -p "1+1=" --temp 0.1
# 高 temperature:輸出較為多樣、有創意
llama-cli -m model.gguf -p "寫一首關於星星的詩" --temp 1.2
Code language: PHP (php)參數範圍與建議:
| Temperature | 效果 | 適用場景 |
|---|---|---|
| 0.0 – 0.3 | 非常確定性,幾乎總是選最高機率的詞 | 數學運算、程式碼、事實問答 |
| 0.4 – 0.7 | 平衡穩定與多樣性 | 一般對話、技術文件 |
| 0.8 – 1.2 | 較高創意,輸出多樣化 | 創意寫作、故事生成 |
| > 1.2 | 高度隨機,可能產生不連貫內容 | 極端創意需求(少用) |
預設值是 0.8,對大多數情況已經足夠。
Top-K 與 Top-P:控制取樣範圍
這兩個參數決定模型「考慮哪些詞」:
Top-K 取樣:只從機率最高的 K 個詞中選擇
llama-cli -m model.gguf -p "天空是" --top-k 10
Code language: JavaScript (javascript)--top-k 10:只考慮機率最高的 10 個詞- 預設值:40
- 範圍:1-100(1 = 只選最高機率的詞)
Top-P 取樣(Nucleus Sampling):選擇累積機率達到 P 的詞
llama-cli -m model.gguf -p "天空是" --top-p 0.9
Code language: CSS (css)--top-p 0.9:選擇累積機率達到 90% 的詞彙組合- 預設值:0.9
- 範圍:0.0-1.0(1.0 = 不限制)
實用組合建議:
# 程式碼生成:低 temperature + 嚴格取樣
llama-cli -m model.gguf -p "寫一個 Python 排序函數" \
--temp 0.2 --top-p 0.7 --top-k 10
# 創意寫作:高 temperature + 寬鬆取樣
llama-cli -m model.gguf -p "寫一個奇幻故事開頭" \
--temp 1.0 --top-p 0.95 --top-k 50
# 一般對話:平衡設定
llama-cli -m model.gguf -p "介紹一下自己" \
--temp 0.7 --top-p 0.9 --top-k 40
Code language: CSS (css)n_ctx:上下文長度
上下文長度決定模型能「記住」多少內容:
llama-cli -m model.gguf -c 8192 -p "很長的文章..."
Code language: JavaScript (javascript)-c或--ctx-size:設定上下文長度- 預設值:4096(從模型載入)
- 注意:更長的上下文需要更多記憶體
記憶體估算參考:
| 上下文長度 | 額外記憶體需求(約) |
|---|---|
| 4096 | 基準值 |
| 8192 | +2GB |
| 16384 | +4-6GB |
| 32768 | +8-12GB |
n_gpu_layers:GPU 加速設定
將模型層級載入到 GPU 以加速推論:
# 將 35 層載入 GPU
llama-cli -m model.gguf -ngl 35 -p "Hello"
# 載入全部層級到 GPU(設一個很大的數字)
llama-cli -m model.gguf -ngl 999 -p "Hello"
Code language: PHP (php)-ngl或--gpu-layers:要載入 GPU 的層數- 預設值:0(純 CPU 運算)
- 設定為很大的數字(如 999)會自動載入所有層
如何決定 GPU 層數?
- 先查看你的 GPU 記憶體容量
- 從小數字開始嘗試,逐步增加
- 觀察是否出現記憶體不足錯誤
# 逐步測試
llama-cli -m model.gguf -ngl 10 -p "test" # 先試 10 層
llama-cli -m model.gguf -ngl 20 -p "test" # 再試 20 層
llama-cli -m model.gguf -ngl 35 -p "test" # 繼續增加
Code language: PHP (php)互動模式:多輪對話
啟用互動模式
使用 -i 參數進入互動模式:
llama-cli -m model.gguf -i
Code language: CSS (css)或使用 -cnv(conversation)進入對話模式:
llama-cli -m model.gguf -cnv
Code language: CSS (css)兩者差異:
-i(interactive):基本互動,你輸入、模型回應-cnv(conversation):專為聊天設計,自動處理對話格式
設定系統提示詞
使用 -sys 參數設定系統角色:
llama-cli -m model.gguf \
-sys "你是一個專業的程式設計助手,專門回答 Python 問題。" \
-cnv
Code language: JavaScript (javascript)系統提示詞會影響模型的整體行為風格。
指定聊天模板
不同模型可能需要不同的對話格式:
# 使用內建的 llama3 模板
llama-cli -m llama3-model.gguf --chat-template llama3 -cnv
# 使用 ChatML 模板
llama-cli -m model.gguf --chat-template chatml -cnv
# 使用模型內嵌的模板(推薦)
llama-cli -m model.gguf --jinja -cnv
Code language: CSS (css)常見的內建模板包括:llama2、llama3、chatml、mistral-v1、phi3 等。
多行輸入
需要輸入多行文字時,使用 --mli 參數:
llama-cli -m model.gguf -cnv --mli
Code language: CSS (css)啟用後,可以直接貼上多行文字,按 Enter 兩次結束輸入。
完整範例:實戰演練
範例一:技術問答助手
llama-cli -m ./models/phi-4-q4.gguf \
-sys "你是一個資深的軟體工程師,擅長用簡單易懂的方式解釋技術概念。回答時請條列重點。" \
--temp 0.3 \
--top-p 0.8 \
-c 4096 \
-ngl 35 \
-cnv
Code language: JavaScript (javascript)範例二:創意寫作助手
llama-cli -m ./models/phi-4-q4.gguf \
-sys "你是一個富有創意的作家,擅長描述場景和情感。" \
--temp 1.0 \
--top-p 0.95 \
--top-k 50 \
-c 8192 \
-ngl 35 \
-cnv
Code language: JavaScript (javascript)範例三:程式碼生成
llama-cli -m ./models/phi-4-q4.gguf \
-sys "你是一個 Python 專家。只輸出程式碼,不需要解釋。" \
--temp 0.2 \
--top-p 0.7 \
--top-k 10 \
-ngl 35 \
-cnv
Code language: JavaScript (javascript)常見問題排解
問題一:記憶體不足
症狀:
ggml_backend_cuda_buffer_type_alloc_buffer: allocating X bytes on device failed
Code language: HTTP (http)解決方案:
- 減少 GPU 層數
# 原本
llama-cli -m model.gguf -ngl 40 -p "test"
# 改為
llama-cli -m model.gguf -ngl 20 -p "test"
Code language: PHP (php)- 減少上下文長度
llama-cli -m model.gguf -c 2048 -p "test"
Code language: JavaScript (javascript)- 使用更小的量化版本
- Q4KM 比 Q8_0 使用更少記憶體
- Q40 比 Q4K_M 更小,但品質稍差
- Windows 用戶:增加虛擬記憶體
- 設定頁面檔案(pagefile)至少 50-100GB
問題二:推論速度慢
可能原因與解決方案:
- GPU 沒有正確使用
# 確認有設定 GPU 層數
llama-cli -m model.gguf -ngl 35 -p "test"
Code language: PHP (php)- 模型太大
- 使用更高量化的版本(如 Q4 而非 Q8)
- 或使用更小的模型
- 上下文太長
# 如果不需要長上下文,設定較小的值
llama-cli -m model.gguf -c 2048 -p "test"
Code language: PHP (php)- 設定執行緒數
# 設定 CPU 執行緒數(通常設為 CPU 核心數)
llama-cli -m model.gguf -t 8 -p "test"
Code language: PHP (php)問題三:輸出品質差
調整建議:
- 輸出太隨機、不連貫
# 降低 temperature
--temp 0.5
Code language: CSS (css)- 輸出太死板、重複
# 提高 temperature 和 top_p
--temp 0.8 --top-p 0.95
Code language: CSS (css)- 使用正確的聊天模板
# 讓模型使用內嵌模板
--jinja
Code language: PHP (php)快速參考卡
常用參數速查
| 參數 | 說明 | 預設值 |
|---|---|---|
-m |
模型路徑 | 必填 |
-p |
提示詞 | 必填(非互動模式) |
-n |
生成 token 數 | -1(無限) |
-c |
上下文長度 | 4096 |
-ngl |
GPU 層數 | 0 |
-t |
CPU 執行緒 | 自動 |
--temp |
Temperature | 0.8 |
--top-k |
Top-K 取樣 | 40 |
--top-p |
Top-P 取樣 | 0.9 |
-i |
互動模式 | false |
-cnv |
對話模式 | false |
-sys |
系統提示詞 | 無 |
場景建議設定
| 場景 | Temperature | Top-P | Top-K |
|---|---|---|---|
| 程式碼生成 | 0.2 | 0.7 | 10 |
| 技術問答 | 0.3 | 0.8 | 30 |
| 一般對話 | 0.7 | 0.9 | 40 |
| 創意寫作 | 1.0 | 0.95 | 50 |
小結
本篇介紹了 llama-cli 的完整使用方法:
- 基本用法:
-m載入模型、-p設定提示詞 - 取樣參數:Temperature 控制隨機性,Top-K/Top-P 控制取樣範圍
- 效能設定:
-c上下文長度、-nglGPU 加速 - 互動模式:
-cnv對話模式、-sys系統提示詞
掌握這些參數後,你已經可以靈活運用 llama.cpp 進行各種推論任務。下一篇我們將介紹 llama-server,讓你架設 API 伺服器,透過 HTTP 請求與模型互動。
延伸閱讀
進階測驗:llama-cli 完整指南
共 5 題,包含情境題與錯誤診斷題。
1. 你需要使用 llama-cli 撰寫一個奇幻故事,希望內容有創意且多樣化。下列哪組參數設定最適合? 情境題
2. 小明執行以下指令後遇到錯誤訊息: 錯誤診斷
最可能的原因是什麼?
3. 你要建立一個技術問答助手,需要能處理較長的技術文件,並且希望回答穩定準確。你的 GPU 有 8GB 記憶體。下列哪組設定最適合? 情境題
4. 小華使用 llama-cli 進行對話,發現模型的回應格式混亂,有時會重複對話標籤。他目前的指令是: 錯誤診斷
最可能的改善方法是什麼?