緣起:
前陣子跟之前的同事聊天,聊著聊著,他讓我加入他的 google pro
家庭方案,那方案除了共享 5TB 的雲端空間外,還有 gmini pro ai
能用。我就想試試看,pro 的 ai
模型有沒有比較強,能不能讓它幫我寫勾羿的小說。
我問它,有關遊戲“九日”裡的勾芒跟羿,你知道什麼嗎?
你媽媽的,還是理解得很狗屁不通,這樣肯定是無法寫出符合九日背景的小說(後來發現,其實用
LLM Note),這時,我的腦子開始有了想在自己本地跑 LLM
的想法,我那時打的算盤是,在本地跑的話,能調整的東西比較多,我可以給它九日的參考資料,讓它了解世界觀之後再依此來創作,一定會比那些雲端
ai 模型在網路上亂查資料後再産的內容還要好。
接下來的一兩天,我一直在研究 ollama 跟怎麼把設定的文本塞進
prompt 裡,雖然有成功跑起來,但後來發現,那個 context window 根本不夠啊 ~~
光是不到 1/10 的世界觀文本就塞不進了,如果真的還是想跑的話,只能自己做
RAG,太麻煩了吧。
後來轉頭一查,發現 claude project
的功能很符合自己的需求,唉呀,我應該一開始就先查看看有什麼現成的功具可以達成我需求的。不過這樣瞎折騰下來,有學到東西就是了。
前置準備:
習慣性的先問一下 gpt 有關方案的可行性與可選擇的工具
要先確認跑 ollama docker 所需的工具有沒有裝
nvidia-smi //確認 nvidia 驅動
nvcc --version //確認 cuda 有沒有裝(但gpt說 Ollama 本身帶有 NVIDIA GPU 支援,所以不裝好像也沒差(?,反正我系統上有就是了)
docker --version //確認 docker 有沒有裝
nvidia-ctk --version //確認 NVIDIA Container Toolkit 有沒有裝
Ollama Container:
Ollama container 跑在我的桌電上,建個 llama-docker
資料夾,把東西都放裡頭
services:
ollama:
image: ollama/ollama
container_name: ollama
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ./models:/root/.ollama
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
進入 ollama container
sudo docker exec -it ollama bash
用 ollama pull 指令載模型
ollama pull llama3.1:8b
然後用 ollama run 跑模型
ollama run llama3.1:8b
跑起來後,就可以直接在命令列輸入,跟它互動
也能用中文跟它交談
可以用
watch -n 0.5 nvidia-smi
來查看顯存的用量,確認 gpu 真的有在跑,而且跑那模型用了大概
5GB 的顯存
有點好奇它的推理能力,所以去網路上找了一個國文題目給它解
哇,他答對了,超酷的。我再接著去試試其它的模型,載了 qwen
來玩
後來跟我同事聊天,跟他分享我在本機跑 LLM,還有載了 qwen
等到模型載好後,我先給這模型來波壓力測試,在本機上可以用
ollama list
來查看有哪些模型能使用
我發現,那個 qwen 在跑的時候有 thinking 的過程,有趣
不過那個 thinking 的過程會拖慢輸出的時間,如果想把 thinking
關掉的話可以在跑的時候加上 think=false 的參數
ollama run <模型名稱> --think=false
確認 qwen 能跑後,開始上壓力測試
ollama rm qwen3:14b
最後是聽我前同事的建議,選用了 gpt-oss:20b 的模型來使用,13
GB,那天在載的時候家裡還斷電個一兩次,操。話說,那個 gpt-oss 模型沒法用
--think=false 來把它關掉,最多用 --think=low 來讓它不要想那麼多。
Ollama 遠端連線:
我上面的操作都是在我 N100
電腦上,用遠端桌面進我那台桌電,然後再開 terminal 進 container
裡下指令,實在是有些煩,而且這樣單純用 cli
的互動方式也無法讓模型紀錄上下文,所以再來要修正一下互動的方式。桌電跑
ollama container,我在 N100 上直接用 ollama cli 連到 container 裡的
server。
先在我那台 N100 上裝 ollama
curl -fsSL https://ollama.com/install.sh | sh
N100 上沒有要跑 ollama 服務,只是單純想用它的
cli,所以把服務給關了
sudo systemctl disable --now ollama.service
Ollama 是用 OLLAMA_HOST 變數來指定 server 位置,所以
export OLLAMA_HOST=http://192.168.3.3:11434
那台桌電在區網的 ip 是 192.168.3.3,ollama 的預設 port 是
11434。這設定在 terminal 重開後會失效,所以要寫進 .bashrc 裡
echo 'export OLLAMA_HOST=http://192.168.3.3:11434' >> ~/.bashrc
source ~/.bashrc
把桌機的 ollama container 跑起來後,在我 N100 電腦上下
ollama list 指令測試,能正常顯示有什麼模型。
結合 Python 來紀錄聊天:
我再來要弄個 python
程式,讓一開始跟模型聊天時能先載入自己設定的
prompt,也能紀錄對話的紀錄,請 gpt 幫我快速生成一個 python 程式來使用
XD
import requests
MODEL = "gpt-oss:20b"
OLLAMA_URL = "http://192.168.3.3:11434/api/chat"
STORY_FILE = "story.md"
# 讀取小說
with open(STORY_FILE, "r", encoding="utf-8") as f:
story = f.read()
# 對話歷史
messages = [
{
"role": "system",
"content": """幫我記住以下設定"""
},
{
"role": "user",
"content": f"""
--- 設定開始 ---
{story}
--- 設定結束 ---
"""
}
]
print("開始對話,輸入 /quit 離開。")
while True:
try:
user_input = input("\n你:")
if user_input == "/quit":
break
if not user_input.strip():
continue
messages.append({
"role": "user",
"content": user_input
})
response = requests.post(
OLLAMA_URL,
json={
"model": MODEL,
"messages": messages,
"stream": False,
"think": "low"
}
)
response.raise_for_status()
data = response.json()
answer = data["message"]["content"]
print(f"\nAI:{answer}")
messages.append({
"role": "assistant",
"content": answer
})
except KeyboardInterrupt:
print("\n離開。")
break
except Exception as e:
print(f"\n錯誤:{e}")
然後這是 md 檔的內容
我是一個 26 歳的人,之前有做過網頁工程師,家裡有養小狗。
透過 python 程式跟模型聊天
啊哈,它有成功記住了,但我最後就只做到這,因為當我開始把遊戲設定加到 md 檔後,我發現我才加不到 1/20 的設定,它 context window 就爆了,它會無法回應,就算把 context window 調高,讓它能跑,它也會開始胡言亂語,解決方案就是做 RAG,對話時不把文本全載入,只載入關聯性最高的幾個敘述,但真要做的話感覺要花不少時間,所以最後才會放棄,轉去 AI 服務的平台,它們的模型跟搜尋機制肯定是比我自己在我的桌電上跑還要強。
最後補充個,可以用
ollama ps
來查看目前在執行的模型
如果想讓它停止的話可以用
ollama stop <模型名稱>
來停止。


















沒有留言:
張貼留言