iT邦幫忙

0

在 macOS 用 PM2 常駐 LiteLLM:串接 Azure AI Foundry、Hermes Agent 與 OpenClaw

Ben 2026-07-22 07:05:12203 瀏覽
  • 分享至 

  • xImage
  •  

為什麼要在中間加一層 LiteLLM?

Hermes Agent 與 OpenClaw 都可以連到 OpenAI 相容 API。LiteLLM 可以把 Azure AI Foundry 中部署的模型轉成同一套 OpenAI 相容介面,讓兩個 Agent 共用相同 Endpoint:

Hermes Agent ─┐
              ├─> LiteLLM Proxy(127.0.0.1:4000)─> Azure AI Foundry 模型
OpenClaw ─────┘

這種架構有幾個好處:

  • Hermes 與 OpenClaw 不必各自理解 Azure 的 API 格式。
  • 可以替 Azure Deployment 設定較簡短的公開模型名稱。
  • 未來可在 LiteLLM 增加多模型、Fallback、負載平衡及預算控制。
  • Azure Endpoint 與 Key 只需要集中管理。
  • Client 端都使用類似 OpenAI API 的呼叫方式。

三個容易混淆的名稱

設定前先分清楚以下三個名稱:

  1. Azure 模型名稱

    • 在 Azure AI Foundry Model Catalog 中看到的模型名稱。
  2. Azure Deployment Name

    • 在 Foundry 部署模型時指定的部署名稱。
    • LiteLLM 的 azure/<deployment-name> 必須使用這個名稱。
    • 它不一定與模型原始名稱相同。
  3. LiteLLM Model Name

    • LiteLLM 對 Hermes、OpenClaw 或其他 Client 公開的別名。
    • 這個名稱可以自訂。

例如:

model_name: my-azure-model
litellm_params:
  model: azure/my-foundry-deployment

這表示:

  • Client 呼叫 my-azure-model
  • LiteLLM 將請求轉給 Azure Deployment my-foundry-deployment

在 Azure AI Foundry 建立模型部署

1. 建立或開啟 Foundry Project

進入 Microsoft Foundry Portal:

建立或選擇既有 Project/Foundry Resource。不同時期的 Portal 介面名稱可能略有差異,例如:

  • Azure AI Foundry
  • Microsoft Foundry
  • Foundry Project
  • Azure OpenAI Resource

核心概念相同:需要有一個可部署模型、管理 Endpoint 與 Credentials 的 Azure Resource。

2. 部署模型

在 Foundry Portal 中:

  1. 開啟 Model catalog
  2. 選擇需要的模型。
  3. 按下 Deploy
  4. 選擇 Deployment type、版本、容量與 Content Filter。
  5. 指定一個 Deployment Name
  6. 等待部署完成。

請記住 Deployment Name。後面 LiteLLM 使用的是它,而不只是畫面上的模型名稱。

3. 取得 Endpoint

介面名稱可能隨 Portal 版本調整,通常可以從以下位置找到:

  • Foundry Portal 的 Models + endpoints
  • Deployment 詳細頁的 EndpointConsume
  • Azure Portal 對應 AI Foundry/Azure OpenAI Resource 的 Keys and Endpoint

常見 Endpoint 形式包括:

https://<RESOURCE_NAME>.cognitiveservices.azure.com/

或:

https://<RESOURCE_NAME>.openai.azure.com/

請複製 Portal 實際顯示的 Endpoint,不要自行猜測網域。

4. 取得 API Key

通常可以從以下位置取得:

  1. 在 Azure Portal 開啟對應的 Foundry/Azure OpenAI Resource。
  2. 進入 Resource Management
  3. 選擇 Keys and Endpoint
  4. 複製 KEY 1KEY 2

有些 Foundry 介面也會在 Deployment 的 Consume 頁面顯示 Endpoint 與 Credential 使用方式。

安全注意事項:

  • 不要將 API Key 寫入 Medium 文章、Git Repository 或截圖。
  • 不要把 Key 放進會公開同步的 Markdown。
  • 若 Key 曾出現在公開內容,應立即在 Azure Portal Rotate/Regenerate。
  • 正式環境可考慮使用 Microsoft Entra ID,而非長期 API Key。

5. 確認 API Version

Azure API Version 會依模型、Resource 類型及功能而不同。不要直接複製別人的版本號。

應以以下來源為準:

  • Foundry Deployment 的 Consume 範例
  • Azure 官方文件
  • 該模型部署頁所提供的 API 範例

本文以下使用:

2025-03-01-preview

安裝 LiteLLM 與 PM2

