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 工具协议(两种规划模式:routernative)。
内容密钥会话重用 缓存相同的对话上下文;后续请求仅将新消息发送到上游,从而节省 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 的快速入门步骤)

  1. 从 GitHub Releases 页面为您的操作系统/架构下载预构建的二进制文件
  2. 运行它——它默认监听 127.0.0.1:4141 并使用默认管理员密码 admin123(首次登录时将强制您更改它)。
  3. 在浏览器中打开 http://127.0.0.1:4141,登录,并使用账户页面使用您的 Microsoft 365 凭据启动 OAuth/PKCE 流程。
  4. 将回调 URL 粘贴回 UI 后,在 API Keys 页面上创建 API Key
  5. 使用任何 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_MODErouter(网关决定工具路由)或 native(让上游 Copilot 处理)。
  • 与会话相关的 TTL(M365_SESSION_TTL_MINUTESM365_CONTEXT_TTL_MINUTES)。
  • 自动清理控制(M365_AUTO_CLEANUP_*)。

典型用例

  • 开发人员:希望使用现有的 OpenAI SDK 来试验 Microsoft 365 Copilot,而无需编写自定义客户端。
  • 团队:构建需要调用 Copilot 但必须在各个提供商(OpenAI、Anthropic、M365)之间保持统一 API 接口的内部代理。
  • 高级用户:希望使用本地仪表板来监控使用量、轮换多个 Microsoft 账户,并缓存对话上下文以减少 Token 消耗。

限制与法律声明(如作者所述)

  • 本项目不是官方 Microsoft 产品,与 Microsoft、OpenAI 或 Anthropic 没有任何关联。
  • 通过第三方账户或代理池访问 Copilot 可能会违反服务条款;用户需承担所有风险。
  • 仅供个人学习/研究使用——禁止商业转售或大规模部署。
  • 对账户被封禁、数据丢失或其他损害不承担任何责任。

以上所有信息均直接取自项目的 README;未推断任何额外功能。

相关

  • 项目
  • 项目
  • 项目
  • 项目