Skip to content

Repository files navigation

M365 Copilot OpenAI Bridge — Server Final7

一个面向服务器部署的非官方兼容网关,把 Microsoft 365 Copilot ChatHub 适配为常见的 OpenAI/Anthropic 风格 HTTP 接口。项目重点处理长流式响应、工具调用、跨轮上下文、严格账号顺序切换和生产安全边界。

服务器版本:Server Final7 发布基线:2026-08-23 许可证:GNU AGPL-3.0-only

本仓库是从经过生产验证的服务器版本拆出的脱敏公开版,不包含任何真实账号、令牌、API Key、代理、域名、IP、证书、日志或生产数据。

主要能力

  • POST /v1/chat/completions,支持流式和非流式 Chat Completions。
  • POST /v1/responses,支持 Responses 事件流、previous_response_id 与跨轮工具结果。
  • POST /v1/messages,提供 Anthropic Messages 兼容入口。
  • POST /v1/images/generations,提供图片生成兼容入口。
  • OpenAI 风格模型目录与模型详情。
  • 多模态输入、结构化函数工具、工具进度、输出上限和长响应自动续写。
  • 单活账号、严格顺序故障转移;不会随机扫号。
  • WebSocket 断流后,在安全条件下执行同账号、同会话的一次续流。
  • 管理后台、API Key 哈希存储、登录限速、代理安全校验和调试日志脱敏。
  • 非 root 容器、只读根文件系统、全部 Linux capabilities 丢弃。

明确限制

  • /v1/realtime 当前返回 501 Not Implemented。本版本不提供实时语音 WebSocket,避免把文本流错误地伪装成语音能力。
  • 这是社区项目,不是 Microsoft、OpenAI 或 Anthropic 官方产品。
  • 使用者必须自行确认其账号、订阅、地区、自动化方式和部署场景符合相关服务条款与当地法律。

快速启动

要求:Docker Engine 与 Docker Compose v2。

mkdir -p secrets
openssl rand -base64 32 > secrets/m365_admin_password
chmod 600 secrets/m365_admin_password
cp .env.example .env
docker compose up -d --build

默认只监听宿主机 127.0.0.1:4141,避免管理接口直接暴露到公网。生产环境应通过 HTTPS 反向代理访问;示例位于 ops/nginx/

首次启动后:

  1. 通过管理后台登录。
  2. 添加并授权 Microsoft 365 账号。
  3. 在“访问配置”中创建 API Key。
  4. 把客户端 Base URL 配置为 https://你的域名/v1

本地 HTTP 调试时可以在 .env 中临时设置 M365_COOKIE_SECURE=false;公网部署必须恢复为 true

OpenAI 兼容调用

curl https://m365.example.com/v1/chat/completions \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "gpt-5.6-sol",
    "messages": [{"role": "user", "content": "你好"}],
    "stream": true
  }'

Responses API:

curl https://m365.example.com/v1/responses \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "gpt-5.6-sol",
    "input": "请给出一个简短的健康检查方案",
    "stream": true
  }'

账号路由语义

  • 任意时刻只有一个活动账号。
  • 未使用账号不参与后台对话或并行探测。
  • 发生可切换错误时严格按管理后台顺序推进到直接后继账号。
  • 首个可见输出之前,一次请求最多尝试当前账号及其直接后继。
  • 输出已经可见后不跨账号从头重放,防止重复文本和重复工具副作用。
  • 文本流在具备上游会话状态时,可以在同账号、同会话内续流一次。
  • 配额、鉴权、代理、HTTP、WebSocket 和客户端取消分别分类处理,不共享一个笼统冷却状态。

数据与密钥

运行状态默认写入 Docker 命名卷 m365-copilot-openai-bridge-data,避免 Linux 新建 bind mount 目录时出现 root 权限问题。一次性 secret-init 服务会读取宿主机权限为 0600./secrets/m365_admin_password,复制到独立命名卷并设置为容器用户 UID 100、权限 0400;主服务不会以 root 身份读取 secret。secrets/.gitignore.dockerignore 排除。

备份运行状态:

docker run --rm \
  -v m365-copilot-openai-bridge-data:/data:ro \
  -v "$PWD":/backup \
  alpine:3.24 tar -C /data -czf /backup/m365-data-backup.tar.gz .

该备份包含账号令牌和 API Key 哈希,必须作为敏感文件离线保存,绝不能提交到仓库。

不要提交以下文件:

  • token-cache.json
  • api-keys.json
  • sessions.json
  • admin-password.hash
  • debug-logs.jsonl
  • 任何 .env、证书、私钥、代理凭据或抓包

测试

go test ./...
go vet ./...
go test -race ./internal/web ./internal/chathub ./internal/proxy
docker build -t m365-copilot-openai-bridge:server-final7 .

ops/ 还包含协议矩阵、Hermes/OpenCode 兼容测试、API Key 稳定性测试和 30 分钟混合压力测试。测试真实模型时请保持低频,避免测试本身制造账号风控。

安全

生产部署前请阅读 SECURITY.md。默认配置要求显式管理员密码、拒绝不安全默认密码,并把服务绑定到 loopback。不要把管理界面直接暴露到公网 IP。

贡献

请阅读 CONTRIBUTING.md。提交 bug 时必须删除账号、令牌、邮件、代理、域名、IP 和完整请求内容。

免责声明

本项目按现状提供,不保证第三方上游协议长期稳定。Microsoft、Microsoft 365、Copilot、OpenAI、Anthropic 及相关名称可能是其各自所有者的商标。本项目与这些公司没有隶属、授权或背书关系。

About

No description, website, or topics provided.

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages