iT邦幫忙

2026 iThome 鐵人賽

DAY 2
0
AI Security

打造 AI Security Lab:從攻擊 LLM 到建立自己的 AI 防線系列 第 2

Day 2|用 Ollama 建立本地 LLM 實驗環境

  • 分享至 

  • xImage
  •  

前言

Day 1 先把整個 30 天的方向定下來之後,今天終於正式開始動手。

因為這次的目標是做一個自己的 AI Security Lab,所以第一件事不是急著攻擊 AI,而是先想辦法做出一個可以被我拿來測試的 LLM。

我原本有想過直接串 OpenAI、Claude 或 Gemini 的 API,不過後來還是決定先走本地端。

理由很簡單:

我不想做到一半,還要一直在意 API 額度跟費用。

而且這次既然是要做實驗環境,如果模型可以直接跑在自己的電腦裡,之後做 Prompt Injection、Logging、Security Gateway 也會比較方便。

所以今天的目標很單純:

先把一個 Local LLM 跑起來。


為什麼選 Ollama?

我這次用的工具是 Ollama。

它可以直接在本機下載並執行不同的大型語言模型,不需要自己處理太多模型載入、GPU 設定或推論框架。

簡單理解就是:

我的電腦
   ↓
Ollama
   ↓
Local LLM

之後我只要透過 Ollama,就可以直接跟模型互動。

對我來說這樣很適合拿來當 Lab 的基礎。

因為我現在的重點不是研究「怎麼訓練一個 LLM」,而是:

LLM 建好之後,它會不會被攻擊?我要怎麼防?


建立專案資料夾

我先在桌面建立了一個:

AI-Security-Lab

然後直接用 VS Code 打開。

目前的工作目錄是:

C:\Users\user\Desktop\AI-Security-Lab

這個資料夾之後就是整個 30 天 Lab 的主專案。


安裝 Ollama

安裝完 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

代表我下載的模型也已經在本機了。
https://ithelp.ithome.com.tw/upload/images/20260915/20178893eMFhE7lRny.png


為什麼選 qwen3:4b?

我這次先選:

qwen3:4b

主要原因不是因為它一定是最強的模型,而是我想先確保:

  • 電腦跑得動
  • 中文可以正常使用
  • 模型不要太大
  • 後續拿來做攻防測試就好

目前這個模型大小大約是:

2.5 GB

對第一階段來說,我覺得已經很夠用。

因為現在真正重要的不是模型多聰明,而是:

先有一個可以被攻擊的 Target。


跑起第一個 Local LLM

接著直接執行:

ollama run qwen3:4b

成功之後就會進入互動模式。

我先問了一個很基本的問題:

你好,請用繁體中文回答我。

模型正常回應。

接著我就直接問了一個跟這次專案有關的問題:

什麼是 Prompt Injection?

模型也可以正常回答。

這代表至少目前:

Ollama
   ↓
qwen3:4b
   ↓
繁體中文輸入
   ↓
AI Security 問題

這整條流程是通的。
https://ithelp.ithome.com.tw/upload/images/20260915/20178893XsRpV79qPC.png

第一個意外:模型把 Thinking 印出來了

不過這裡出現了一個我一開始沒想到的現象。

模型回答前,Terminal 先出現:

Thinking...

接著是一大串模型的推理內容。

例如它會先自己分析:

用户问的是“什么是 Prompt Injection”...

最後才真正輸出答案。

也就是:

Thinking
   ↓
模型內部推理
   ↓
Final Answer

這其實滿有趣的。

因為我原本只是想拿一個簡單的本地模型來測試,結果第一天就發現:

模型真正整合進應用之前,輸出格式本身也需要控制。
https://ithelp.ithome.com.tw/upload/images/20260915/20178893QT2g3tIYTk.png


嘗試關閉 Thinking

後來我輸入:

/set nothink

系統也正常回覆:

Set 'nothink' mode.

照理說,我原本以為這樣之後就會只剩最後答案。

所以我又重新問:

什麼是 Prompt Injection?請用繁體中文簡短回答。

結果有比較短,但還是可以看到一部分推理內容。

這個結果讓我滿意外的。

