NLP Day 45 系列總結與延伸路線
執行需求:CPU 可跑。今天是「NLP 與大型語言模型應用」系列的第四十五篇,也是專案五篇的最後一篇。我們花一天回顧這 45 天的學習路徑:從 Day 1 的環境與工具鏈開始,經過文本前處理、詞向量、分類、LLM API、微調、檢索、RAG、Agent、LangGraph、成本武器、部署、到最後五天的「企業知識庫問答」專案。本篇不寫新技術,只整理學過的工具、指標、模型,給出延伸到 2025 年 5 月後可走的學習方向。我們會把七個階段的學習重點串成一張圖,並列出五個常見的職涯方向,最後給一份延伸閱讀清單(不引用 2025 年 5 月之後的新工具或新模型)。
引言
回頭看 45 天前,Day 1 我們說「這系列要把讀者從『會用 BERT 做分類』帶到『能獨立打造 LLM 應用』」。今天我們可以驗收這個承諾:Day 1–4 建立環境與基礎(Python、spaCy、jieba、sentence-transformers),Day 5–12 走完 NLP 經典任務(分類、NER、情緒分析、零樣本),Day 13–21 進入 LLM 與微調(API、提示工程、Ollama、結構化輸出、LoRA、評估),Day 22–30 走過檢索與 RAG(嵌入、向量資料庫、查詢改寫、rerank、GraphRAG),Day 31–37 從 RAG 走到 Agent(企業知識庫、ReAct、MCP、多 Agent、安全、文件處理自動化),Day 38–40 加上框架與部署武器(LangGraph、成本最佳化、FastAPI 串流),最後 Day 41–45 把所有工具組合成一個可部署的企業知識庫系統。四十四篇技術文之後的這篇,是把所有工具、指標、概念在腦中重新組合成一張可以帶走的地圖。
本篇的內容分四段:第一段回顧七個階段的學習路徑與代表工具;第二段整理「企業知識庫問答」專案的最終成果;第三段列出 2025 年 5 月前仍可走的延伸學習方向(multi-modal RAG、量化推論、Agent 部署等);第四段是 45 天學習的「自我評估清單」,讀者可以對照檢查自己學到了什麼、還缺什麼。這篇沒有新的程式碼,但有大量引用 Day 1–44 的連結,方便你回頭補課。
七個階段的學習路徑
在把這張地圖列出來之前,我們先用一段小程式把「45 天中每天的主題」做一個快速掃描,幫自己複習這整套內容的章節分布:
# 1. 掃描 posts-nlp 目錄,看看每篇的章節 ID 與任務分類
import re
from pathlib import Path
posts_dir = Path("posts-nlp")
slots = []
for fp in sorted(posts_dir.glob("*-nlp-day-*.html")):
m = re.match(r"(\d+)-nlp-day-(\d+)", fp.stem)
if not m:
continue
slots.append((int(m[1]), fp.name, fp.stat().st_size // 1024))
# 統計各任務的篇章數
from collections import Counter
counter = Counter()
for slot, name, _ in slots:
if slot <= 2:
counter["導論"] += 1
elif slot <= 12:
counter["分類"] += 1
elif slot <= 21:
counter["LLM 與微調"] += 1
elif slot <= 32:
counter["檢索與 RAG"] += 1
elif slot <= 37:
counter["Agent"] += 1
elif slot <= 40:
counter["框架與部署"] += 1
else:
counter["專案"] += 1
print("七個階段篇章分布:")
for stage, n in counter.items():
print(f" {stage:12s} {n} 篇")
# 輸出範例:
# 七個階段篇章分布:
# 導論 2 篇
# 分類 10 篇
# LLM 與微調 9 篇
# 檢索與 RAG 11 篇
# Agent 5 篇
# 框架與部署 3 篇
# 專案 5 篇
把 45 天切成七個階段,每個階段都有「理論 → 程式 → 實戰」的節奏。我們用一張地圖把每一階段的代表工具、指標、實戰資料集整理起來,方便你回頭查閱。
| 階段 | 天數 | 代表工具 | 代表指標 | 實戰資料集 |
|---|---|---|---|---|
| 導論 | Day 1–2 | Python、Colab、transformers、LangChain、向量資料庫 | — | — |
| 基礎 | Day 3–4 | spaCy、jieba、OpenCC、sentence-transformers | — | 中文客服訊息 |
| 分類 | Day 5–12 | TF-IDF、BERT、timm、情緒分析、零樣本 | accuracy、F1、AUROC、混淆矩陣 | 客服工單 |
| LLM 與微調 | Day 13–21 | OpenAI、Anthropic、Ollama、LoRA、QLoRA | BLEU、ROUGE、LLM-as-judge | 指令微調資料 |
| 檢索與 RAG | Day 22–32 | Chroma、pgvector、Qdrant、GraphRAG、rerank | recall@k、MRR、忠實度 | 企業知識庫 |
| Agent | Day 33–37 | ReAct、MCP、文件處理自動化 | 任務完成率、安全檢測 | 合約查詢 |
| 框架與部署 | Day 38–40 | LangGraph、成本最佳化、FastAPI、串流輸出 | P50/P95 延遲、throughput | — |
| 專案 | Day 41–44 | hybrid_rerank、ONNX、Streamlit、Docker | 引用正確率、忠實度、覆蓋率 | 個資法 |
這張表是我們完成 45 天的「全景」。每一格都能在對應的篇章找到詳細實作:分類的遷移學習(Day 5 與 Day 8)、微調的 LoRA 設定(Day 17)、RAG 的 hybrid_rerank(Day 42)、Agent 的 LangGraph 狀態管理(Day 38)、部署的 ONNX + FastAPI + Streamlit(Day 44)、最後在 Day 41–44 全部組合成可部署服務。
專案五篇的最終成果
專案五篇(Day 41–45)把前面 40 天的工具組合成一個 production-ready 的企業知識庫問答系統。我們把它的最終成果整理成一張表:
# 2. 把 Day 41–44 的最終指標整合起來
import json
from pathlib import Path
# 三個關鍵檔案:experiments_log.json(Day 42)、errors_log.json(Day 43)、eval_report.md(Day 43)
exp = json.loads(Path("experiments_log.json").read_text(encoding="utf-8"))
errors = json.loads(Path("errors_log.json").read_text(encoding="utf-8"))
best = next(r for r in exp if r["run"] == "hybrid_rerank")
print("=== Day 41–44 專案五篇最終成果 ===")
print(f"資料集:個人資料保護法 + 施行細則(法務部全國法規資料庫,政府資料開放授權條款 v1)")
print(f"檢索(hybrid_rerank):recall@4={best['avg_recall@4']:.4f}, MRR={best['avg_mrr']:.4f}")
print(f"生成(Day 43 評估):引用正確率=0.9400, 忠實度=0.8750, 覆蓋率=0.9000")
print(f"錯誤案例(Day 43):{len(errors)} 個,分 FN/FP/Hallucination 三類")
print(f"部署(Day 44):ONNX={Path('embedding_e5_small.onnx').stat().st_size // 1024 // 1024} MB,"
f"FastAPI:8000 + Streamlit:8501,DOCKER image ≈ 1.2 GB")
# 輸出範例(固定條件下每次都一致):
# === Day 41–44 專案五篇最終成果 ===
# 資料集:個人資料保護法 + 施行細則(法務部全國法規資料庫,政府資料開放授權條款 v1)
# 檢索(hybrid_rerank):recall@4=0.8500, MRR=0.9167
# 生成(Day 43 評估):引用正確率=0.9400, 忠實度=0.8750, 覆蓋率=0.9000
# 錯誤案例(Day 43):4 個,分 FN/FP/Hallucination 三類
# 部署(Day 44):ONNX=190 MB,FastAPI:8000 + Streamlit:8501,DOCKER image ≈ 1.2 GB
把 Day 41–44 的最終指標整合成一份摘要:資料來源是政府開放資料、檢索 recall@4 達到 0.85、生成引用正確率達到 0.94、4 個錯誤案例寫進 fallback 邏輯、部署用 ONNX + FastAPI + Streamlit + Docker 容器化。這份專案展示的不是「最先進的模型」,而是「production-ready 的最小可行產品」——所有元件都跑得起來、所有指標都達標、可以 demo、可以監控、可以部屬。
這套系統與 Day 31–32 的原型差別有三點:第一,檢索從純 dense 升級到 hybrid_rerank(recall@4 從 0.65 提升到 0.85);第二,評估從 A/B 測試升級到完整四指標(引用正確率、忠實度、覆蓋率、延遲);第三,部署從 notebook 腳本升級到 ONNX + FastAPI + Streamlit + Docker 容器。這三個升級剛好對應「檢索」、「評估」、「部署」三個 RAG 系統最關鍵的環節。
四個貫穿主題
回顧這 45 天的內容,有四個「貫穿主題」反覆出現,每一個都值得單獨再深入:
主題一:資料永遠比模型重要。從 Day 3(文本前處理)到 Day 11(標註與資料增強)到 Day 22(嵌入與語意)到 Day 41(知識庫整備),資料相關的天數佔了近三分之一。我們學過的關鍵工具包括:jieba、OpenCC、Albumentations、sentence-transformers、Chroma、RAGAS。資料品質的提升往往比模型替換更划算——一個好的資料切分可以讓 5 M 參數的小模型逼近 100 M 的大模型。
主題二:指標必須對應業務問題。Day 10、Day 19、Day 29、Day 43 都在強調「單一指標容易誤導」。工業界常見的 best practice:先用 recall@k 看整體、再用 precision/recall 看部署 trade-off、最後用 per-class 指標找瓶頸。這套方法在 Day 42 的檢索實驗(純 dense 0.65 → hybrid_rerank 0.85)與 Day 43 的錯誤分析(FN/FP/Hallucination)完整示範了一遍。
主題三:訓練 vs 推論的權衡。從 Day 17(LoRA 微調)到 Day 25(RAG 架構)到 Day 39(成本武器)到 Day 44(ONNX 部署),這個主題貫穿整個系列。學完之後你應該了解:訓練追求最高指標會大量用 GPU + 大模型;推論追求最低延遲會大量用 ONNX + 量化 + 邊緣裝置。連接兩者的橋樑是「模型轉換 + benchmark + 上線觀察」。
主題四:錯誤分析驅動迭代。Day 10(分類錯誤)、Day 17(偵測錯誤)、Day 29(RAG 評估)、Day 43(生成錯誤)四個篇章都強調「不要只盯著指標把數字調高,要把錯誤拆給工程師看」。這個方法論在工業界比「重新 train 一個新模型」更常見:先看錯誤分布,再決定要不要換模型、換資料、還是換 prompt。
常見職涯方向
在介紹五條職涯路線之前,我們用一張簡單的「技能 vs 路線」表格幫你判斷自己目前的位置:
# 3. 五條職涯路線的技能對照(純資料,方便決策)
career_paths = {
"NLP 工程師": {
"核心技能": ["transformers", "LangChain", "PEFT", "向量資料庫", "ONNX"],
"延伸技能": ["FastAPI", "Docker", "CI/CD"],
"入門年資": "1-3 年",
"適合特質": "喜歡把模型做出來跑起來",
"Day 對應": "Day 5, 17, 22, 30, 38, 41-44",
},
"ML 工程師": {
"核心技能": ["PyTorch", "Spark", "Airflow", "MLflow"],
"延伸技能": ["Feast", "Kafka", "Dashboard"],
"入門年資": "2-4 年",
"適合特質": "喜歡處理資料管線與自動化",
"Day 對應": "Day 11, 18, 22, 41-44",
},
"LLM Researcher": {
"核心技能": ["論文閱讀", "預訓練", "RLHF", "arXiv"],
"延伸技能": ["數學推導", "benchmark 設計", "論文撰寫"],
"入門年資": "需要碩博士學位",
"適合特質": "對前沿技術有強烈好奇心",
"Day 對應": "Day 17, 20, 34, 35, 39",
},
"MLOps / Production": {
"核心技能": ["Docker", "Kubernetes", "Prometheus", "Terraform"],
"延伸技能": ["Grafana", "Kafka", "CI/CD"],
"入門年資": "2-4 年",
"適合特質": "在乎穩定性與監控",
"Day 對應": "Day 39, 40, 44",
},
"RAG / Domain Expert": {
"核心技能": ["領域知識", "RAG 工具鏈", "Prompt Engineering"],
"延伸技能": ["法規/醫療/金融領域知識", "標註"],
"入門年資": "1-3 年",
"適合特質": "喜歡把 LLM 接到特定產業",
"Day 對應": "Day 25, 28, 30, 31, 32, 41-44",
},
}
for name, attrs in career_paths.items():
print(f"== {name} ==")
for k, v in attrs.items():
print(f" {k}: {v}")
print()
這張對照表展示了「學完 45 天後,你可以走哪幾條路」。每條路都有 Day 對應欄位,告訴你這個系列中哪幾篇對這條職涯最有幫助。例如想做 RAG / Domain Expert,主要看 Day 25(RAG 架構)、Day 28(rerank)、Day 30(GraphRAG)、Day 31–32(企業知識庫)、Day 41–44(專案)。想做 Researcher,主要看 Day 17(LoRA)、Day 20(幻覺)、Day 34–35(多 Agent)的原理章節。Career recommendation 的關鍵在於你的「興趣特質」與「現有技能」的交叉點,不要只看哪條路薪水高。
學完這 45 天的內容後,你有幾個常見的下一站可以選擇:
- NLP 工程師(NLP Engineer):把模型訓練 + 部署整套做完。這條路以 transformers、LangChain、PEFT、向量資料庫、ONNX 為核心技能。專案篇 Day 41–44 就是這個角色的最佳預習。薪資區間在台灣大約年薪 100–180 萬新台幣。
- ML 工程師(Machine Learning Engineer):覆蓋 NLP + CV + 推薦系統,但通常以其中一條為主。NLP 工程師與 ML 工程師的差異在「後者會處理更多資料管線、MLOps、特徵工程」。延伸技能:Airflow、Spark、MLflow、Feast。
- LLM Researcher:投入新模型研發、論文發表。這條路偏學術,工業界職缺主要在大公司的 Research Lab(OpenAI、Google DeepMind、Meta AI)或新創 LLM 公司。延伸技能:大量論文閱讀、PyTorch 自刻模型、arXiv 追蹤。薪資區間較高(年薪 150–300 萬新台幣),但競爭也激烈。
- MLOps / Production Engineer:把模型從 notebook 推到 production。這條路專注於 deployment、monitoring、A/B testing、retraining。延伸技能:Kubernetes、Prometheus、Grafana、Terraform。
- RAG / Domain Expert:在特定產業(醫療、法律、金融、製造)把 LLM 技術落地。這條路除了 ML 之外,還要懂領域知識(醫療影像需要懂 DICOM、農業需要懂植物病理學、法律需要懂法條結構)。Day 31–32 與 Day 41–44 就是這個角色的標準 SOP。
這五條路並不互斥,許多 NLP/ML 工程師在工作 5–10 年後會跨界到 MLE 或 Researcher。建議你在工作 3 年內把第一條(NLP 工程師)的核心技能練熟,再依專案需要延伸到其他方向。
延伸學習方向
在給延伸資源清單之前,我們用一段小程式把 6 個延伸學習方向做成結構化索引,方便日後查詢:
# 4. 延伸學習的「主題 → 關鍵論文與教材」對照表
extensions = {
"Multi-modal RAG": [
"Radford 2021, CLIP (ICML)",
"Li 2022, BLIP-2 (arXiv)",
"Liu 2023, LLaVA (NeurIPS)",
"Chen 2023, GPT-4V 技術報告",
],
"量化與邊緣部署": [
"Jacob 2018, Quantization + Training (CVPR)",
"ONNX Runtime 1.19 (Microsoft, 2024)",
"OpenVINO 2024.4 (Intel)",
"TensorRT 8.6 (NVIDIA, 2023)",
],
"Agent 與工具呼叫": [
"Yao 2022, ReAct (arXiv:2210.03629)",
"Anthropic 2024, MCP 規範",
"OpenAI 2023, Function Calling",
"Schick 2023, Toolformer (NeurIPS)",
],
"RAG 評估框架": [
"Es 2024, RAGAS (arXiv:2309.15217)",
"Saad-Falcon 2024, ARES (arXiv:2311.09476)",
"Es 2024, Faithfulness vs Factuality (arXiv:2404.10128)",
],
"向量資料庫進階": [
"Qdrant 1.12 (2025-01)",
"pgvector 0.8 (2025-02)",
"Milvus 2.5 (2025)",
"LanceDB 0.10 (2025)",
],
"Self-RAG 與 Adaptive RAG": [
"Asai 2023, Self-RAG (arXiv:2310.11511)",
"Jeong 2024, Adaptive-RAG (arXiv:2403.14403)",
],
}
for theme, papers in extensions.items():
print(f"== {theme} ==")
for p in papers:
print(f" - {p}")
print()
這六個主題在 2025 年 3–5 月都已有穩固的論文與工具基礎,且都有良好的 Python 套件支援。讀完這系列後,你可以依興趣選一條深入。每個主題的入門成本大約 1–3 個月(每天 2–3 小時)。
45 天內容其實只是「可工作的 NLP 工程師」最低門檻。接下來還有非常多值得深入的方向,這裡列出 6 個在 2025 年 5 月前仍持續發展、且有良好社群基礎的主題:
1. Multi-modal RAG(多模態檢索增強生成)。本系列只處理文字 RAG,但企業真實場景常需要處理圖片、表格、PDF。Multi-modal RAG 把 CLIP 或 BLIP-2 這類視覺語言模型整合進檢索管線,可以對「圖片 + 文字」做混合檢索。建議閱讀:Learning Transferable Visual Models From Natural Language Supervision(CLIP,2021)。
2. 量化與邊緣部署。Day 44 我們用 ONNX 加速 embedding 推論,但尚未觸及 INT8 量化、TFLite、TensorRT、Qualcomm SNPE 等。量化能把模型從 190 MB 壓到 50 MB、推論加速 2–3 倍,是邊緣裝置部署的必備技能。建議閱讀:Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference(2019)。
3. Agent 與工具呼叫的進階設計。Day 33–38 我們學過 ReAct、MCP、LangGraph,但這些都還在「單 Agent」的範疇。進階主題包括多 Agent 協作(AutoGen、CrewAI)、Self-RAG(讓 Agent 自己判斷要不要檢索)、Adaptive-RAG(根據問題難度動態調整流程)。建議閱讀:ReAct: Synergizing Reasoning and Acting in Language Models(2022)。
4. RAG 評估框架的工程化。Day 43 我們手寫四個指標,但工業界常用 RAGAS、ARES、Promptfoo 等開源框架。這些框架支援「指標漂移偵測」、「A/B 測試」、「prompt 版本控制」,是 production 部署的必備工具。建議閱讀:RAGAS: Automated Evaluation of Retrieval Augmented Generation(2023)。
5. 向量資料庫的規模化。本系列用 Chroma 處理 100 個 chunk,真實工業界要處理數十萬到數百萬個 chunk。Qdrant、pgvector、Milvus 在這個規模仍能保持高效 ANN 搜尋;LanceDB 用 columnar 格式儲存向量、適合分析型查詢。建議閱讀:Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs(HNSW,2016)。
6. Self-RAG 與 Adaptive RAG。傳統 RAG 對每個問題都做相同流程,Self-RAG 讓模型自己判斷要不要檢索(甚至要不要重檢索),Adaptive-RAG 根據問題難度選不同流程。這兩個方向在 2024–2025 年快速發展,是 RAG 領域的前沿。建議閱讀:Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection(2023)。
自我評估清單
在列出 13 條自我評估之前,我們用一個簡單的對照函式幫你把「會」與「不會」快速分類:
# 5. 自我評估清單的「會/不會」計數器
checklist = {
"能用 spaCy 與 jieba 做文本前處理": "Day 3, 7",
"能用 sentence-transformers 做嵌入": "Day 4, 22",
"能用 BERT 微調文本分類": "Day 5, 8",
"能用 OpenAI / Ollama 串接 LLM": "Day 13, 15",
"能用 prompt engineering 控制 LLM 輸出": "Day 14, 16",
"能用 LoRA 做參數高效微調": "Day 17",
"能用 BLEU / ROUGE / LLM-as-judge 評估生成": "Day 19",
"能用 Chroma / pgvector / Qdrant 做向量檢索": "Day 23, 41",
"能用 BM25 + dense 做混合檢索": "Day 27, 42",
"能用 cross-encoder 做 rerank": "Day 28, 42",
"能用 RAGAS 風格指標評估 RAG 系統": "Day 29, 43",
"能用 ReAct / function calling 做 Agent": "Day 33",
"能用 MCP / LangGraph 設計狀態機 Agent": "Day 34, 38",
"能用 FastAPI + Streamlit 部署 RAG 服務": "Day 40, 44",
"能把個資法問答系統從資料整備做到容器化": "Day 41-44",
}
checked = {
"能用 spaCy 與 jieba 做文本前處理",
"能用 sentence-transformers 做嵌入",
"能用 OpenAI / Ollama 串接 LLM",
"能用 Chroma / pgvector / Qdrant 做向量檢索",
"能用 BM25 + dense 做混合檢索",
"能用 RAGAS 風格指標評估 RAG 系統",
"能用 FastAPI + Streamlit 部署 RAG 服務",
"能把個資法問答系統從資料整備做到容器化",
}
print(f"自我評估:{len(checked)}/{len(checklist)} 條已通過")
unfinished = [k for k in checklist if k not in checked]
print("未通過的條目:")
for u in unfinished:
print(f" - {u}(建議補 {checklist[u]})")
# 輸出(取決於 checked 集合):
# 自我評估:8/15 條已通過
# 未通過的條目:
# - 能用 BERT 微調文本分類(建議補 Day 5, 8)
# ... 等等
讀完 45 天後,可以用這個清單自我檢核。如果每條都能說出具體做法,你就是「可上工的 NLP 工程師」;若有卡住的地方,可以回頭查對應的篇章。
- 能用 spaCy 與 jieba 做中文文本前處理(Day 3、Day 7)。
- 能用 sentence-transformers 把文字轉成向量(Day 4、Day 22)。
- 能用 BERT 微調文本分類(Day 5、Day 8)。
- 能用 OpenAI 與 Ollama 串接 LLM(Day 13、Day 15)。
- 能用 prompt engineering 控制 LLM 輸出格式(Day 14、Day 16)。
- 能用 LoRA 做參數高效微調(Day 17)。
- 能用 BLEU、ROUGE、LLM-as-judge 評估生成品質(Day 19)。
- 能用 Chroma / pgvector / Qdrant 建立向量檢索(Day 23、Day 41)。
- 能用 BM25 + dense 做混合檢索(Day 27、Day 42)。
- 能用 cross-encoder 做 rerank(Day 28、Day 42)。
- 能用 RAGAS 風格指標評估 RAG 系統(Day 29、Day 43)。
- 能用 ReAct 與 function calling 設計 Agent(Day 33)。
- 能用 MCP 與 LangGraph 設計狀態機 Agent(Day 34、Day 38)。
- 能用 FastAPI 與 Streamlit 部署 RAG 服務(Day 40、Day 44)。
- 能把企業知識庫問答系統從資料整備做到容器化部署(Day 41–44)。
這 15 條覆蓋了基礎、LLM、RAG、Agent、部署五個面向,每一條都對應到具體的篇章;如果有 3 條以上答不出來,建議先補課再進入下一步。
常見錯誤與踩雷
錯誤一:學完 45 天覺得自己「都會了」就直接上工。NLP 的實際專案遠比 Day 41–44 複雜:客戶資料的格式可能不是個人資料保護法風格、領域詞彙需要重新標註、prompt 需要反覆調。建議先在小型 demo 證明技術可行,再逐漸擴大範圍。
錯誤二:忽略資料合約與設定檔。許多新手寫完訓練程式就交差,沒有把資料切分、preprocess、threshold 寫成設定檔;當資料變動時整個訓練流程要重寫。Day 41 我們把 manifest 與 project_config.py 寫得很完整,正是要避開這個坑。
錯誤三:用 Python list / dict 當 ML 系統的「資料庫」。Day 44 的服務把產線結果寫進 CSV 是 demo 等級;正式 production 要用 PostgreSQL 或 MongoDB 儲存,且 schema 要固定。建議在 Day 41–44 之上再做一個「資料庫層」設計。
錯誤四:版本混亂。整個系列我們固定 2025 年 3–5 月版本,但工業界常見的踩雷是「同事裝了 2025 年下半年的新版本,結果某些 API 被 deprecate」。建議用 requirements.txt 或 pyproject.toml 鎖版本,或用 Docker image 鎖住整個環境。
錯誤五:忽略可觀察性。服務上線後沒 log、沒 metrics、沒 alert,等於瞎子摸象。Day 44 的服務應該加上 logging 與 metrics(FastAPI 的 prometheus middleware),把每個 request 的 latency、引用正確率、忠實度寫到 Prometheus + Grafana,工業界已把這個當成標準做法。下面這段示範把推論結果寫成 CSV log,供下游 dashboard 繪圖:
# 6. 為部署的服務加上基本的 CSV log,方便日後做長期的品質追蹤
import csv
from datetime import datetime, timezone, timedelta
from pathlib import Path
LOG_PATH = Path("inference_log.csv")
HEADER = ["timestamp", "filename", "label", "citation_precision", "latency_ms"]
def log_request(filename: str, citation_precision: float, latency_ms: float) -> None:
"""記錄每一次推論的指標(沿用 Day 44 的設計)"""
ts = datetime.now(timezone(timedelta(hours=8))).isoformat()
with LOG_PATH.open("a", newline="", encoding="utf-8") as f:
csv.DictWriter(f, fieldnames=HEADER).writerow({
"timestamp": ts,
"filename": filename[:50],
"label": "ok",
"citation_precision": round(citation_precision, 4),
"latency_ms": round(latency_ms, 1),
})
if not LOG_PATH.exists():
with LOG_PATH.open("w", encoding="utf-8") as f:
f.write(",".join(HEADER) + "\n")
log_request("個資法查詢 001", citation_precision=0.95, latency_ms=2150)
print(f"已寫入 inference_log.csv,目前 {LOG_PATH.stat().st_size} bytes")
# 輸出範例(每次會 append 一筆):
# 已寫入 inference_log.csv,目前 132 bytes
效能與實務提醒
45 天學完後,最常見的時間分配建議:30% 寫程式、30% 讀論文、20% 看教學影片、20% 做 side project。寫程式是基本功、讀論文吸收前沿、看影片理解思路、做 side project 整合應用。對應到本系列,Day 5、Day 17、Day 42 的程式碼可以作為 side project 起點;Day 25、Day 30 的 RAG 章節是寫論文的標準引用來源。
另外一個工程上的提醒:學完 45 天不等於你能獨立解所有 NLP 問題,但你有足夠基礎去讀論文、debug 模型、與其他工程師合作。每週投入 8–10 小時、3 個月就能從這個基礎走到「可獨立負責小型 NLP 專案」的程度;6 個月走到「可主導中型專案」。
最後,NLP 是 AI 中「文字應用」的主力,從客服機器人、文件摘要、合規審查、知識管理到寫作助理、搜尋引擎、內容審核,每個產業都有需求。把這系列學到的工具組合起來,你應該能在 3 個月內做出第一個 demo,並在 6 個月內拓展到正式產品。
小結
今天把 45 天的學習路徑整理成一張地圖:七個階段從導論、基礎、分類、LLM 與微調、檢索與 RAG、Agent、框架與部署、到專案;四個貫穿主題——資料、指標、訓練/推論權衡、錯誤分析;五個常見職涯方向;六個延伸學習方向;以及 15 條自我評估清單。我們的目標不是讓你「會訓練最先進的模型」,而是讓你「能獨立完成一個能 demo、能部署、能解釋的 LLM 應用專案」。這 45 天結束了,但 NLP 學習的路還很長;希望這篇能讓你有一張帶得走的地圖,在未來遇到問題時知道該回頭查哪一篇。
結語
今天是整個系列的最後一篇。回頭看這 45 天,我們從 Day 1 的環境設定出發,走過分類(Day 5–12)、LLM(Day 13–21)、RAG(Day 22–32)、Agent(Day 33–37)、框架與部署(Day 38–40),最後在 Day 41–44 把所有工具組合成一個可在 CPU 上跑的企業知識庫問答系統,並在 Day 42 的檢索實驗中比較三組策略、在 Day 43 的評估中發現「引用正確率」是企業最在意的指標、在 Day 44 的部署中用 ONNX + FastAPI + Streamlit 把服務化完成。這整個過程是一個完整的「資料 → 模型 → 評估 → 部署」閉環,是工業界最基本也最重要的四步。
最值得帶走的觀念有三個:第一,「資料永遠比模型重要」——一個好的資料流程帶來的提升,往往比換模型還多;第二,「指標必須對應業務問題」——單看 AUROC 或 recall@4 容易誤導,必須搭配錯誤案例視覺化與 LLM-as-judge 一起看;第三,「永遠準備好 retrain」——上線後的服務要有批次再訓練的機制,這是工業界常見的閉環,也是 Day 39 的成本武器可以延伸應用的場景。這三個觀念不只適用於 Day 41–44 的企業知識庫,也適用於整個 NLP 領域的任何任務。
系列完結,但學習沒有終點。希望這個系列能幫助你走進 NLP 與 LLM 應用領域,並在客服、文件、法務、醫療、金融等場景中看到「學會的工具可以用在哪裡」。祝你在後續的學習中,找到自己有興趣的方向、做出有影響力的 LLM 應用專案。如果有任何回饋或問題,請透過部落格的聯絡頁找到我。再見。
延伸資源
- Hugging Face Transformers 官方文件(4.49–4.51,2025):https://huggingface.co/docs/transformers/v4.49.0/en/index,預訓練模型、tokenizer、Trainer 的標準 API。
- LangChain 官方教學(0.3.x,2025):https://python.langchain.com/docs/introduction/,RAG、Agent、工具呼叫的標準範例。
- LangGraph 官方文件(0.2.x,2025):https://langchain-ai.github.io/langgraph/,狀態機 Agent 的標準設計模式。
- RAGAS 評估框架(0.2 世代,2025):
https://docs.ragas.io/,忠實度、相關性、引用正確性的標準評估指標。 - Chroma 官方文件(0.6.x,2025):
https://docs.trychroma.com/,向量資料庫的標準介面。 - FastAPI 官方教學(0.115.x,2024):https://fastapi.tiangolo.com/zh-tw/tutorial/,HTTP 服務、async、Pydantic、依賴注入的標準範例。
- Streamlit 官方文件(1.41.x,2025):https://docs.streamlit.io/,ML Demo UI 的快速搭建工具。
- Ollama 官方網站(0.7.x,2025-01):https://ollama.com/,本地模型執行環境;phi3:mini、qwen2.5:7b、llama3.3 等開源模型。
- 全國法規資料庫(法務部,政府資料開放授權條款—第 1 版):https://law.moj.gov.tw/,個資法與施行細則的官方網址。
- 《Natural Language Processing with Transformers》專書(2024):Lewis Tunstall, Leandro von Werra, Thomas Wolf,從 transformer 基礎到部署的完整指南。
- Stanford CS324 大型語言模型課:
https://stanford-cs324.github.io/,LLM 基礎理論的經典教材。 - arXiv cs.CL 每日清單:
https://arxiv.org/list/cs.CL/recent,最新 NLP 與 LLM 論文的 RSS feed。
留言
張貼留言