1. 安裝 LiteLLM Proxy

可使用一般 Python 安裝:

python3 -m pip install --user 'litellm[proxy]'

如果系統有使用 pipx,也可以隔離安裝:

pipx install 'litellm[proxy]'

確認 LiteLLM 執行檔:

litellm --version

2. 安裝 PM2

npm install -g pm2

確認安裝:

pm2 -v

PM2 原本是 Node.js Process Manager,但也可以管理 Python CLI 程序。


設定 Azure AI Foundry 模型

1. 建立設定目錄

mkdir -p "$HOME/.config/litellm"
chmod 700 "$HOME/.config/litellm"

2. 建立 Secret 環境變數檔

建立:

$HOME/.config/litellm/secrets.env

內容:

AZURE_API_BASE="https://<RESOURCE_NAME>.cognitiveservices.azure.com/"
AZURE_API_KEY="<AZURE_API_KEY>"
AZURE_API_VERSION="<AZURE_API_VERSION>"
LITELLM_MASTER_KEY="<GENERATE_A_SEPARATE_RANDOM_KEY>"

限制權限:

chmod 600 "$HOME/.config/litellm/secrets.env"

LITELLM_MASTER_KEY 應與 Azure API Key 完全不同。可以產生一個隨機值:

python3 -c 'import secrets; print("sk-litellm-" + secrets.token_urlsafe(32))'

3. 建立 LiteLLM Config

建立:

$HOME/.config/litellm/config.yaml

範例:

model_list:
  - model_name: my-azure-model
    litellm_params:
      # azure/ 後方必須是 Azure Deployment Name
      model: azure/my-foundry-deployment
      api_base: os.environ/AZURE_API_BASE
      api_key: os.environ/AZURE_API_KEY
      api_version: os.environ/AZURE_API_VERSION
    model_info:
      base_model: my-azure-model

general_settings:
  master_key: os.environ/LITELLM_MASTER_KEY

litellm_settings:
  drop_params: true

若有多個 Azure Deployment,可以繼續加入:

model_list:
  - model_name: model-a
    litellm_params:
      model: azure/deployment-a
      api_base: os.environ/AZURE_API_BASE
      api_key: os.environ/AZURE_API_KEY
      api_version: os.environ/AZURE_API_VERSION

  - model_name: model-b
    litellm_params:
      model: azure/deployment-b
      api_base: os.environ/AZURE_API_BASE
      api_key: os.environ/AZURE_API_KEY
      api_version: os.environ/AZURE_API_VERSION

如果不同 Deployment 需要不同 API Version,可以直接在各模型區塊分別指定,或使用不同環境變數。


先在前景測試 LiteLLM

載入環境變數:

set -a
source "$HOME/.config/litellm/secrets.env"
set +a

啟動:

litellm \
  --config "$HOME/.config/litellm/config.yaml" \
  --host 127.0.0.1 \
  --port 4000

使用 127.0.0.1 可以避免 Proxy 直接暴露在區域網路或公網。

另開一個 Terminal,確認模型清單:

set -a
source "$HOME/.config/litellm/secrets.env"
set +a

curl -sS http://127.0.0.1:4000/v1/models \
  -H "Authorization: Bearer $LITELLM_MASTER_KEY"

測試 Chat Completions:

curl -sS http://127.0.0.1:4000/v1/chat/completions \
  -H "Authorization: Bearer $LITELLM_MASTER_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "my-azure-model",
    "messages": [
      {"role": "user", "content": "Reply with exactly OK"}
    ],
    "max_completion_tokens": 32
  }'

如果回傳 OK,代表這條路徑已通:

curl -> LiteLLM -> Azure AI Foundry Deployment

用 PM2 讓 LiteLLM 背景常駐

先載入 Secret:

set -a
source "$HOME/.config/litellm/secrets.env"
set +a

再執行:

LITELLM_BIN="$(command -v litellm)"
PYTHON_BIN="$(command -v python3)"

pm2 start "$LITELLM_BIN" \
  --name litellm \
  --interpreter "$PYTHON_BIN" \
  -- \
  --config "$HOME/.config/litellm/config.yaml" \
  --host 127.0.0.1 \
  --port 4000

重點:

  • command -v litellm:避免硬編碼某位使用者的 Home 路徑。
  • --interpreter:指定 Python 執行。
  • --:分隔 PM2 與 LiteLLM 的參數。
  • $HOME:取代 /Users/<username>,適合公開文章及跨使用者使用。
  • --host 127.0.0.1:只允許本機 Client 連線。

PM2 常用管理指令

查看狀態:

pm2 status

