HEXUXIU/M365-Copilot2API
Microsoft 365 Copilot → OpenAI / Anthropic 兼容 API 网关。
什麼是 M365 Copilot2API?
M365 Copilot2API 是一個以 Go 語言編寫的自架閘道,讓您可以使用任何預期 OpenAI 相容或 Anthropic 相容 HTTP API(例如 ChatGPT 風格的 SDK、Claude Code、Cursor、OpenCode)的客戶端與 Microsoft 365 Copilot 進行通訊。在內部,它使用 M365 Copilot 服務所用的私有 ChatHub WebSocket 協定,然後將這些訊息轉換為 OpenAI 和 Anthropic API 定義的標準 JSON 承載。
為什麼需要它
- Microsoft 365 Copilot 僅能透過商業訂閱使用,且其 API 並未公開記錄。該閘道對 WebSocket 協定進行逆向工程,並公開了一個熟悉的 REST 介面。
- 這讓開發人員能重複使用現有的工具、函式庫和代理,而無需為專有協定重新編寫它們。
- 它還新增了管理控制台、API 金鑰處理、多帳戶輪替、代理池、使用量統計和快取等功能——這些通常是您必須自己動手建置的功能。
核心功能(如 README 中所述)
| 功能 | 作用 |
|---|---|
OpenAI 相容的 /v1/chat/completions |
接受相同的 JSON 結構描述,支援串流(stream:true)和函式呼叫。 |
Anthropic 相容的 /v1/messages |
使用 Anthropic 請求格式與 Claude Code、Cursor 等協同運作。 |
回應端點(/v1/responses) |
與 OpenAI 較舊的 Responses 協定(例如 Codex)相容。 |
| SSE 串流 | 就像官方 API 一樣返回逐 Token 事件。 |
| 工具呼叫轉換 | 將 OpenAI 函式呼叫對應到 M365 Copilot 工具協定(兩種規劃模式:router 或 native)。 |
| 內容金鑰工作階段重用 | 將相同的對話上下文快取;後續請求僅將新訊息傳送給上游,從而節省 Token。 |
| 明確的工作階段綁定 | 標頭 X-M365-Session-Id 強制請求繼續特定的雲端對話。 |
| 自動清理 | 閒置的雲端對話將在可設定的 TTL(預設為 2 小時)後或達到大小上限時被回收。 |
| 多帳戶管理 | OAuth/PKCE 流程、循環配置請求分發,以及帳戶失效時的自動容錯移轉。 |
| API 金鑰管理 | 用於建立、撤銷和檢視客戶端用於驗證的金鑰的 Web UI。 |
| 代理池 | 支援 HTTP、HTTPS 和 SOCKS5 代理,具備健康檢查和失敗冷卻機制。 |
| 使用量統計 | 將每個金鑰、每個帳戶、每個模型的使用量記錄到 usage.jsonl,並在儀表板上顯示命中率計數器。 |
| 多模態輸入 | 接受影像資料(base64 資料 URL 或公開 HTTPS URL)並將其轉發到 M365 的 UploadFile 端點,然後將檔案參考注入到聊天訊息中。 |
| 影像生成 | 公開 /v1/images/generations 以鏡像 OpenAI 的影像 API。 |
| Web 管理控制台 | 完整的 UI,用於登入、帳戶驗證、金鑰管理、代理池、對話檢視、模型測試和設定。 |
運作方式 – 高階架構
OpenAI/Anthropic client ──► HTTP endpoint (/v1/…) ──► M365-Copilot2API (Go)
│
│ internal/chathub
▼
ChatHub WebSocket (private)
│
▼
Microsoft 365 Copilot (cloud)
internal/chathub:處理私有 ChatHub 協定的低階 WebSocket 交握、心跳和事件串流解析。internal/web/session_resolver.go:決定請求應綁定到哪個 M365 帳戶和哪個雲端對話,實作了內容金鑰重用邏輯。- 帳戶輪替與容錯移轉:如果請求遇到速率限制、驗證錯誤或其他上游故障,閘道會自動使用下一個健康的帳戶進行重試。
開始使用(來自 README 的快速入門步驟)
- 從 GitHub Releases 頁面為您的作業系統/架構下載預先建置的二進位檔案。
- 執行它——它預設監聽
127.0.0.1:4141並使用預設管理員密碼admin123(首次登入時將強制您變更它)。 - 在瀏覽器中開啟
http://127.0.0.1:4141,登入,並使用帳戶頁面以您的 Microsoft 365 憑證啟動 OAuth/PKCE 流程。 - 將回呼 URL 貼回 UI 後,在 API Keys 頁面上建立 API Key。
- 使用任何 OpenAI 相容的客戶端呼叫閘道,例如:
curl http://127.0.0.1:4141/v1/chat/completions \ -H "Authorization: Bearer <YOUR_API_KEY>" \ -H "Content-Type: application/json" \ -d '{"model":"gpt-5.6-sol","messages":[{"role":"user","content":"你好"}]}'
設定重點
所有設定都是環境變數(提供了 .env.example)。重要的設定包含:
M365_LISTEN– 要綁定的位址/連接埠。M365_ADMIN_PASSWORD– 管理員登入密碼。M365_PROXY_POOL– 以逗號分隔的代理清單。M365_TOOL_PLANNING_MODE–router(閘道決定工具路由)或native(讓上游 Copilot 處理)。- 與工作階段相關的 TTL(
M365_SESSION_TTL_MINUTES、M365_CONTEXT_TTL_MINUTES)。 - 自動清理控制(
M365_AUTO_CLEANUP_*)。
典型使用情境
- 開發人員:希望使用現有的 OpenAI SDK 來試驗 Microsoft 365 Copilot,而無需編寫自訂客戶端。
- 團隊:建置需要呼叫 Copilot 但必須在不同供應商(OpenAI、Anthropic、M365)之間保持統一 API 介面的內部代理。
- 進階使用者:希望使用本機儀表板來監控使用量、輪替多個 Microsoft 帳戶,並快取對話上下文以減少 Token 消耗。
限制與法律聲明(如作者所述)
- 本專案不是官方 Microsoft 產品,與 Microsoft、OpenAI 或 Anthropic 沒有任何關聯。
- 透過第三方帳戶或代理池存取 Copilot 可能會違反服務條款;使用者需自負所有風險。
- 僅供個人學習/研究使用——禁止商業轉售或大規模部署。
- 對於帳戶被封鎖、資料遺失或其他損害不承擔任何責任。
以上所有資訊均直接取自專案的 README;未推斷任何額外功能。
相關
- 專案
- 專案
- 專案
- 專案