返回首頁LLM

LLM API 開發與本地部署完整指南:從串接到自建【2026】

17 min 分鐘閱讀
#LLM API#本地部署#Ollama#vLLM#SGLang#GPU

LLM API 開發與本地部署完整指南:從串接到自建【2026】

LLM API 開發與本地部署完整指南:從串接到自建【2026】

企業使用 LLM 有兩條主要路徑:透過 API 呼叫雲端服務,或在本地部署開源模型。兩者各有優劣,選擇取決於你的資料敏感度、使用量、技術能力與預算。

2026 年的關鍵變化

  • 開源模型差距縮小:Llama 4、DeepSeek-V3 效能接近商業模型
  • 推論引擎效能大增:vLLM 2.0、SGLang 讓本地部署更實用
  • MCP 協議讓 API 和本地部署都能連接外部工具
  • 量化技術成熟:QLoRA 讓 70B 模型可在消費級 GPU 運行

本文將完整比較兩種方案,從 API 開發實務到本地部署架構,幫助你做出最適合企業需求的技術選型。如果你還不熟悉 LLM 的基礎概念,建議先閱讀 LLM 完整指南


API vs 本地部署:如何選擇

全面比較(2026 版)

面向雲端 API本地部署
初期成本低(按用量付費)高(硬體採購)
長期成本隨用量線性增長固定成本,用量越大越划算
資料隱私資料離開本地(但主流服務不用於訓練)資料完全本地控制
模型能力頂尖商業模型(GPT-5.2、Claude Opus 4.5)開源模型(接近商業模型 90%)
延遲網路延遲 + 排隊穩定低延遲
維運複雜度極低
擴展性無限(廠商負責)受限於硬體
客製化有限(Fine-tuning API)完全控制
MCP 支援原生支援(Claude)需自行整合

選擇 API 的情境

  • 快速上線:專案時程緊迫,需要立即使用
  • 頂尖效能需求:需要 GPT-5.2、Claude Opus 4.5 等最強模型
  • 變動性高:使用量波動大,難以預估
  • 缺乏維運能力:團隊沒有 GPU 維運經驗
  • Agent 開發:需要原生 MCP 支援
  • 推理任務:o3、Claude 推理模式等特殊能力

選擇本地部署的情境

  • 資料合規要求:金融、醫療、政府等受監管產業
  • 高使用量:每月數百萬次呼叫,成本敏感
  • 低延遲需求:即時應用,不能容忍網路延遲
  • 完全控制:需要客製化模型或推論流程
  • 離線環境:無法連接外部網路
  • 高性價比需求:DeepSeek-V3 本地部署成本極低

成本試算範例(2026 版)

假設每月 100 萬次呼叫,平均每次 1,000 tokens(輸入 800 + 輸出 200):

方案 A:OpenAI GPT-4o-mini API

  • 輸入:800M tokens × $0.15/1M = $120
  • 輸出:200M tokens × $0.60/1M = $120
  • 月成本:$240

方案 B:DeepSeek-V3 API(高性價比)

  • 輸入:800M tokens × $0.27/1M = $216
  • 輸出:200M tokens × $1.10/1M = $220
  • 月成本:$436(但效能接近 GPT-5)

方案 C:本地部署 Llama 4 8B

  • 硬體:RTX 5090(約 $2,000)× 2 台
  • 電費與維運:約 $120/月
  • 硬體 3 年攤提:$111/月
  • 月成本:$231

結論

  • 用量低於 50 萬次/月 → API 較划算
  • 用量超過 100 萬次/月 → 本地部署開始有優勢
  • 需要頂尖效能 → API(GPT-5.2、Claude Opus 4.5)
  • 需要高性價比 → DeepSeek API 或本地部署

LLM API 開發實務(2026 版)

OpenAI API 串接

基礎串接

from openai import OpenAI

client = OpenAI(api_key="your-api-key")

response = client.chat.completions.create(
    model="gpt-4o-mini",  # 或 "gpt-5" 用於複雜任務
    messages=[
        {"role": "system", "content": "你是專業的客服助理"},
        {"role": "user", "content": "訂單什麼時候會到?"}
    ],
    temperature=0.7,
    max_tokens=500
)

print(response.choices[0].message.content)

Function Calling(2026 標準做法)

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_order_status",
            "description": "查詢訂單狀態",
            "parameters": {
                "type": "object",
                "properties": {
                    "order_id": {"type": "string", "description": "訂單編號"}
                },
                "required": ["order_id"]
            }
        }
    }
]