查看 Log:

pm2 logs litellm

只看最近 100 行:

pm2 logs litellm --lines 100

重啟:

pm2 restart litellm

如果更改了程序環境變數,可重新載入 Secret 後更新環境:

set -a
source "$HOME/.config/litellm/secrets.env"
set +a
pm2 restart litellm --update-env

停止:

pm2 stop litellm

移除 PM2 程序:

pm2 delete litellm

設定開機自動啟動

pm2 startup

PM2 會輸出一條需要執行的系統指令。執行畫面提供的命令後,再執行:

pm2 save

注意:pm2 startup 輸出的命令通常包含本機使用者名稱與 Home 路徑。Medium 文章可以說明「執行 PM2 顯示的命令」,不要把自己電腦的完整輸出直接貼上網。


將 Hermes Agent 接到 LiteLLM

Hermes 支援任何實作 /v1/chat/completions 的 OpenAI 相容 Endpoint。最不容易因版本更新而失效的方法,是使用 Hermes 的互動式設定:

hermes model

實際選單流程如下:

  1. Select provider 畫面選擇:

    custom (direct API)
    

    雖然清單裡也有 Azure Foundry,但本文的架構是讓 Hermes 連到本機 LiteLLM,而不是讓 Hermes 直接連 Azure,因此這裡應選 custom

  2. 在提示中輸入 LiteLLM Base URL:

    API base URL [e.g. https://api.example.com/v1]:
    http://127.0.0.1:4000/v1
    
  3. API key [optional] 輸入 LiteLLM 的 LITELLM_MASTER_KEY,不是 Azure API Key。

  4. Select API compatibility mode 選擇:

    1. Auto-detect [current]
    

    也可以直接選擇 LiteLLM 在本文中提供標準 OpenAI 相容的 /chat/completions,較不容易因 URL heuristics 或版本差異選錯 API。

  5. Hermes 會呼叫 LiteLLM 的 /v1/models,列出可用模型,例如:

    Available models:
      1. gpt-5.2-chat
      2. gpt-5.4-pro
      3. gpt-5.4
      4. gpt-5.5
      5. gpt-5.6-sol
    
  6. 選擇需要的模型。這裡顯示的名稱,就是 LiteLLM config.yaml 中設定的 model_name

設定後可測試:

hermes chat \
  --provider custom \
  -m my-azure-model \
  -q "Reply with exactly OK"

在 Hermes 互動式 Session 中,也可以用 /model 再切換 Provider 或模型:

/model

一般使用者不需要手動編輯 ~/.hermes/config.yamlhermes model 會自行保存 Custom Endpoint、API compatibility mode 與所選模型。

也可以把 LiteLLM 設成 Hermes 的 Fallback Provider。建議不要手動修改 fallback_providers YAML,而是直接使用 Hermes 內建的互動式管理指令:

hermes fallback

或明確使用新增指令:

hermes fallback add

hermes fallback add 會開啟相同的 Provider Picker。若要把 LiteLLM 加入 Fallback Chain,實際操作同樣是:

  1. 選擇:

    custom (direct API)
    
  2. API Base URL 輸入:

    http://127.0.0.1:4000/v1
    
  3. API Key 輸入 LiteLLM 的 LITELLM_MASTER_KEY

  4. API compatibility mode 選擇:

    1. Auto-detect [current]
    
  5. 從 LiteLLM 回傳的 Available models 選擇要作為 Fallback 的模型。

  6. 完成驗證並儲存。

查看目前的 Fallback Chain:

hermes fallback list

也可以使用簡寫:

hermes fallback ls

移除某個 Fallback:

hermes fallback remove

或:

hermes fallback rm

清除整條 Fallback Chain:

hermes fallback clear

hermes fallback 會重用 hermes model 的 Provider Picker,因此 Provider 清單、Credential 提示與連線驗證方式相同。設定完成後,Hermes 會自行將結果保存到 ~/.hermes/config.yamlfallback_providers,一般使用者不需要手動編輯 YAML。

Hermes 更新模型、Provider 或 Fallback 設定後,CLI 應退出並重新開啟;Gateway 則可重啟:

hermes gateway restart

Hermes 官方文件:

  • Provider 設定:https://hermes-agent.nousresearch.com/docs/integrations/providers
  • Fallback Providers:https://hermes-agent.nousresearch.com/docs/user-guide/features/fallback-providers

將 OpenClaw 接到 LiteLLM

OpenClaw 也可以將 LiteLLM 設為 OpenAI 相容 Provider。

主要設定檔通常位於:

~/.openclaw/openclaw.json

概念設定如下:

{
  "models": {
    "providers": {
      "litellm": {
        "baseUrl": "http://127.0.0.1:4000/v1",
        "apiKey": "<YOUR_LITELLM_MASTER_KEY>",
        "api": "openai-completions",
        "models": [
          {
            "id": "my-azure-model",
            "name": "My Azure Foundry Model",
            "contextWindow": 128000,
            "maxTokens": 16384
          }
        ]
      }
    }
  },
  "agents": {
    "defaults": {
      "model": {
        "primary": "litellm/my-azure-model"
      }
    }
  }
}

注意:

  • baseUrl 指向 LiteLLM,不是直接指向 Azure。
  • apiKey 使用 LiteLLM Master Key,不是 Azure API Key。
  • models[].id 必須等於 LiteLLM Config 中的 model_name
  • primary 使用 <provider-name>/<model-id> 格式。
  • contextWindowmaxTokens 應依實際模型規格設定,不要直接照抄範例數字。

修改後檢查模型狀態:

openclaw models status
openclaw models list

設定預設模型也可使用:

openclaw models set litellm/my-azure-model

若 OpenClaw Gateway 正在背景執行,修改後重啟:

openclaw gateway restart

安全提醒:若 OpenClaw 版本或部署方式要求把 Key 寫入 JSON,請確保:

chmod 600 "$HOME/.openclaw/openclaw.json"

新增 Azure 模型後如何更新

假設已在 Foundry 新增 Deployment deployment-b,只需在 LiteLLM Config 增加:

- model_name: model-b
  litellm_params:
    model: azure/deployment-b
    api_base: os.environ/AZURE_API_BASE
    api_key: os.environ/AZURE_API_KEY
    api_version: os.environ/AZURE_API_VERSION

重啟 LiteLLM:

pm2 restart litellm

確認模型出現在清單:

curl -sS http://127.0.0.1:4000/v1/models \
  -H "Authorization: Bearer $LITELLM_MASTER_KEY"

接著:

  • Hermes:執行 hermes model,或切換至新的 Custom model。
  • OpenClaw:把新模型加入 models.providers.litellm.models,然後重啟 Gateway。

常見錯誤排查

401 Authentication Error

可能原因:

  • 呼叫 LiteLLM 時沒有傳 Authorization: Bearer ...
  • Client 使用 Azure API Key,而不是 LiteLLM Master Key。
  • LiteLLM Master Key 與 Client 設定不一致。

Azure 404/Deployment not found

最常見原因:

  • model: azure/... 後方填了模型名稱,而不是 Deployment Name。
  • Endpoint 指到另一個 Azure Resource。
  • Deployment 尚未完成或已刪除。

Azure 400/Unsupported API version

  • 檢查 Foundry Deployment 的 Consume 範例。
  • 使用該模型與 Resource 支援的 API Version。
  • 不要假設所有模型都能共用同一版本。

LiteLLM 修改後沒有生效

pm2 restart litellm --update-env
pm2 logs litellm --lines 100

PM2 重啟後找不到 Python Package

確認 LiteLLM 與 Interpreter:

command -v litellm
command -v python3
python3 -m pip show litellm

若 LiteLLM 安裝在特定 Virtual Environment,PM2 必須使用同一個 Environment 的 Python 與 LiteLLM 路徑。

Hermes 或 OpenClaw 看得到模型但呼叫失敗

先分層測試:

  1. 直接測 Azure Foundry Deployment。
  2. curl 測 LiteLLM。
  3. 再測 Hermes。
  4. 最後測 OpenClaw。

這樣比較容易確認問題發生在 Azure、LiteLLM,還是 Agent 設定。


最終架構

Azure AI Foundry
  └─ Model Deployment
       └─ Azure Endpoint + Credential
                
LiteLLM Proxy
  ├─ 對外提供 OpenAI 相容 API
  ├─ 使用 model_name 隱藏 Azure Deployment 細節
  └─ 由 PM2 常駐於 127.0.0.1:4000
            ↓
  ┌─────────┴─────────┐
  │                   │
Hermes Agent       OpenClaw
Custom Endpoint    OpenAI-compatible Provider

完成後可以得到:

  • LiteLLM 在 macOS 背景常駐。
  • Crash 後由 PM2 自動重啟。
  • 可設定登入/開機後自動恢復。
  • Hermes 與 OpenClaw 共用同一個 LiteLLM Proxy。
  • Azure Endpoint 與 Key 不必分散到每個 Agent。
  • 新增 Azure Deployment 時,只需更新 LiteLLM 及 Client 的模型清單。

參考資料


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言