CHAPTER 16 / AI & ML

Python & AI:
做出自己的 AI 產品

全端最值錢的能力:把 AI 包進你的網站。這章從 Python 基礎開始, 走完 numpy / pandas / 機器學習 / PyTorch 深度學習,最後串 OpenAI 和 Claude API 做出真正的 AI 產品。學完你能自己寫 RAG、做 chatbot、訓練分類模型。

  • 看得懂、寫得出 Python(資料科學的官方語言)
  • 會用 numpy / pandas 處理資料
  • 會做機器學習:分類、回歸、訓練、評估
  • 會用 PyTorch 訓練深度學習模型
  • 會串 OpenAI / Claude / Gemini API
  • 會做 RAG(讓 AI 讀你的資料回答問題)
  • 能把 AI 產品上架賣錢
LESSON 16.1

為什麼是 Python?

因為所有 AI / ML 的工具都用 Python 寫。PyTorch、TensorFlow、Hugging Face、OpenAI SDK、LangChain、scikit-learn — 全部 Python first。

不是 Python 比 JS 強,是 AI 圈用 Python 太久了,生態系全在這邊。你要做 AI 就得會。

JS 是會議室語言(網站上線前的所有事),Python 是實驗室語言(研究、訓練、資料分析)。全端工程師兩個都要懂一點。

環境裝起來

# macOS / Linux
brew install python@3.12

# 用 uv(比 pip 快 100 倍的新工具,2024 火起來)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 開個專案
uv init my-ai-app
cd my-ai-app
uv add numpy pandas torch openai anthropic
✨ 接案小技巧

2025 年起 uv 已經是新標準,比 pip + venv 快又乾淨。直接學 uv,省下你以後跟 Python 環境奮戰的所有時間。

LESSON 16.2

Python 速通:JS 工程師看 30 分鐘

你會 JS 了,Python 只是換個語法。

# 變數:沒有 let / const,直接寫
name = "Luffysky"
age = 25

# 字串:f-string(像 JS 的 template literal)
greeting = f"Hello {name}, you are {age}"

# List = JS 的 array
fruits = ["apple", "banana"]
fruits.append("cherry")

# Dict = JS 的 object
user = {"name": "Yuki", "age": 20}

# 函式
def greet(name: str) -> str:
    return f"Hi {name}"

# If / for(用縮排,沒有 {})
for fruit in fruits:
    if len(fruit) > 5:
        print(fruit)

# List comprehension(超強,JS 沒有)
upper_fruits = [f.upper() for f in fruits if len(f) > 5]

類別

class Cat:
    def __init__(self, name: str):
        self.name = name

    def meow(self):
        print(f"{self.name} says meow")

cat = Cat("凜空")
cat.meow()
LESSON 16.3

numpy & pandas:資料科學雙神器

numpy:高速數學運算,所有 ML 函式庫底層都是它。pandas:表格資料處理(像 Excel + SQL)。

import numpy as np
import pandas as pd

# numpy 陣列:比 Python list 快 100 倍
arr = np.array([1, 2, 3, 4])
print(arr * 2)        # [2, 4, 6, 8]
print(arr.mean())     # 2.5

# 矩陣(神經網路就是一堆矩陣相乘)
m = np.array([[1, 2], [3, 4]])
print(m @ m)         # 矩陣乘法

# pandas 讀 CSV
df = pd.read_csv("sales.csv")
print(df.head())       # 前 5 筆
print(df.describe())   # 統計摘要

# 篩選 + 分組(像 SQL)
result = df[df["price"] > 100].groupby("category")["price"].sum()
✨ 接案小技巧

很多接案需求是「幫我分析這個 Excel」,pandas 一行 pd.read_excel() 就讀進來,後續 SQL 邏輯全部一行解決。客戶看到你 5 分鐘做完他一週的工作會傻眼。

LESSON 16.4

機器學習:用 scikit-learn 做分類器

機器學習 = 給一堆「輸入 → 答案」,讓電腦自己找規律。例如:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# 1. 載入資料(鳶尾花分類經典資料集)
iris = load_iris()
X, y = iris.data, iris.target

# 2. 分訓練 / 測試(80% / 20%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 3. 訓練模型
model = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)

# 4. 預測 + 評估
preds = model.predict(X_test)
print(f"準確率:{accuracy_score(y_test, preds):.2%}")
# 通常 95% 以上

就這樣,30 行 code 你已經做了一個機器學習模型。重點不是寫 code,是懂流程

  1. 準備資料(最花時間,80% 工作在這)
  2. 切訓練/測試
  3. 選模型
  4. 訓練
  5. 評估
  6. 調參數重來
LESSON 16.5

深度學習:PyTorch 的世界

機器學習 vs 深度學習的差別:

PyTorch 是現在主流框架(Meta 出的,2024 年起完全打贏 TensorFlow)。

import torch
import torch.nn as nn

