經過了前面五天的觀念洗禮與藍圖建構,終於要正式進入實作。在把 n8n 裝起來、把 Gemini API 串上去之前,我們要先來打造我們專屬的後端服務:FastAPI。
既然 n8n 裡面有 HTTP Request 節點,也有可以直接呼叫 OpenAI 或 Gemini 的節點,那我為什麼不直接讓 n8n 去抓網頁,然後把抓下來的整坨 HTML 直接丟給 AI 就好?為什麼還要大費周章在中間夾一個自己寫的 FastAPI?如果直接把廣告彈出視窗的原始 HTML,或是排版破碎的 PDF ,諸如此類的東西直接丟給語言模型,會耗大量的 Token,還容易超出 Context Window 的上限。再加上雜訊太多,AI 抓錯重點的機率會大幅提升。因此,我們需要在資料進入 LLM 之前,先把它們處理乾淨。而 FastAPI 在這個系統裡就是扮演這個角色。
建置環境
可以透過 Conda 或 uv 來建立一個乾淨的 Python 環境,避免與電腦裡其他專案的套件打架。這裡使用 Conda
# 建立一個虛擬環境,指定 Python 3.10, <environment> 代換為自己取的環境名稱
conda create -n <environment> python=3.10 -y
# 啟動虛擬環境
conda activate <environment>
在啟動虛擬環境後安裝套件
pip install fastapi uvicorn pydantic
在你的專案資料夾下,建立一個 python 檔案,並寫入以下程式碼。我們今天先不接 Gemini,單純模擬文字處理的介面:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class TextRequest(BaseModel):
text: str
@app.get("/health")
def health():
return {"status": "ok"}
@app.post("/summarize")
def summarize(data: TextRequest):
return {
"received_text": data.text,
"message": "FastAPI received the data successfully"
}
接下來啟動伺服器
uvicorn main:app --reload
看到 Application startup complete. 就代表成功了!可以打開瀏覽器前往測試。我們目前做的都是在本地端,確定本地端可以使用後可以再視需求看要不要讓服務上線。