response = client.chat.completions.create(
    model="gpt-4o",
    messages=messages,
    tools=tools,
    tool_choice="auto"
)

Anthropic Claude API 串接

基礎串接

from anthropic import Anthropic

client = Anthropic(api_key="your-api-key")

response = client.messages.create(
    model="claude-opus-4-5-20251101",  # 最新 Opus 4.5
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "請分析這份報告的重點"}
    ]
)

print(response.content[0].text)

Tool Use(Claude 原生支援)

response = client.messages.create(
    model="claude-opus-4-5-20251101",
    max_tokens=1024,
    tools=[
        {
            "name": "get_weather",
            "description": "取得天氣資訊",
            "input_schema": {
                "type": "object",
                "properties": {
                    "location": {"type": "string"}
                },
                "required": ["location"]
            }
        }
    ],
    messages=[{"role": "user", "content": "台北今天天氣如何?"}]
)

錯誤處理最佳實踐

import time
from openai import OpenAI, RateLimitError, APIError

def call_llm_with_retry(messages, max_retries=3):
    client = OpenAI()

    for attempt in range(max_retries):
        try:
            response = client.chat.completions.create(
                model="gpt-4o-mini",
                messages=messages,
                timeout=30
            )
            return response.choices[0].message.content

        except RateLimitError:
            # 遇到速率限制,指數退避
            wait_time = 2 ** attempt
            print(f"Rate limited. Waiting {wait_time}s...")
            time.sleep(wait_time)

        except APIError as e:
            # API 錯誤,記錄並重試
            print(f"API Error: {e}")
            if attempt == max_retries - 1:
                raise

    raise Exception("Max retries exceeded")

成本優化技巧(2026 版)

  1. 選擇適當模型

    • 簡單任務用小模型(GPT-4o-mini、Claude Haiku)
    • 複雜任務才用大模型(GPT-5.2、Claude Opus 4.5)
    • 高性價比選擇:DeepSeek-V3(價格僅 GPT-5 的 1/10)
  2. Prompt 精簡化

    • 減少不必要的 system prompt
    • 使用簡潔指令
    • Prompt Caching(Claude 支援)可節省重複 prompt 成本
  3. 批次處理

    # OpenAI Batch API - 50% 折扣
    batch = client.batches.create(
        input_file_id="file-xxx",
        endpoint="/v1/chat/completions",
        completion_window="24h"
    )
    
  4. 快取機制

    • 相同問題不重複呼叫
    • 使用 Redis 或本地快取
    • Claude 的 Prompt Caching 自動優化
  5. Streaming 降低感知延遲

    stream = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=messages,
        stream=True
    )
    for chunk in stream:
        print(chunk.choices[0].delta.content, end="")
    

本地部署方案比較(2026 版)

Ollama:最簡單的入門方案

特色

  • 一行指令即可運行
  • 支援 macOS、Linux、Windows
  • 內建模型下載與管理
  • 相容 OpenAI API 格式
  • 2026 新增:支援更多量化格式、MCP Server 模式

安裝與使用

# 安裝
curl -fsSL https://ollama.com/install.sh | sh

# 運行模型
ollama run llama4:8b

# 啟動 API server
ollama serve

API 呼叫

import requests

response = requests.post(
    "http://localhost:11434/api/generate",
    json={
        "model": "llama4:8b",
        "prompt": "什麼是機器學習?",
        "stream": False
    }
)
print(response.json()["response"])

適用場景

  • 開發測試環境
  • 個人使用
  • 小規模部署

vLLM 2.0:高效能推論引擎

特色

  • PagedAttention 技術,記憶體利用率極高
  • 支援 continuous batching
  • 吞吐量業界領先
  • 相容 OpenAI API
  • 2026 新增:Speculative Decoding、更好的多 GPU 支援

安裝與使用

pip install vllm

# 啟動 API server
python -m vllm.entrypoints.openai.api_server \
    --model meta-llama/Llama-4-8B-Instruct \
    --gpu-memory-utilization 0.9 \
    --enable-prefix-caching

效能優勢

  • 比 Hugging Face Transformers 快 5-10x
  • 支援多 GPU 分散推論(Tensor Parallel、Pipeline Parallel)
  • 動態 batching 最大化吞吐量
  • Speculative Decoding 進一步加速

