我一開始只是想抄近路。

那時候我盯上的,是 Lexi。
同樣是 Llama 3.1 8B,速度跟原版差不多,手感也沒散掉,但整體回答就是比較直接。這種差別很怪。你很難拿一句 benchmark 說清楚,可是用過幾輪之後,你會知道它不是同一種口氣。

我原本以為這件事不深。
改一點 prompt,掛一層 LoRA,再不然做個小微調,應該差不多就到了。

後來真的一路跑下去,我才發現自己一開始連題目都切錯了。

我以為我在做一件事,叫做「改模型」。
實際上,我是在不同樓層之間來回亂跑,卻一直把它們當成同一層。

有時候我只是換了台詞。
有時候是在改導演給演員的角色小紙條。
有時候是在重寫劇本格式。
再往下,我開始碰演員的肌肉記憶。
最底下那層,才是演員原本的大腦。

它們最後看起來都像「模型變了」。
但那根本不是同一種變。

本地 LLM 從 prompt 到 base weights 的完整分層圖

這篇是整個系列真正的起點。
不是先教你打指令,也不是先上 LoRA 數學,而是先把地圖攤開。因為後來我學到一件很實際的事:如果你連自己到底改到哪一層都還沒分清楚,後面每一步都會花雙倍力氣,還不一定走對方向。

這不是平面問題,是一整棟樓

我後來找到一個最順手的理解方式。
把整個本地 LLM 系統想成一個拍片現場。

單次請求,像演員今天臨時拿到的新台詞。
System Prompt,像導演開拍前塞給演員的角色小紙條。
TEMPLATE,是劇本格式,決定台詞、角色標籤、場記怎麼排。
MESSAGE,像幾段示範演出,讓演員知道這齣戲平常怎麼講話。
PARAMETER,比較像拍攝風格設定,節奏要保守一點,還是放一點,重複要不要壓住。
把這些東西綁成一整份可重複使用的包裝藍圖,就是 Modelfile。

再往下,才輪到 LoRA / Adapter。
這一層比較像改演員的肌肉記憶。不是重養一個人,而是針對某些反應方式,再做一層附加訓練。

最底下那層,是 base model weights。
也就是演員原本的大腦與受訓底子。

這張圖一立起來,很多事情突然就不糊了。
因為你真正該問的,不再是「我要不要改模型」,而是:

我這次想改的,到底是哪一層?

最外面那層,最容易讓人誤判

最淺的一層,其實就是你每次打進去的 prompt。

這一層非常好用。
你今天想讓它短答,可以直接講。
你想讓它先給結論,也可以當場要求。
它像臨時台詞,來得快,也退得快。

它的好處很直白:便宜、快、壞了也最好收。
問題也很直白:它不穩,而且不留下來。

今天你這樣寫,它今天配合你。
明天你換一輪對話,或者自己忘了補那句要求,它就又回到原本那個樣子。

所以單次請求很適合做局部控制,
不適合被誤認成「模型真的學到了」。

這是我一開始最常犯的錯。
某次 prompt 效果很好,我就會高估它,覺得方向對了。其實很多時候只是那一次問法剛好踩中。

System Prompt 比單次請求穩,但還是在外面

System Prompt 強很多。
差別不在於它比較神,而在於它比較像預設角色設定,而不是臨時加台詞。

你可以把這一層拿來放:

  • 語氣
  • 語言偏好
  • 回答習慣
  • 不要做什麼
  • 預設角色

例如:

  • 優先用繁體中文
  • 技術問題先講結論
  • 沒有要求時不要主動丟程式碼
  • 不要亂補不確定的名詞

這些東西很適合放在 system prompt。
比你每次都手打一遍 user prompt,穩得多。

但它還是不是深層記憶。
它會被長上下文稀釋,也會被模板和模型本身的慣性拉扯。
所以它很重要,但還是外層。

Modelfile 不是 system prompt 換個名字

我一開始也搞混過。

那時候我以為 Modelfile 不就是比較長的 system prompt。
後來才知道,這樣看太淺了。

Modelfile 比 system prompt 大一層。
它不是一張角色小紙條,而是整份拍片企劃書。

在 Ollama 裡,它可以碰到底模、模板、訊息示範、生成參數,必要時還能把 adapter 一起包進來。
也因為這樣,我後來整個判斷翻過來了。

如果你的目標是:

  • 保住原版 Llama 3.1 的底子
  • 讓手感更接近你要的樣子
  • 但又不想太早動到權重

那最先值得碰的,通常不是 LoRA。
而是 Modelfile。

這件事我一開始完全不信。
是我自己把模型訓歪過幾輪之後,才慢慢換回來的判斷。

TEMPLATE 和 tokenizer,比很多人想的還要致命

如果 System Prompt 是導演紙條,
TEMPLATE 就是劇本格式。

這一層很常被當成小事。
但對 chat model 來說,它根本不是小事。

模型不是看見「人類正在聊天」就自動知道格式。
它最後真正吃進去的,是 tokenizer 切出來、又按照某個 chat template 排好的 token 序列。

