▎先啰嗦几句开头
这个东西不是我一个人拍脑袋撸出来的,站在好几个开源作者肩膀上才拼起来的,必须先好好谢一谢:
@uefi2333 —— m365-native 的上游作者。整个 ChatHub(SignalR WebSocket)网关的骨架、鉴权与协议转换思路都源自这个项目,我是在它基础上做了重品牌、补功能和换前端。
@tanmoumou252 —— 群里那位老哥分享的 token 估算口径。微软 ChatHub 返回里根本不带 usage 字段,是他那套「结构化 + 跳空格启发式」的算法让 Token 统计终于不再是瞎猜。
@HEXUXIU —— M365-Copilot2API 的作者。很多实现细节是外科式参考它才跑通的。
特此谢过几位,代码我都是外科式借用、没乱 merge,出处也都在仓库里标了。
另外参考了几位作者的GitHub项目,实在是记不起来了找不到作者原项目了,在此做统一感谢
────────────────────────────────────────
▎这项目是干啥的
一句话:Copilot Bridge 把微软的 M365 Copilot ChatHub 转成业界通用的 OpenAI / Anthropic 兼容 API。你手头那些 OpenAI SDK、Claude SDK、各类 Agent 框架、甚至 curl,都能直接拿来调 M365 Copilot,不用关心微软那套私有协议。
支持 /v1/chat/completions、/v1/responses、/v1/messages,流式、多模态、工具调用都在。多账号池轮询、限流自愈、API Key 有效期、Token 统计这些也都有。
但今天这篇只重点聊一个我最想安利的特性:每个账号都能单独配置 IP 代理。
────────────────────────────────────────
▎
重点:每个账号,独立出口 IP
做账号池的人都知道,最怕的就是「一堆账号从同一个 IP 出去,被微软一眼看穿、集体风控」。Copilot Bridge 的做法很干脆——代理是配在「账号」维度上的,不是全局一个。
也就是说:
· 你有 10 个 M365 账号,可以给每个账号配不同的出口代理 IP;
· 该账号的 ChatHub WebSocket 连接、以及它的 token 刷新,全部走它自己的那条代理;
· 留空 = 直连,不强制。你可以一部分账号走代理、一部分直连,混着来也行。
多账号 + 多 IP,被关联、触发风控的概率直接降一个量级。这是我觉得这个项目最值得单独拿出来说的点。
▎代理怎么填(留空即直连)
在账号行「代理」输入框里填下面任意一种格式。
【格式一】纯 host:port,默认按 SOCKS5
1.2.3.4:1080
【格式二】SOCKS5 标准写法
socks5://1.2.3.4:1080
【格式三】SOCKS5 带账号密码(标准三段式)
socks5://user:[email protected]:1080
【格式四】SOCKS5 带账号密码(非标准四段式,部分服务商常用)
socks5://1.2.3.4:1080:user:pass
【格式五】SOCKS5 + 远程 DNS(域名由代理解析)
socks5h://1.2.3.4:1080
【格式六】SOCKS4(可带 user:pass@)
socks4://1.2.3.4:1080
【格式七】HTTP 代理(CONNECT 隧道)
http://1.2.3.4:8080
【格式八】HTTP 代理带账号密码
http://user:[email protected]:8080
【格式九】HTTPS 代理(真 TLS;仅对「连代理」这一段跳过证书校验,目标站仍正常校验)
https://1.2.3.4:8443
(说明)协议识别源码在 internal/proxy/proxy.go:http(s)://、socks5/socks5h/socks4:// 都支持标准三段式 [user:pass@]host:port 和四段式 host:port:user:pass;不写 scheme 默认走 SOCKS5。
▎
两个新手必踩的坑(我都踩过了)
坑 1:很多标着「HTTPS 代理」的服务,其实只是个 HTTP CONNECT 端点。这种你该填 http://,填 https:// 反而连不上。https:// 只留给那些真的用 TLS 监听客户端端口的代理。
坑 2:密码里带 @ 或 : 时,标准三段式 user:pass@host:port 会解析错。请改用四段式 host:port:user:pass(user/pass 里别再带冒号)。
▎配完怎么验证连通性
单账号测试:填好代理点「测试」,直接返回出口 IP 和延迟(绿 ✓ / 红 ✗),一眼知道这条代理通不通、出去的是哪个 IP。
一键批量检测:账号列表上有个「一键检测代理」按钮(旁边还并排放了「重置统计」),点一下并发探测所有配了代理的账号,每行内联显示结果,顶部横幅汇总「成功 N / 失败 M」,失效代理秒定位。
关于证书:只有「连到代理」那一段会 InsecureSkipVerify(兼容过期/自签代理证书,和指纹浏览器一个逻辑),目标站 Microsoft / ipify 的 TLS 仍然正常校验,安全不受影响。
────────────────────────────────────────
▎顺手提一嘴的其他特性(不展开了)
API Key 定时有效期 —— 创建的访问密钥可设「永久 / N 天到期」,过期自动 401 失效;随时能改回永久,密钥以 hash 存盘。
Token 统计估算 —— 在微软不返回 usage 的情况下给出可信参考值(gpt- 模型走真 tiktoken 分词器,其余走社区启发式),顶部汇总 + 每账号明细,还有「重置统计」按钮一键归零,且统计跨重启保留(落盘 stats.json)。
限流 / 健康自愈 —— 实时显示账号状态,429 自动冷却 2 分钟并切到健康号。
Web 控制台 —— 账号池 / 添加账号(内置 PKCE OAuth)/ 访问配置 / 运行日志 / 设置,五页开箱即用。
────────────────────────────────────────
▎项目地址 & 起手式
GitHub:GitHub - shenping1200/m365-copilot-bridge: M365 Copilot ChatHub gateway — OpenAI-compatible API (Copilot Bridge) · GitHub
Docker 起一个(默认监听 127.0.0.1:4141):
git clone GitHub - shenping1200/m365-copilot-bridge: M365 Copilot ChatHub gateway — OpenAI-compatible API (Copilot Bridge) · GitHub
cd m365-copilot-bridge
mkdir -p data secrets
printf ‘%s\n’ ‘换成你自己的长随机管理员密码’ > secrets/m365_admin_password
chmod 600 secrets/m365_admin_password
docker compose build && docker compose up -d
浏览器开 http://127.0.0.1:4141/ → 登录 → 完成微软授权 → 在「访问配置」建 Key → 拿 Key 调 /v1 即可。
合规提醒:本项目是互通网关,不是绕过鉴权的工具。请只使用你自己有权限的 Microsoft 账号与租户;默认只绑 localhost,对外暴露前一定加 TLS 和访问控制层。
────────────────────────────────────────
统一贴一些截图,供大家了解项目情况
就这些。核心一句话:想给每个 M365 账号配独立出口 IP 来分散风控,Copilot Bridge 这套每账号代理机制基本是开箱即用的,填上 host:port 就能跑。有问题欢迎回帖交流。
如果对你有帮助, 留下个star吧,顺手这里点个赞也是十分感谢的
在使用过程中还会遇到各种问题,我会持续更新此项目,欢迎反馈使用过体验