適用場景

  • 生產環境高負載
  • 需要最佳吞吐量
  • 多用戶同時請求

SGLang:2026 新星

開發者:Stanford / UC Berkeley

特色

  • 專為 LLM 服務優化的新一代框架
  • RadixAttention 技術:比 PagedAttention 更高效
  • 原生支援結構化輸出(JSON、正則表達式約束)
  • 極低延遲

使用方式

pip install sglang

python -m sglang.launch_server \
    --model-path meta-llama/Llama-4-8B-Instruct \
    --port 30000

適用場景

  • 需要結構化輸出
  • 延遲敏感應用
  • 研究與前沿應用

Text Generation Inference (TGI)

開發者:Hugging Face

特色

  • Hugging Face 官方推論引擎
  • 支援 Flash Attention 2
  • 內建監控與指標
  • Docker 優先設計

使用方式

docker run --gpus all \
    -v ~/.cache/huggingface:/data \
    ghcr.io/huggingface/text-generation-inference:latest \
    --model-id meta-llama/Llama-4-8B-Instruct

適用場景

  • 已使用 Hugging Face 生態
  • 需要容器化部署
  • 重視社群支援

方案比較總表(2026 版)

特性OllamavLLM 2.0SGLangTGI
上手難度極易中等中等中等
吞吐量中等極高極高
延遲中等極低
記憶體效率一般極高極高
生產就緒限小規模
結構化輸出有限支援原生支援支援
量化支援GGUFAWQ/GPTQ/FP8多種多種
多 GPU有限完整完整完整

硬體與量化技術(2026 版)

GPU 選型建議

消費級 GPU

GPUVRAM可運行模型價格(約)
RTX 4060 Ti16GB8B (量化)$400
RTX 409024GB13B (量化) / 8B (原生)$1,600
RTX 509032GB30B (量化) / 13B (原生)$2,000

資料中心級 GPU

GPUVRAM可運行模型價格(約)
L40S48GB30B (量化) / 13B (原生)$7,000
A100 80GB80GB70B (量化)$15,000
H10080GB70B (FP8) / 405B (量化 + 多卡)$30,000
H200141GB70B (原生) / 405B (量化)$35,000+

選型原則

  • 確定要運行的模型大小
  • 評估並發需求
  • 權衡成本與效能
  • 2026 新選項:雲端 GPU 租用(Lambda Labs、RunPod)

若需處理企業內部文件,可搭配 RAG 系統 建立知識庫問答應用。

量化技術比較(2026 版)

量化是透過降低數值精度來減少模型大小與記憶體需求。

主流量化格式

格式精度大小減少速度影響品質影響
FP1616-bit50%略快幾乎無損
FP88-bit75%極輕微
INT88-bit75%輕微
INT4 (GPTQ)4-bit87.5%可接受
INT4 (AWQ)4-bit87.5%略優於 GPTQ
GGUF混合變動變動視配置

GGUF 量化層級(Ollama 使用):

  • Q4_K_M:品質與大小平衡
  • Q5_K_M:品質略好
  • Q8_0:接近原生品質

2026 新技術

  • FP8:H100/H200 原生支援,品質接近 FP16
  • QLoRA:微調時使用 4-bit 基底模型,大幅降低 VRAM 需求

建議

  • 開發測試:Q4_K_M 夠用
  • 生產環境:Q5_K_M、AWQ 或 FP8
  • 品質優先:FP16 或 FP8

LLM 部署架構會直接影響效能和成本。預約架構諮詢,讓我們幫你設計最佳方案。


生產環境部署架構

容器化部署

Docker Compose 範例

version: '3.8'
services:
  vllm:
    image: vllm/vllm-openai:latest
    deploy:
      resources:
        reservations:
          devices:
            - capabilities: [gpu]
    volumes:
      - ~/.cache/huggingface:/root/.cache/huggingface
    command: >
      --model meta-llama/Llama-4-8B-Instruct
      --gpu-memory-utilization 0.9
      --max-model-len 8192
      --enable-prefix-caching
    ports:
      - "8000:8000"

  nginx:
    image: nginx:latest
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    ports:
      - "80:80"
    depends_on:
      - vllm

負載平衡架構

                    [Load Balancer]
                          |
         ┌────────────────┼────────────────┐
         ▼                ▼                ▼
    [vLLM Pod 1]    [vLLM Pod 2]    [vLLM Pod 3]
    (GPU Node A)    (GPU Node B)    (GPU Node C)

