用 Colab 免費弄一個自己的 AI 程式碼助手
想用 AI 寫程式,但 GPU 好貴、又怕商業公司偷看你公司的機密原始碼?來,這招免費的折衷方案學起來。
為什麼要大費周章自架語言模型?¶
現在寫程式沒用 AI 簡直像斷了一隻手。雖然 Claude、GPT-4 那些商業模型很強,但它們有一個共同的硬傷:你的程式碼通通得送去別人的伺服器,主控權都在大企業手上。
如果你在做公司的內部系統、處理含有敏感邏輯的專案,或者單純不想把心血送給大公司當訓練資料,自架開源模型就是唯一的出路。
自己架模型有三大爽點:
- 隱私點滿:原始碼絕不離開你的掌控。
- 錢包解脫:不用在那邊算這個月用了多少 Token、噴了多少美金。
- 自由度高:以後想怎麼微調、魔改都隨你便。
現實很骨感:沒錢買 GPU 怎麼辦?¶
自架模型最大的障礙就是硬體。
現在隨便一張 NVIDIA RTX 4090 都要五萬多台幣,而且如果你想跑個稍微聰明一點的模型,可能也只是剛好夠用而已。去租雲端 GPU?每個月帳單看下來也是會心痛。
如果只是偶爾寫寫個人專案、想測試一下,這筆錢真的砸不下去。
救星來了:Google Colab 免費的 T4 GPU¶
還好 Google 有開佛心車。Colab 的免費版有提供 T4 GPU(16GB 顯存),雖然閒置太久會把你踢掉,但對輕量使用者來說,已經足夠了。
我們先來看一張現實殘酷的對比表:
| 方案 | 費用 | 拿到的硬體 | 適合誰? |
|---|---|---|---|
| 硬刷一張顯卡 | 5 萬+ 噴飛 | RTX 4090 | 狂熱重度玩家 |
| 雲端課金租用 | 每月 ~$50 美金 | A100 等級 | 企業 / 算力富豪 |
| Google Colab 免費 | $0 元免錢 | T4 16GB | 輕量 實驗性質 |
| Colab Pro 訂閱 | 每月 ~$10.49 美金 | A100 / High-RAM | 嫌 DRAM 一直炸掉的人 |
當然,免費的代價就是:
- 太久沒動它會自動斷線。
- 每次重啟都要重新載入模型(除非你把模型掛載到 Google Drive 裡)。
- 絕對不適合拿來當 24 小時不中斷的正式服務。
但如果只是「自己寫程式時偶爾開來用」,這還是很不錯。
來挑大腦:Google 的開源 Gemma 系列¶
Gemma 是 Google 釋出的開源模型,簡單來說就是 Gemini 的親弟弟。
它的版本長這樣:¶
| 模型名稱 | 參數量 | 實測硬體心得 |
|---|---|---|
| gemma-2-2b-it | 20 億 | 極度輕量,免費版 T4 可以閉著眼睛輕鬆跑。 |
| gemma-2-9b-it | 90 億 | 智商在線的黃金版本。但如果你用免費版 Colab,12GB DRAM 可能會炸掉,建議搭配 4-bit 量化。 |
| gemma-2-27b-it | 270 億 | 智商最高,但免費 T4 吃不下,必須升級 Pro 方案開 A100。 |
💡 冷知識:模型名稱後面帶有
-it的,代表 Instruction-Tuned(指令微調版)。這才是已經調教好、聽得懂人話能跟你對話的版本。千萬別選到base版,那是只會玩純文字接龍的笨蛋。
今天這篇教學,我們先拿最輕量、最不會翻車的 gemma-2-2b-it 來當入門示範。
開工實作:在 Colab 架設你的專屬 API 伺服器¶
整個系統是這樣運作的:¶
你的本機 Windows (OpenCode)
↕ 透過 HTTPS 傳輸
ngrok 幫你穿透內網的公開網址
↕
Colab 幫你頂著的 FastAPI 伺服器
↕
正在 T4 GPU 裡瘋狂運算的神經網路 (Gemma)
本機的寫程式助手(OpenCode)會透過 ngrok 給的臨時網址,連線到雲端的 Colab。Colab 上的 FastAPI 會當中間人,把任務丟給 Gemma 算完後再傳回來。
步驟一:把該裝的套件一腳踹進去¶
在 Colab 裡開一個新筆記本,複製這段程式碼並執行:
!pip install fastapi uvicorn pyngrok nest_asyncio transformers accelerate bitsandbytes
步驟二:把 Gemma 載入進來(記得開 4-bit 量化防炸)¶
這裡我們要設定 model_id = "google/gemma-2-2b-it"(注意二代沒有 7B,別打錯了)。
為了防止顯示記憶體(VRAM)和系統記憶體(DRAM)集體罷工,我們直接祭出 bitsandbytes 的 4-bit 量化大法,把模型狠狠壓縮。
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
import torch
# 正確的二代小模型 ID
model_id = "google/gemma-2-2b-it"
# 4-bit 量化設定:不開這個硬體很容易炸掉
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.float16,
)
# 記得先去 Hugging Face 勾選同意 Gemma 的使用條款,並把你的 HF_TOKEN 填進來
HF_TOKEN = "你的_HUGGING_FACE_TOKEN"
tokenizer = AutoTokenizer.from_pretrained(model_id, token=HF_TOKEN)
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="auto",
quantization_config=bnb_config,
token=HF_TOKEN
)
步驟三:用 FastAPI 搓一個 OpenAI 規格的接口¶
為什麼要用 OpenAI 的格式?因為外面九成九的 AI 插件(像是 VS Code 插件、或我們今天要用的 OpenCode)都只認得 OpenAI 的 API 格式。我們在 Colab 裡偽裝一個,就能直接無縫串接。
from fastapi import FastAPI, Response
from pydantic import BaseModel
from typing import List, Optional, Any
import json, asyncio
app = FastAPI()
class Message(BaseModel):
role: str
content: Optional[str] = None
class CompletionRequest(BaseModel):
model: str = "gemma-2-2b-it"
messages: List[Message]
stream: bool = False
def generate_response(messages: list) -> str:
# 抓最後那條 user 說的話
prompt = messages[-1]["content"]
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model.generate(**inputs, max_new_tokens=512)
new_tokens = outputs[0][inputs.input_ids.shape[1]:]
return tokenizer.decode(new_tokens, skip_special_tokens=True).strip()
@app.get("/v1/models")
def list_models():
return {
"object": "list",
"data": [{"id": "gemma-2-2b-it", "object": "model", "owned_by": "google"}]
}
@app.post("/v1/chat/completions")
async def chat_completions(request: CompletionRequest):
messages = [m.dict(exclude_none=True) for m in request.messages]
loop = asyncio.get_event_loop()
reply = await loop.run_in_executor(None, generate_response, messages)
message = {"role": "assistant", "content": reply}
# 簡單模擬一下 Stream 串流輸出,騙過前端插件
if request.stream:
sse = f"data: {json.dumps({'id':'chatcmpl-1','object':'chat.completion.chunk','model':request.model,'choices':[{'index':0,'delta':message,'finish_reason':None}]})}\n\n"
sse += f"data: {json.dumps({'id':'chatcmpl-1','object':'chat.completion.chunk','model':request.model,'choices':[{'index':0,'delta':{},'finish_reason':'stop'}]})}\n\n"
sse += "data: [DONE]\n\n"
return Response(content=sse, media_type="text/event-stream")
return {
"id": "chatcmpl-1",
"object": "chat.completion",
"model": request.model,
"choices": [{"index": 0, "message": message, "finish_reason": "stop"}]
}
步驟四:用 ngrok 打通任督二脈,把網址打開¶
因為 Colab 躲在 Google 的內網裡,我們本機的電腦連不進去。這時候就要請出 ngrok 這個內網穿透神器,幫我們產出一個公開網址。
from pyngrok import ngrok
import uvicorn, threading, nest_asyncio
nest_asyncio.apply()
# 去 ngrok 官網註冊一個免費帳號就能拿到 Token
ngrok.set_auth_token("你的_NGROK_TOKEN")
public_url = ngrok.connect(8000)
print(f"🔗 你的專屬 API 網址:{public_url.public_url}")
def run_server():
uvicorn.run(app, host="0.0.0.0", port=8000)
threading.Thread(target=run_server, daemon=True).start()
跑完之後,你會在畫面上看到一行超酷的網址:
🔗 你的專屬 API 網址:[https://xxxx-xxxx.ngrok-free.app](https://xxxx-xxxx.ngrok-free.app)
把它複製起來,等一下本機設定會用到。
本機串接:讓 OpenCode 與雲端大腦連線¶
OpenCode 是一個免費開源的終端機 AI 助手,你可以把它想像成不收錢的 Claude Code,而且可以讓你自由換腦。
1. 本機安裝 OpenCode¶
打開你電腦的終端機(CMD 或 Terminal),輸入指令:
npm install -g opencode-ai
2. 修改設定檔¶
找到你的設定檔 ~/.config/opencode/opencode.jsonc(Windows 在 C:\Users\你的使用者名稱\.config\opencode\opencode.jsonc),把內容改成下面這樣:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"gemma": {
"api": "openai",
"options": {
"baseURL": "https://你的ngrok網址/v1", // ⚠️ 後面一定要記得加 /v1,不然會迷路!
"apiKey": "dummy" // 隨便亂填沒關係,因為我們沒設密碼
},
"models": {
"gemma-2-2b-it": {
"id": "gemma-2-2b-it",
"limit": {
"context": 8192,
"output": 1024
}
}
}
}
},
"model": "gemma/gemma-2-2b-it"
}
驗收時間:啟動!¶
在本機終端機直接輸入:
opencode
這時候你就可以開始跟它對話了。輸入一個 what can you do?,如果看到終端機吐出 Gemma 的回應,恭喜你成功架好一個完全屬於你的私有 AI 助手了!
老實說:這個方案有哪些硬傷?¶
爽完之後還是要面對現實。目前這個「完全免費」的版本有幾個地方比較憋腳:
- 2B 模型智商有限:
Gemma 2-2b雖然跑得快,但處理太複雜的扣(Code)或邏輯時,常常會開始胡言亂語。 - 沒有手腳(工具呼叫):它沒辦法直接去讀取或修改你電腦裡的檔案,只能在終端機裡用「講」的,你得自己複製貼上。
- 推理速度可能比較慢:免費的 T4 GPU 加上 4-bit 量化,速度大概比你付費開 OpenAI 慢了 3 到 5 倍。
💡 下一步該怎麼走?¶
如果你受夠了 2B 模型的金魚腦,想要換一個會自己去讀檔案、幫你改 Bug、智商高出好幾倍的真正助手,那可以嘗試把模型換成阿里開源的 Qwen2.5-Coder-7B-Instruct。
不過,如果要換成 7B 甚至 9B 的模型,我們可能就要考慮去訂閱那個每個月 10.49 美金的 Colab Pro 方案,把「High-RAM」模式打開,不然你的 DRAM 絕對會天天炸給你看。
至於怎麼升級到 Qwen2.5-Coder、讓 AI 真正動手幫你改檔案?我們之後再來聊!
Comments
Loading comments…
Leave a Comment