上週我們把後端骨架搭好了:資料庫、FastAPI、使用者檔案 API 都能動。但目前這個系統還很死,你送什麼進去,它就照著代碼邏輯回什麼,完全不會思考。
今天要花一整天,先不寫太多代碼,把「Agent」這個詞真正搞懂。因為接下來兩週要做的所有事,都是建立在這個概念上:怎麼讓一個本機運行的開源模型,從只會回答問題的工具,變成一個真的能規劃、能判斷、能陪你調整計畫的教練。
先說清楚這個專案裡兩個角色的分工,避免搞混:
LLM(大型語言模型)本質上是一個很會「接話」的模型。你給它一段文字,它根據訓練時看過的大量資料,算出接下來最合理的字詞,一個字一個字接下去,接出一段完整的回答。
想像成一個讀過非常多書的朋友:你問他問題,他不是在資料庫裡查答案,而是憑著讀過的東西,直接把最像樣的回答講出來。這也是為什麼 LLM 偶爾會講錯,因為它是在「接得像」,不是在「查得準」。
我們的教練用的是 Meta 開源的 llama3.1:8b,透過 Ollama 在你自己的電腦上跑起來。單獨呼叫它一次,它會回你一段文字,然後就結束了,它不會自己記得剛剛做了什麼,也不會自己決定「這件事我要分三步驟做」。
Agent 是在 LLM 外面包一層邏輯,讓它能重複「想 → 做 → 看結果 → 再想」,直到把一件事真正完成,而不是回一段話就結束。
核心循環只有四步:
Observe(觀察現況)
↓
Think(模型想該怎麼做)
↓
Action(真的去執行,比如查資料庫、生成計畫)
↓
回到 Observe,看看做完之後現況變成怎樣
對應到我們的 AI 學習教練:使用者說「我今天進度落後了」(Observe),模型判斷這是進度落後、需要重新排程(Think),系統去查這個使用者的計畫和可用時間、呼叫本機模型生成新的排程(Action),排程更新後,再看使用者下一句話要做什麼(回到 Observe)。
單純呼叫一次模型,只做得到「Think」這一步。要做出整個循環,需要程式邏輯把這四步串起來,這就是 Day 10 要開始寫的 LangGraph。
Prompt 就是你給模型的指令。同一件事,問法不同,得到的品質差很多,開源模型對這點又比大型商用模型更敏感,指令給得越清楚,效果差距越明顯。
三個馬上能用的原則:
Day 13 寫 Planner Agent 時會更深入練習怎麼設計 Prompt,今天先知道這個概念就夠。
進入 ollama.com/download,下載對應你作業系統的安裝檔(Windows/Mac/Linux 都有),安裝過程一路 Next 就好。
驗證安裝:
ollama --version
看到版本號代表裝好了。
ollama pull llama3.1:8b
模型大概 4-5 GB,第一次下載需要一點時間,視網路速度而定。下載完後可以用這個指令確認:
ollama list
應該會看到 llama3.1:8b 出現在清單裡。
在寫程式之前,先確認模型本身能跑:
ollama run llama3.1:8b
會進入一個對話模式,輸入「用一句話說明什麼是學習教練」按 Enter,應該會看到模型的回答。確認沒問題後,輸入 /bye 離開。
這一步很重要:如果終端機裡都跑不動,代表是 Ollama 或模型本身的問題,之後寫 Python 程式時會更難排查。先確認這層沒問題,之後遇到錯誤才知道是程式的問題還是模型的問題。
cd backend
python -m pip install ollama
驗證:
python -c "import ollama; print('安裝成功')"
檔案位置: backend/test_ollama.py
狀態: 新增檔案
用途: 驗證 Ollama 本機服務有跑起來、模型能正常回應
依賴: ollama
import ollama
def test_ollama_connection() -> None:
"""呼叫一次本機 Ollama 模型,確認服務和模型都正常"""
response = ollama.chat(
model="llama3.1:8b",
messages=[
{"role": "user", "content": "用一句話說明什麼是學習教練"}
],
)
print("模型回答:", response["message"]["content"])
if __name__ == "__main__":
test_ollama_connection()
執行:
python test_ollama.py
應該看到類似這樣的輸出:
模型回答: 學習教練是根據你的目標和進度,持續陪伴並調整學習方向的夥伴。
看到回答,代表 Ollama 服務、模型下載、Python 套件都串起來了,之後兩週要用到的一切都建立在這支測試腳本能跑成功的基礎上。
ConnectionError,連不上 OllamaOllama 安裝好之後,背景會自動啟動一個本機服務(預設在 http://localhost:11434)。如果連不上,先確認 Ollama 應用程式真的有在跑(工作列或工作管理員裡找得到),或手動執行 ollama serve 把服務啟動起來。
model 'llama3.1:8b' not found還沒下載模型。執行 ollama pull llama3.1:8b,等下載完成再跑腳本。
本機模型的速度取決於你的硬體(有沒有獨立顯卡、記憶體多少)。純 CPU 也能跑,但可能要等 10-30 秒才有完整回答,這是正常的,跟呼叫雲端 API 幾乎即時的速度不一樣。
llama3.1:8b 建議至少 8GB 可用記憶體。如果電腦負擔不了,可以換更小的模型,例如 ollama pull llama3.2:3b,品質會打折但比較省資源。
ModuleNotFoundError: No module named 'ollama'確認裝套件用的 pip 和執行腳本用的 python 是同一個環境,跑 python -m pip install ollama 最保險。
今天沒有寫複雜的程式碼,但把最重要的觀念釐清了:LLM 只會接話,Agent 是在外面包一層「想 → 做 → 看結果」的循環,讓它能真正完成任務而不只是回一句話。也第一次把 Ollama 裝起來、下載了 llama3.1:8b,成功從 Python 拿到本機模型的回答。
系統現在是這樣的:
Day 1 ✓ 產品定義完成
Day 2 ✓ 開發環境準備
Day 3 ✓ 專案架構設計
Day 4 ✓ 資料庫設計
Day 5 ✓ SQLite 資料庫建置
Day 6 ✓ FastAPI 基礎
Day 7 ✓ 使用者檔案 API
Day 8 ✓ 理解 LLM Agent 的本質(今天)
Day 9 ⬜ 連接 Ollama 本機模型
今天的測試腳本只是暖身,明天要把 Ollama 真正接進系統裡,讓它能回傳結構化的 JSON。