Kubernetes 部署關鍵配置

  • 使用 NVIDIA GPU Operator
  • 設定適當的 resource requests/limits
  • 配置 HPA 根據負載自動擴展
  • 使用 PodDisruptionBudget 確保可用性

監控與告警

關鍵指標

  • GPU 使用率與記憶體
  • 推論延遲(P50、P95、P99)
  • 吞吐量(requests/second、tokens/second)
  • 錯誤率
  • 佇列長度
  • KV Cache 命中率

推薦工具

  • Prometheus + Grafana
  • vLLM 內建 metrics endpoint
  • NVIDIA DCGM Exporter
  • OpenTelemetry(分散式追蹤)

高可用設計

確保服務不中斷

  1. 多副本部署(至少 2 台 GPU 節點)
  2. 健康檢查與自動重啟
  3. 滾動更新策略
  4. 備援機制(fallback 到 API)
  5. 2026 最佳實踐:混合架構(本地 + API fallback)

常見問題 FAQ

Q1:開源模型能達到 GPT-5 水準嗎?

2026 年的開源模型已大幅進步:

  • Llama 4 405B:部分任務接近 GPT-5 水準
  • DeepSeek-V3:推理能力接近 GPT-5,價格極低
  • Qwen2.5 72B:中文能力優異

對於一般企業,8B-72B 的模型經過微調(Fine-tuning)後,在特定任務上可達到很好的效果。

Q2:本地部署需要多少預算?

入門配置(開發測試):

  • RTX 4090 × 1:約 $2,000 總成本

生產配置(小規模):

  • RTX 5090 × 2 + 伺服器:約 $8,000

企業配置(高負載):

  • H100 × 4 + 伺服器:約 $150,000+

雲端租用方案(替代購買):

  • Lambda Labs H100:$2.49/小時
  • RunPod A100:$1.99/小時

Q3:Apple Silicon 可以運行 LLM 嗎?

可以。M1/M2/M3/M4 Mac 的統一記憶體架構很適合跑中小型模型:

  • M3 Pro(18GB):可跑 8B 量化模型
  • M3 Max(96GB):可跑 30B 模型
  • M4 Ultra(256GB):可跑 70B 模型
  • 使用 llama.cpp 或 Ollama

效能參考:M4 Max 約為 RTX 4090 的 50-60%。

Q4:如何選擇開源模型?

常見選擇(2026 年):

  • 通用任務:Llama 4 8B/70B、DeepSeek-V3
  • 程式碼:DeepSeek Coder V3、Qwen2.5-Coder
  • 中文:Qwen2.5、Yi-1.5
  • 長文本:Llama 4(128K)、Qwen2.5(128K)
  • 多模態:LLaVA-NeXT、Qwen2-VL

選型建議參考 LLM 模型排名

對於有資料主權需求的企業,也可以考慮 Taiwan LLM 本土模型,完全在台灣境內運行。

Q5:API 和本地部署可以混用嗎?

可以且推薦。常見策略:

  • 主要流量用本地部署(成本低)
  • 複雜任務用 API(效果好)
  • 本地不可用時fallback 到 API
  • Agent 任務用 Claude API(原生 MCP 支援)
def get_completion(prompt, complexity="normal"):
    if complexity == "high":
        return call_claude_api(prompt)  # 複雜任務用 Claude
    try:
        return call_local_llm(prompt)   # 一般任務用本地
    except Exception:
        return call_deepseek_api(prompt)  # fallback 到高性價比 API

結語

API 和本地部署各有適用場景,沒有絕對的好壞之分。2026 年的格局是:

  • 開源模型效能接近商業模型 90%
  • 推論引擎(vLLM、SGLang)讓本地部署更實用
  • 混合架構成為最佳實踐

對於多數企業,建議從 API 開始快速驗證需求,當使用量成長到一定規模且資料敏感度高時,再評估本地部署的可行性。

無論選擇哪條路徑,都要考慮長期維運成本、團隊技術能力、以及未來的擴展需求。

不確定該用 API 還是自建?預約免費諮詢,我們幫你分析最划算的選擇。

需要專業的雲端建議?

無論您正在評估雲平台、優化現有架構,或尋找節費方案,我們都能提供協助

預約免費諮詢

相關文章