標籤: LLM API

  • 一行 API 串 34 家免費 LLM

    一行 API 串 34 家免費 LLM

    📌 本文重點

    • 一個 OpenAI 風格 /v1 入口接 34 家免費 LLM
    • 改 baseURL 即可把現有專案切到免費模型
    • 內建智慧路由、故障切換與 API key 加密
    • 特別適合 side project、AB test 與教學場景

    用 freellmapi,你可以用一個 OpenAI 風格的 /v1 API,一次接上 34 家免費 LLM 供應商、635 個模型端點,還幫你自動路由、故障切換與加密 API key。

    專案連結:tashfeenahmed/freellmapi on GitHub


    核心功能:為什麼值得多看一眼?

    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 或付費模型

    可以立刻做的事:

    1. 按照後面「怎麼開始」部署 freellmapi
    2. 把你的 side project OPENAI_BASE_URL 改成 freellmapi
    3. 設一個環境變數 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,重點只有兩件事:

    1. 改 baseURL 指向 freellmapi
    2. 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 test
    • fallback:按順序嘗試,失敗才換下一個,適合有「主力模型」的情境

    行動建議:

    先定義 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/freellmapi clone 下來,在本機跑起來並用 curl /health 測試
    • 寫一個簡單腳本,對同一個 prompt 呼叫多個邏輯模型,開始比較免費 LLM 的表現