因為我一開始的想法是:

/set nothink
        ↓
完全不顯示推理

但實際結果比較像:

/set nothink
        ↓
仍然可能看到部分 reasoning

https://ithelp.ithome.com.tw/upload/images/20260915/20178893Wuo5ITB73e.png
所以我先沒有繼續卡在這裡。

因為今天的目標不是研究 Thinking Mode,而是先確認 Local LLM 能不能跑。

不過這個現象我先記下來。

之後 Day 3 把模型包成自己的 Application 時,也許就會需要處理:

我要怎麼只取我要的 Response?


Local LLM 的回答也不能全信

測試 Prompt Injection 的時候,我還注意到另外一件事情。

模型在回答裡自己舉了一些「真實案例」。

但這裡我不會因為它說了,就直接認定是真的。

這也是我覺得跑本地模型很有意思的地方。

模型可以:

回答得很像真的

但不代表:

內容一定是真的

所以後面如果文章中真的要引用案例或研究,我還是會另外找資料驗證。

這件事也算是我今天額外得到的一個提醒。


確認目前模型狀態

接著可以透過:

ollama list

確認本機有哪些模型。

目前結果:

NAME        ID              SIZE
qwen3:4b    359d7dd4bcda    2.5 GB

如果想看目前有哪些模型正在執行,可以用:

ollama ps

如果目前沒有正在跑模型,結果可能會是空的。

這也是正常的。


建立 AI Security Lab 的基本目錄

確認 Local LLM 可以跑之後,我順便把整個專案的基本骨架先建起來。

目前先建立:

app
attacks
defense
logs
tests

再加上一個:

README.md

最後用:

tree /F

檢查目錄。

目前結果:

https://ithelp.ithome.com.tw/upload/images/20260915/201788930zjNX2qZ8A.png

我現在沒有急著一次建立所有資料夾。

像之後的:

rag
agent
wazuh

我打算等做到那一段再加。

我比較想讓這個專案是:

做到哪,長到哪。

這樣回頭看 30 天的 Git Commit,應該也會比較有感覺。


今天目前的架構

做到這裡,目前整個 Lab 還非常簡單:

User
 ↓
Ollama
 ↓
qwen3:4b
 ↓
Response

現在還沒有:

FastAPI
System Prompt
Security Gateway
Logging
Attack Detection
Wazuh

但沒關係。

因為現在至少已經有一個:

真的可以被我拿來測試的 LLM。


今天踩到的兩個問題

今天其實沒有完全一路順。

第一個是:

1. VS Code 找不到 ollama

一開始:

ollama

完全不能用。

後來確認 Ollama 已經安裝,才發現是 PATH 的問題。

雖然不是什麼很大的問題,但如果完全照教學做,這種東西其實滿容易卡住。


第二個是:

2. /set nothink 沒有完全符合預期

我原本以為:

/set nothink

之後就不會再看到推理內容。

但實際測試 qwen3:4b 後,還是有看到 reasoning。

這個目前我先不處理。

但之後如果真的要把模型包成一個乾淨的 API,這件事就不能一直放著。


Day 2 小結

今天其實做的事情不算多。

但我覺得這一步很重要。

因為從今天開始,這個專案終於不是只有架構圖。

我真的有一個模型在自己的電腦上跑:

Windows
   ↓
VS Code
   ↓
Ollama
   ↓
qwen3:4b

目前它可以:

  • 正常接收中文問題
  • 回答 AI Security 相關內容
  • 不需要付費 API
  • 直接在本機執行

也就是說,從下一篇開始,我終於可以把這個模型包進自己的程式裡。

下一篇預計會做:

Day 3|用 Python + FastAPI 打造第一個本地 LLM Application

下一步讓:

User
 ↓
FastAPI
 ↓
Ollama
 ↓
LLM

真正串起來。

等有自己的 Application 之後,後面要加 System Prompt、Logging,甚至開始攻擊,才會比較有意義。


上一篇
Day 1|AI Security 是什麼?30 天打造自己的 AI Security Lab
系列文
打造 AI Security Lab:從攻擊 LLM 到建立自己的 AI 防線2
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言