📌 本文重點
- 一個 OpenAI 風格
/v1入口接 34 家免費 LLM- 改
baseURL即可把現有專案切到免費模型- 內建智慧路由、故障切換與 API key 加密
- 特別適合 side project、AB test 與教學場景
用 freellmapi,你可以用一個 OpenAI 風格的 /v1 API,一次接上 34 家免費 LLM 供應商、635 個模型端點,還幫你自動路由、故障切換與加密 API key。
核心功能:為什麼值得多看一眼?
1. 統一 OpenAI 風格 API,一行替換
freellmapi 把所有免費 LLM 都包成一個 OpenAI 相容的 /v1 入口,你原本用 OpenAI 的程式碼,只要改「base URL」就能直接跑:
- 不需要逐家閱讀文件(OpenAI、DeepSeek、Groq…)
- 不需要改 SDK,只動環境變數或初始化設定
行動建議:
先想一個你現在在用的 OpenAI 小專案(chatbot、摘要、工具人腳本),等等在「實作教學」小節,直接照著把它改接 freellmapi 當後端。
💡 關鍵: 只改
baseURL就能讓既有 OpenAI 專案直接跑在 34 家免費 LLM 上,幾乎零改動成本。
2. 智慧路由與自動故障切換
freellmapi 會在後端幫你:「這次要用哪個免費模型?」
- 以你設定的「模型白名單」與「路由策略」挑選模型
- 若某個供應商 rate limit 或掛掉,自動換下一個
- 同一個「邏輯模型名」可以對應多個實際端點
效果:你把請求打到 model: "gpt-4-free" 這種自訂名字,背後實際可能是不同家的 GPT-4 等級替代品,但你的應用程式不用改任何邏輯。
行動建議:
在自己的 side project 裡,把「重要的核心功能」放到多個模型輪詢(多條路),就算其中一條限流,你的服務還是能繼續回應。
3. API key 加密保護
freellmapi 需要你提供各家免費 LLM 的 API key,它會:
- 在本機或伺服器端加密儲存 key
- 只在轉發請求時解密使用
好處是:
- 你可以在團隊裡共用一個 freellmapi 服務,而不用把各家 key 散落在每個人電腦
- 教學/工作坊環境,學員只要打到你架好的 freellmapi,不用自己申請一堆 key
行動建議:
如果你常在 Meetup / 企業內訓帶 AI workshop,可以先在自己的 VPS 架一個 freellmapi,把所有免費 LLM key 放裡面,課上只給一個 endpoint 給學員使用。
💡 關鍵: 把多家 API key 集中加密管理在 freellmapi 上,可以兼顧團隊共享、教學便利與安全性。
適合誰用?三種典型場景
1. 個人 side project:免成本把服務「先上線」
情境:你想做一個小產品(例如:履歷優化、腳本生成工具),但不確定會不會有人用,不想一開始就綁 OpenAI 月費或高額 token 費用。
freellmapi 可以:
- 把所有請求先跑在免費 LLM 上,把成本壓到接近 0
- 等服務有流量、驗證需求後,再考慮導回 OpenAI 或付費模型
可以立刻做的事:
- 按照後面「怎麼開始」部署 freellmapi
- 把你的 side project
OPENAI_BASE_URL改成 freellmapi - 設一個環境變數
LLM_ENV=free,未來要切回付費,只要改環境
💡 關鍵: 先用免費 LLM 驗證產品市場,等真的有流量再切回付費模型,可以大幅壓低前期開發成本。
2. 替代/補充 OpenAI:做多模型 AB test
情境:你想比較「不同模型在同一個任務上的表現」,例如:
- 哪個模型對客服問答最穩定?
- 哪個模型摘要長文比較不亂砍重點?
用 freellmapi,你可以:
- 在設定裡定義一組「候選模型」
- 讓應用程式隨機或輪詢分配模型,收集回應
- 做 AB / ABC test,再決定要長期用誰
可以立刻做的事:
在後面「多模型回答比較小工具」段落,照範例做一個簡單的「輸入同一個 prompt,拉出多模型回答」的 internal tool,幫你更快做選擇。
3. 教學/工作坊:一個 endpoint 全班共用
情境:你要開一門「用 API 串 LLM」的課:
- 如果叫學生各自申請 OpenAI / 各家帳號,流程會拖很久
- 如果用單一共享 key,很容易被濫用或不小心外流
freellmapi 做法:
- 你在雲端部署一個 freellmapi
- 學員只要在程式裡填一個
BASE_URL+ 你發的一組 class token - 你的伺服器決定實際用哪些免費模型、怎麼路由
可以立刻做的事:
下一期課程,試著在教案裡只給一份「freellmapi endpoint + 例子程式碼」,把重點放在「怎麼設計 prompt、怎麼串接應用」,而不是每家註冊流程。
怎麼開始:從部署到改程式,一次走完
1. 安裝與部署(本機 / 雲端)
先到 GitHub 下載專案:
git clone https://github.com/tashfeenahmed/freellmapi.git
cd freellmapi
freellmapi 是用 TypeScript / Node.js 寫的,你需要:
- Node.js(建議 18+)
- pnpm 或 npm / yarn
安裝依賴與啟動(以 pnpm 為例):
pnpm install
pnpm build
pnpm start
# 預設會在 http://localhost:3000(實際以 repo 說明為主)
如果要丟到雲端:
- 可直接丟到 Render、Railway、Fly.io 等支援 Node 的平台
- 把
PORT設成平台給你的 port,HOST設 0.0.0.0
行動建議:
先在本機跑起來,用 curl 測一下:
curl http://localhost:3000/health
# 若回應 OK 類訊息,代表 freellmapi 正常啟動
2. 把原本用 OpenAI SDK 的程式改指向 freellmapi
freellmapi 是 OpenAI 相容 API,重點只有兩件事:
- 改
baseURL指向 freellmapi apiKey用 freellmapi 的 key(或你設定的任意字串),模型名按照 freellmapi 支援的命名
Node.js 範例(原本用 OpenAI)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
const resp = await client.chat.completions.create({
model: "gpt-4o-mini",
messages: [{ role: "user", content: "幫我寫一段產品介紹" }],
});
console.log(resp.choices[0].message.content);
改成指向 freellmapi
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.FREELLMAPI_KEY || "test-key", // freellmapi 端驗證用
baseURL: process.env.FREELLMAPI_BASE_URL || "http://localhost:3000/v1",
});
const resp = await client.chat.completions.create({
model: "gpt4-free-mix", // 你在 freellmapi 裡定義的邏輯模型名
messages: [{ role: "user", content: "幫我寫一段產品介紹" }],
});
console.log(resp.choices[0].message.content);
行動建議:
直接把你現有專案的 baseURL 抽成環境變數,方便之後一鍵切回 OpenAI:
# .env
LLM_BASE_URL=http://localhost:3000/v1
LLM_API_KEY=test-key
Python 範例(原本用 OpenAI)
from openai import OpenAI
import os
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "用一句話介紹台北"}],
)
print(resp.choices[0].message.content)
改成指向 freellmapi
from openai import OpenAI
import os
client = OpenAI(
api_key=os.getenv("FREELLMAPI_KEY", "test-key"),
base_url=os.getenv("FREELLMAPI_BASE_URL", "http://localhost:3000/v1"),
)
resp = client.chat.completions.create(
model="city-intro-free",
messages=[{"role": "user", "content": "用一句話介紹台北"}],
)
print(resp.choices[0].message.content)
3. 設定路由策略與模型白名單(概念版)
實際設定檔請以 repo 中的說明為主,這裡用一個簡化的概念例子:
// models.config.json
{
"logicalModels": {
"gpt4-free-mix": {
"strategy": "round_robin",
"providers": [
{ "name": "providerA", "model": "gpt-4-alt-1" },
{ "name": "providerB", "model": "gpt-4-alt-2" }
]
},
"city-intro-free": {
"strategy": "fallback",
"providers": [
{ "name": "providerC", "model": "fast-lite" },
{ "name": "providerD", "model": "backup-lite" }
]
}
}
}
round_robin:多模型輪詢,適合平均分流、做 AB testfallback:按順序嘗試,失敗才換下一個,適合有「主力模型」的情境
行動建議:
先定義 1 個你常用任務(例如:客服回覆),設 2–3 個候選模型,用 round_robin 跑一週,看看哪個回覆風格最適合,再把不適合的從白名單移除。
多模型回答比較:做一個小內部工具
這是一個「輸入同一個 prompt,並行打多個模型,最後把回答排在一起比」的簡單例子(Node,使用同一個 freellmapi endpoint):
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "test-key",
baseURL: "http://localhost:3000/v1",
});
const models = ["gpt4-free-mix", "city-intro-free", "long-doc-free"];
async function compareModels(prompt: string) {
const tasks = models.map(async (model) => {
const resp = await client.chat.completions.create({
model,
messages: [{ role: "user", content: prompt }],
});
return {
model,
answer: resp.choices[0].message.content,
};
});
const results = await Promise.all(tasks);
for (const r of results) {
console.log("=====", r.model, "=====");
console.log(r.answer);
console.log();
}
}
compareModels("請用三點條列說明:使用 freellmapi 的優點");
你可以把這段包成一個簡單的 CLI 或小網頁,讓團隊成員在設計 prompt 或選模型時,有一個快速對照的工具。
小結:把 freellmapi 當成「免費 LLM 門面」
使用策略可以簡單記:
- 開發期:全部走 freellmapi,專心做產品與實驗
- 上線後:把關鍵路徑逐步切到穩定的付費模型,freellmapi 當備援或 AB 測試平台
- 教學 / 團隊內訓:freellmapi 當唯一 endpoint,避免新人被一堆帳號與 key 卡住
如果你手上已經有任何使用 OpenAI 的程式碼,現在只需要改一行 baseURL,就能開始玩 34 家免費 LLM,這就是 freellmapi 最實際的價值。
🚀 你現在可以做的事
- 打開一個現有的 OpenAI 專案,先把
baseURL抽成環境變數,預留接 freellmapi 的位置- 到 GitHub 把
tashfeenahmed/freellmapiclone 下來,在本機跑起來並用curl /health測試- 寫一個簡單腳本,對同一個 prompt 呼叫多個邏輯模型,開始比較免費 LLM 的表現


發佈留言