# 一個最簡單的神經網路(分類器)
class Net(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc1 = nn.Linear(784, 128)  # 輸入 784,隱藏層 128
        self.fc2 = nn.Linear(128, 10)   # 輸出 10 類

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

model = Net()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
loss_fn = nn.CrossEntropyLoss()

# 訓練迴圈(核心邏輯)
for epoch in range(10):
    for X, y in dataloader:
        pred = model(X)
        loss = loss_fn(pred, y)
        optimizer.zero_grad()
        loss.backward()       # 反向傳播
        optimizer.step()        # 更新權重

訓練 = 學生考試 → 對答案 → 看錯哪邊 → 調整 → 再考一次。重複到考好為止。

🚀 進階技巧

2026 年不要從零訓練模型,用 Hugging Face 的 pre-trained 模型 fine-tune。例如要做中文情緒分析,下載 BERT-base-chinese 加一層分類器,fine-tune 30 分鐘準確率 95%。

LESSON 16.6

串 OpenAI / Claude API:5 分鐘做 AI 產品

現實是 — 自己訓練 LLM 要 GPU 集群燒幾百萬美金。正確做法是串 API

from openai import OpenAI

client = OpenAI(api_key="sk-...")  # 從環境變數讀

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "你是熱心的客服"},
        {"role": "user", "content": "我想退貨"}
    ]
)
print(response.choices[0].message.content)

Anthropic Claude(思考力強,工程任務首選):

from anthropic import Anthropic

client = Anthropic()  # 自動讀 ANTHROPIC_API_KEY

msg = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "幫我寫一首關於招財的詩"}
    ]
)
print(msg.content[0].text)

選哪個 API?

場景推薦原因
創意寫作Claude文筆最好
程式輔助Claude架構思維強
大量便宜呼叫Gemini Flash / GPT-4o-mini夠便宜
多模態(圖片)GPT-4o / Gemini視覺好
本地部署Ollama + Llama / Qwen免費,但要 GPU
⚠ 踩雷警告

API key 絕不可以放前端 JS!不然爬蟲一看就偷走。永遠從你的後端代呼叫,前端只接觸你的 API。

LESSON 16.7

RAG:讓 AI 讀你的資料

使用者問「我們公司的退貨政策是什麼?」— GPT 不知道,你內部文件才有。RAG(Retrieval-Augmented Generation)就是:

  1. 把文件切塊,每塊轉成 embedding(向量)
  2. 存到向量資料庫
  3. 使用者問問題時,把問題也轉 embedding,找最相似的幾塊文件
  4. 把那幾塊塞進 prompt 給 LLM 回答
from openai import OpenAI
import numpy as np

client = OpenAI()

# 1. 把文件變成向量
def embed(text: str):
    r = client.embeddings.create(
        model="text-embedding-3-small",
        input=text
    )
    return np.array(r.data[0].embedding)

docs = [
    "退貨政策:7 天內可退",
    "運費:滿 1000 免運",
    "發票:購買後 3 天內寄出",
]
doc_vecs = [embed(d) for d in docs]

# 2. 使用者問問題,找最相似
def ask(question: str):
    q_vec = embed(question)
    sims = [np.dot(q_vec, dv) for dv in doc_vecs]
    best = docs[np.argmax(sims)]

    # 3. 塞進 prompt
    r = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{
            "role": "user",
            "content": f"根據資料:{best}\n\n問題:{question}"
        }]
    )
    return r.choices[0].message.content

print(ask("我可以退貨嗎"))

實戰用 PineconeWeaviateChroma 或 Postgres 的 pgvector

LESSON 16.8

把 AI 包成 Web App:FastAPI 上線

把上面的 RAG 包成 API,前端就能用:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Question(BaseModel):
    text: str

@app.post("/ask")
async def ask_endpoint(q: Question):
    answer = ask(q.text)
    return {"answer": answer}

# 跑:uvicorn main:app --reload
# 部署:Zeabur / Railway 一鍵

前端 React 那邊:

async function ask(text) {
  const r = await fetch('/api/ask', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ text })
  });
  return (await r.json()).answer;
}
LESSON 16.9

AI 產品的賺錢模式

學會了之後該做什麼?這幾個方向 2026 年都還在賺錢:

🚀 進階技巧

不要做「ChatGPT wrapper」——使用者直接用 ChatGPT 就好。要做「ChatGPT 做不到的事」:你公司獨家資料 + AI、特殊工作流、整合特定工具。差異化才有價值。

🔨 動手練習:做你自己的 AI 客服

  1. 準備一個假公司的 FAQ(10 條),存成 faq.json
  2. 用 OpenAI embedding API 算每條的向量
  3. 用 FastAPI 開一個 /ask endpoint,接受問題回答
  4. 用 Next.js 寫一個簡單聊天介面串它
  5. 部署到 Zeabur,丟給朋友測
  6. 進階:把對話歷史存 Supabase,做 session 記憶

常見卡關 FAQ

Q1. 學 AI 一定要會數學?

做應用不用,串 API 連微積分都用不到。要做研究員 / 訓練自己模型才需要線性代數、機率、微積分。先做應用賺錢,有興趣再補。

Q2. 我電腦沒 GPU 能學深度學習?

能。Google Colab 免費送 T4 GPU,Kaggle 也送。訓練小模型完全夠。要訓練大模型才需要租 RunPod / Lambda(每小時幾美金)。

Q3. OpenAI 跟 Claude 我該學哪個?

都學。API 介面 90% 一樣,多串幾個你產品才有議價權(哪個便宜用哪個)。實務上很多產品同時用 GPT-4o + Claude + Gemini,根據任務 routing。

Q4. RAG vs Fine-tuning 怎麼選?

RAG:資料常更新、要答得有依據(醫療、法律)。Fine-tuning:要學特定風格、減少 prompt 長度。9 成情況選 RAG,工程簡單成本低。

Q5. AI 產品要怎麼省 token 錢?

(1) 短的用便宜模型(gpt-4o-mini、Haiku)。(2) 開 prompt caching(Anthropic 重複 prompt 90% 折扣)。(3) 自己快取常見問題答案。(4) 流量大用 batch API(半價)。

← 上一章
16 App