Bila agent AI anda berhubung dengan beberapa provider model, setiap kunci API biasanya tersebar: sebahagian dalam .env agent, sebahagian dalam skrip, sebahagian dalam sejarah chat. Semakin banyak tempat yang memegang rahsia, semakin banyak tempat yang boleh bocor.

Cadangan ini mudah: satu bastion host yang memegang SEMUA kunci, dan semua client (termasuk agent saya) hanya menerima kunci maya yang boleh dibatalkan.

Status: cadangan. Reka bentuk dan sokongan alat disahkan pada kertas, tetapi langkah pelaksanaan di bawah belum semuanya dijalankan.

Aliran

Pengguna (Telegram / CLI / Web)
        │
        ▼
AGENT  (Hermes)
   • gateway platform, skill, MCP client
   • model router → base_url menunjuk ke gateway
        │   (guna VIRTUAL KEY sahaja)
        ▼
AI GATEWAY  (bastion host)
   • LiteLLM Proxy (OpenAI-compatible /v1)
   • peti simpanan rahsia: OpenAI · Anthropic · DeepSeek · model tempatan
   • virtual key · routing · bajet · audit log
        │                        │
        ▼                        ▼
PROVIDER MODEL             SERVER MCP
 (awam + tempatan)         Notion · GitHub · Filesystem · custom

Boleh ke setup ini?

Ya. Semua komponen sumber terbuka dan serasi dengan agent saya.

LapisanPilihanCatatan
AI gatewayLiteLLMSelf-hosted, OpenAI-compatible, menyokong banyak provider
AlternatifPortkey GatewayGuardrails dan MCP gateway dengan pengesahan dan observability
AlternatifHigress (berasaskan Envoy)Cloud-native, sokongan proksi MCP
Routing/v1 yang OpenAI-compatibleProvider custom dalam agent menerima base_url dan api_key
Akses MCPMCP client terbina dalam agentstdio setempat atau HTTP jauh
Rahsiaenv atau DB dengan chmod 600Corak sedia ada

Pada sisi agent, tetapan cukup begini, dan agent tidak perlu menyimpan kunci provider asal langsung:

model:
  provider: custom
  base_url: http://<gateway>:4000/v1
  api_key: sk-<virtual-key>

Satu perkara untuk dielakkan: provider ai-gateway dalam agent saya merujuk perkhidmatan hosted milik pihak ketiga. Untuk self-hosted, guna provider custom dengan LiteLLM.

Kenapa LiteLLM

  • Sumber terbuka dan boleh di-host sendiri (Docker). Semak lesen untuk ciri enterprise sebelum bergantung padanya.
  • OpenAI-compatible, jadi alat sedia ada boleh menyambung tanpa mengubah kod.
  • Virtual key: setiap client mendapat kunci sendiri yang boleh dibatalkan dan dihadkan dengan bajet atau rate limit.
  • Rahsia di satu tempat, tidak keluar ke client.
  • Guardrails dan penapisan PII sebelum permintaan sampai ke model awam.
  • Penjejakan perbelanjaan dan audit log: siapa guna apa, dan berapa kosnya.
  • Menyokong model tempatan (contohnya Qwen3-8B di VM sendiri) selain provider awam.
services:
  litellm:
    image: ghcr.io/berriai/litellm:<pin-a-version>   # elakkan 'main-latest' di production
    ports: ["4000:4000"]
    volumes:
      - ./config.yaml:/app/config.yaml
      - ./litellm.db:/app/litellm.db
    env_file: .env     # OPENAI_API_KEY, ANTHROPIC_API_KEY, DEEPSEEK_API_KEY ...

Alternatif

AlatKelebihanBila guna
Portkey GatewayBanyak guardrail, MCP gateway dengan auth, latensi rendahMahu pengurusan MCP server dan guardrail yang kuat
HigressBerasaskan Envoy, natif Kubernetes, proksi MCPSudah ada Kubernetes dan mahu gateway setahap infra
Kong AI GatewayEkosistem plugin enterpriseSudah guna Kong
Gateway hosted (Vercel AI Gateway)Tiada operasiTidak mahu menyelenggara server, tetapi kunci berada pada pihak ketiga

Postur keselamatan

  • Semua API key hanya dalam .env (chmod 600) pada bastion; tidak pernah dalam chat, log atau git.
  • Client (agent, alat) hanya menerima virtual key.
  • Server MCP berjalan setempat (stdio) pada hos agent, jadi data tidak keluar ke model.
  • Audit log merekod setiap permintaan: siapa, model apa, berapa token, berapa kos.
  • Guardrails menyunting corak PII dan kunci sebelum permintaan sampai ke model awam.
  • Rangkaian: gateway hanya bind ke localhost atau rangkaian peribadi, tidak terdedah ke awam kecuali sengaja.

Pelan pelaksanaan

  1. Deploy LiteLLM (pada hos agent atau VM khusus) melalui Docker.
  2. Letak semua API key dalam .env gateway.
  3. Cipta virtual key untuk agent.
  4. Ubah model.base_url agent supaya menunjuk ke gateway.
  5. Uji tukar model antara OpenAI, Claude, DeepSeek dan model tempatan, semuanya melalui gateway.
  6. Sahkan penjejakan perbelanjaan dan audit log berfungsi.
  7. (Pilihan) Tambah MCP gateway untuk server MCP jauh.

Satu kaveat dalam reka bentuk: bastion menjadi titik kegagalan tunggal dan sasaran bernilai tinggi. Kunci tidak lagi tersebar, tetapi sekarang semuanya berada di satu tempat, jadi akses kepada host itu mesti diketatkan dan dipantau.