Day 1 先把整個 30 天的方向定下來之後,今天終於正式開始動手。
因為這次的目標是做一個自己的 AI Security Lab,所以第一件事不是急著攻擊 AI,而是先想辦法做出一個可以被我拿來測試的 LLM。
我原本有想過直接串 OpenAI、Claude 或 Gemini 的 API,不過後來還是決定先走本地端。
理由很簡單:
我不想做到一半,還要一直在意 API 額度跟費用。
而且這次既然是要做實驗環境,如果模型可以直接跑在自己的電腦裡,之後做 Prompt Injection、Logging、Security Gateway 也會比較方便。
所以今天的目標很單純:
先把一個 Local LLM 跑起來。
我這次用的工具是 Ollama。
它可以直接在本機下載並執行不同的大型語言模型,不需要自己處理太多模型載入、GPU 設定或推論框架。
簡單理解就是:
我的電腦
↓
Ollama
↓
Local LLM
之後我只要透過 Ollama,就可以直接跟模型互動。
對我來說這樣很適合拿來當 Lab 的基礎。
因為我現在的重點不是研究「怎麼訓練一個 LLM」,而是:
LLM 建好之後,它會不會被攻擊?我要怎麼防?
我先在桌面建立了一個:
AI-Security-Lab
然後直接用 VS Code 打開。
目前的工作目錄是:
C:\Users\user\Desktop\AI-Security-Lab
這個資料夾之後就是整個 30 天 Lab 的主專案。
安裝完 Ollama 後,我原本以為直接在 VS Code Terminal 輸入:
ollama --version
就會成功。
結果第一次就遇到問題。
Terminal 顯示:
無法辨識 'ollama' 詞彙是否為 Cmdlet、函數、指令檔或可執行程式的名稱。
看到這個錯誤的第一個反應是:
我是不是根本沒有安裝成功?
所以我先檢查 Ollama 的執行檔到底在不在。
輸入:
Test-Path "$env:LOCALAPPDATA\Programs\Ollama\ollama.exe"
結果:
True
這代表 Ollama 其實有安裝。
只是 VS Code Terminal 當下沒有抓到它的 PATH。
既然執行檔確定存在,我先不用急著處理 PATH,直接用完整路徑測試。
& "$env:LOCALAPPDATA\Programs\Ollama\ollama.exe" --version
結果成功顯示:
ollama version is 0.34.0
這時就可以確定:
Ollama 本身沒問題,只是指令路徑沒有被 Terminal 正常辨識。
接著我再確認模型:
& "$env:LOCALAPPDATA\Programs\Ollama\ollama.exe" list
結果:
NAME ID SIZE MODIFIED
qwen3:4b 359d7dd4bcda 2.5 GB
代表我下載的模型也已經在本機了。
我這次先選:
qwen3:4b
主要原因不是因為它一定是最強的模型,而是我想先確保:
目前這個模型大小大約是:
2.5 GB
對第一階段來說,我覺得已經很夠用。
因為現在真正重要的不是模型多聰明,而是:
先有一個可以被攻擊的 Target。
接著直接執行:
ollama run qwen3:4b
成功之後就會進入互動模式。
我先問了一個很基本的問題:
你好,請用繁體中文回答我。
模型正常回應。
接著我就直接問了一個跟這次專案有關的問題:
什麼是 Prompt Injection?
模型也可以正常回答。
這代表至少目前:
Ollama
↓
qwen3:4b
↓
繁體中文輸入
↓
AI Security 問題

不過這裡出現了一個我一開始沒想到的現象。
模型回答前,Terminal 先出現:
Thinking...
接著是一大串模型的推理內容。
例如它會先自己分析:
用户问的是“什么是 Prompt Injection”...
最後才真正輸出答案。
也就是:
Thinking
↓
模型內部推理
↓
Final Answer
這其實滿有趣的。
因為我原本只是想拿一個簡單的本地模型來測試,結果第一天就發現:
模型真正整合進應用之前,輸出格式本身也需要控制。
後來我輸入:
/set nothink
系統也正常回覆:
Set 'nothink' mode.
照理說,我原本以為這樣之後就會只剩最後答案。
所以我又重新問:
什麼是 Prompt Injection?請用繁體中文簡短回答。
結果有比較短,但還是可以看到一部分推理內容。
這個結果讓我滿意外的。
因為我一開始的想法是:
/set nothink
↓
完全不顯示推理
但實際結果比較像:
/set nothink
↓
仍然可能看到部分 reasoning

所以我先沒有繼續卡在這裡。
因為今天的目標不是研究 Thinking Mode,而是先確認 Local LLM 能不能跑。
不過這個現象我先記下來。
之後 Day 3 把模型包成自己的 Application 時,也許就會需要處理:
我要怎麼只取我要的 Response?
測試 Prompt Injection 的時候,我還注意到另外一件事情。
模型在回答裡自己舉了一些「真實案例」。
但這裡我不會因為它說了,就直接認定是真的。
這也是我覺得跑本地模型很有意思的地方。
模型可以:
回答得很像真的
但不代表:
內容一定是真的
所以後面如果文章中真的要引用案例或研究,我還是會另外找資料驗證。
這件事也算是我今天額外得到的一個提醒。
接著可以透過:
ollama list
確認本機有哪些模型。
目前結果:
NAME ID SIZE
qwen3:4b 359d7dd4bcda 2.5 GB
如果想看目前有哪些模型正在執行,可以用:
ollama ps
如果目前沒有正在跑模型,結果可能會是空的。
這也是正常的。
確認 Local LLM 可以跑之後,我順便把整個專案的基本骨架先建起來。
目前先建立:
app
attacks
defense
logs
tests
再加上一個:
README.md
最後用:
tree /F
檢查目錄。
目前結果:

我現在沒有急著一次建立所有資料夾。
像之後的:
rag
agent
wazuh
我打算等做到那一段再加。
我比較想讓這個專案是:
做到哪,長到哪。
這樣回頭看 30 天的 Git Commit,應該也會比較有感覺。
做到這裡,目前整個 Lab 還非常簡單:
User
↓
Ollama
↓
qwen3:4b
↓
Response
現在還沒有:
FastAPI
System Prompt
Security Gateway
Logging
Attack Detection
Wazuh
但沒關係。
因為現在至少已經有一個:
真的可以被我拿來測試的 LLM。
今天其實沒有完全一路順。
第一個是:
一開始:
ollama
完全不能用。
後來確認 Ollama 已經安裝,才發現是 PATH 的問題。
雖然不是什麼很大的問題,但如果完全照教學做,這種東西其實滿容易卡住。
第二個是:
/set nothink 沒有完全符合預期我原本以為:
/set nothink
之後就不會再看到推理內容。
但實際測試 qwen3:4b 後,還是有看到 reasoning。
這個目前我先不處理。
但之後如果真的要把模型包成一個乾淨的 API,這件事就不能一直放著。
今天其實做的事情不算多。
但我覺得這一步很重要。
因為從今天開始,這個專案終於不是只有架構圖。
我真的有一個模型在自己的電腦上跑:
Windows
↓
VS Code
↓
Ollama
↓
qwen3:4b
目前它可以:
也就是說,從下一篇開始,我終於可以把這個模型包進自己的程式裡。
下一篇預計會做:
Day 3|用 Python + FastAPI 打造第一個本地 LLM Application
下一步讓:
User
↓
FastAPI
↓
Ollama
↓
LLM
真正串起來。
等有自己的 Application 之後,後面要加 System Prompt、Logging,甚至開始攻擊,才會比較有意義。