這也是為什麼你有時候會覺得模型沒明顯報錯,卻就是哪裡怪怪的。
不是因為它突然變笨。
很可能只是你餵它的劇本格式,跟它原本習慣的格式不一樣了。

這一層很陰。
因為它錯了,不一定會大聲爆炸。
很多時候它只會讓模型安靜地退化。

MESSAGE 和 few-shot:不是規則,是示範

有些東西你不想寫成硬規定。
你只是想讓模型抓到一種口氣。

這時候 MESSAGE,或者更一般地說 few-shot,就很有用。

它不像 system prompt 那麼像明文規則。
也不像 LoRA 那樣真的去改肌肉記憶。
它更像是開拍前先放幾段 sample 給演員看,讓他自己抓到節奏。

這一層在你想做的事情裡其實很關鍵。
因為你很多真正想要的東西,像:

  • 回答短一點
  • 先講結論
  • 少一點空話
  • 更像技術助理

很多時候,靠這一層就已經能推動不少,還不用急著去碰權重。

PARAMETER 改的是手感,不是大腦

temperature、top_p、repeat_penalty、num_ctx 這些東西,也很容易被高估。

它們當然有用。
你一調,體感常常會變。
但它們改的比較像是拍攝風格,不是模型的大腦。

你可以把 temperature 調低,讓它少一點發散。
你也可以把 repeat_penalty 拉高,讓它少一點碎碎念。
但如果模型本身已經被訓歪,這些參數再怎麼調,也不太可能把它救回原廠。

這也是我後來越來越在意的一件事:
改手感的層,和改大腦的層,不要混。

LoRA / Adapter:真正開始碰肌肉記憶

真正開始變深,是到 LoRA 這一層。

我後來最喜歡的理解方式,不是把 LoRA 當成「小模型」,
而是把它看成:附加在原模型上的可訓練習慣層。

它不是整顆重做。
也不是只在外面包一層 prompt。
它比較像是:保留演員原本的大腦,只針對某些反應模式,再做一層附加訓練。

也因為這樣,它才會比 prompt 深,
但通常又比 full fine-tune 便宜很多。

問題是,便宜不代表不危險。
我後來真的跑過之後才知道,LoRA 最容易騙人的地方就在這裡。
它看起來像一條很漂亮的中間路,結果資料太少、方向太偏、驗收太晚時,照樣可以把模型拉進很奇怪的口音裡。

我後來就真的做出過這種東西。
流程全部成功,模型卻一路開始亂補名詞,甚至整體智力感往下掉。
那時候我才第一次真正把一句話聽進去:

會跑,不等於好用。

最底下那層:base weights

再往下,就是最深的一層。

這裡是模型原本的大腦。
包括語言能力、知識分佈、推理底子,還有很多你很難一句話說清楚,但真的存在的使用平衡。

尤其像 Llama 3.1 Instruct 這種底模,本來就不是生肉。
它已經是 instruction-tuned 的成品。
也就是說,你不是在空白畫布上畫畫。
你是在一個原本就畫得不錯的作品上改筆觸。

這也是我後來最在意的一個反轉:

想保住原版模型的聰明程度,第一優先通常不是更深,而是先少碰權重。

這句話不是保守。
是我把模型弄歪過之後,換回來的判斷。

所以到底該先改哪一層

如果把整篇壓成一個實際能用的判斷框架,我現在會這樣分:

如果你只是想試語氣、試格式、試回答長短,先從單次請求開始。
如果你想讓模型預設比較直接、比較穩,先改 System Prompt / Modelfile
如果你想讓模型帶著某種穩定風格,而且手上真的有夠乾淨、夠一致的資料,再考慮 LoRA / Adapter
如果你想改的是可更新、會變動的事實或文件內容,不要急著往權重塞,先想 外部記憶
只有當你真的知道自己在做什麼,而且也能接受成本與風險,才去碰 base weights

這不是唯一的分法。
但它至少比把所有事情都叫「改模型」好多了。

回頭看,Lexi 給我的教訓不是怎麼把模型改野

我一開始會一路鑽進 LoRA、merge、量化,說到底還是因為我太快把目標定成「我要做出一個像 Lexi 的東西」。

後來回頭看,我才發現 Lexi 給我的真正教訓,其實不是怎麼把東西改得更野。
而是另一件完全不同的事:

如果你真正想保住原版的智力感和速度,很多時候你最該先學的,是外層包裝,而不是權重改造。

因為問題常常不在模型大腦不夠好。
而是在你給它的劇本、角色小紙條、示範演出和拍攝設定,根本就還沒調對。

我原本以為自己是在學怎麼改模型。
後來才知道,我其實先該學的是:

怎麼分清楚自己到底在改哪一層。

下一篇要進哪裡

地圖先畫到這裡。

但只知道樓層還不夠。
因為接下來真正麻煩的問題才會出現:

如果不同樓層適合裝不同東西,那模型的「記憶」到底該放在哪一層?
哪些東西該放在上下文,哪些該放在外部記憶,哪些才值得寫進 LoRA 或權重?

那就是下一篇。