協定傳輸層 · 實驗性

一個閘道。
所有格式。

轉換 OpenAI Chat、Anthropic Messages、Gemini 與 Responses——串流穩定、工具呼叫跨格式、容錯切換知道何時該停。

Go 1.26Apache-2.0無遙測
客戶端格式
OpenAI Chat Anthropic Gemini Responses
Any2API轉換 · 路由 · 觀測 健康
上游協定
OpenAI Chat Anthropic Gemini Responses
SSE工具容錯任務
能力

為混亂的中間層而生。

每種協定都有自己的形狀。Any2API 保留有用的部分,丟掉意外的部分。

串流有契約

SSE 轉發、終端幀驗證、首字與閒置守衛;取消與上游失敗分開記錄。

串流取消用量

工具跨方言

工具呼叫、參數與名稱跨轉換保留;上游正規化、客戶端還原。

工具tool_use往返

有判斷的容錯

有序上游鏈、冷卻、retry-after 與例外預算;已提交串流絕不重播。

容錯冷卻retry-after

背景任務

Responses 的 background: true 成為托管任務:建立、輪詢、取消、續流,不必一直佔住連線。

responses任務續流

預設可觀測

健康、模型探索、請求環、指標、審計與用量;未設 admin key 時管理路由關閉。

健康指標審計

隱私優先

無遙測、倉庫無憑證;公開面預設關閉;管理面留在 loopback。

無遙測公開關閉env 引用
SSE 幀流經 Any2API,終端幀被驗證
串流是契約:轉發幀、驗證終端、已提交後絕不重播。
架構

轉換一次。
路由到任何地方。

入口格式解析成小型中間表示;上游渲染器寫出需要的協定;回應再走回來——協定相同時保持位元組不變。

  1. 01
    解析入口

    Chat、Messages、Gemini 或 Responses,包含串流與工具。

  2. 02
    選擇鏈路

    模型白名單、健康、冷卻與任務面規則決定哪個上游嘗試。

  3. 03
    轉換或直通

    跨協定走 IR;同協定保留位元組。

  4. 04
    轉發與觀測

    串流幀、終端驗證、嘗試記錄;已提交串流絕不重播。

endpoint
POST /v1/chat/completions
{
  "model": "example-model",
  "messages": [{"role": "user", "content": "Hello"}],
  "stream": true
}
同一個閘道。不同方言。一條上游鏈。
左側客戶端格式、中間 Any2API、右側上游協定
協定不同時轉換一次;相同時保留位元組。
快速開始

從 clone 到第一個請求。

建置 Go 二進位、指向一個上游,並讓服務留在 loopback。

terminal
git clone https://github.com/dwgx/any2api.git
cd any2api/src
go build -o any2api ./cmd/any2api
cp config.example.yaml ../config.yaml
../any2api -config ../config.yaml
預設監聽:127.0.0.1:8787
config.yaml最小設定
upstreams:
  - name: primary
    protocol: openai_chat
    base_url: https://api.example.com/v1
    api_key: ${UPSTREAM_API_KEY}

models:
  - id: example-model
    upstream_model: upstream-model-name
    upstreams: ["primary"]
憑證留在環境變數或未跟蹤的本機檔案。
安全與隱私

你的金鑰只屬於你。

Any2API 不會向客戶端收集上游憑證。本倉庫沒有帳號、cookie 或生產金鑰。公開存取是刻意選擇的開關。

閱讀安全政策
  • 倉庫不含密鑰。使用 ${ENV} 引用或未跟蹤的 config.yaml。
  • Loopback 優先。綁定 127.0.0.1;TLS 在審查過的反向代理終止。
  • 公開面預設關閉。工作階段、access key 與限制皆為 opt-in。
  • 管理面預設關閉。沒有 admin key 就沒有管理路由。
安全態勢:公開面關閉、loopback 綁定、環境變數引用、管理金鑰必要
公開面預設關閉。憑證以引用提供。