本项目将您的个人微软 Copilot(copilot.microsoft.com)网页端转化为可在代码中直接调用的标准 LLM API。 无需购买 API Key,无需预存额度,无需订阅付费计划。 本项目专为个人开发者与教育研究设计,完美支持:
- 🐍 作为 Python 库直接调用:在代码中简单执行
client.chat("你好")即可。支持多轮会话上下文追踪及打字机式的流式输出(Streaming)。 - 🔌 作为本地 OpenAI 兼容服务器运行:在本地
http://localhost:8000/v1启动 Web 服务。它完整适配 OpenAI 接口规范,这意味着官方openaiSDK 以及任何支持自定义 API 基础路径的第三方客户端(如 OneAPI、NextChat、Dify 等)均可无缝无感地用本项目进行平替!
您只需在浏览器中完成一次微软账号的扫码/密码登录,系统就会安全地保存您的本地会话,并在后续运行中自动完成凭证的静默刷新。
⚠️ 声明: 本项目为非官方开源项目,与微软公司(Microsoft)无任何关联或背书关系。本项目仅用于个人学习、研究与自动化测试,请在遵守微软服务条款的前提下合理、合规地使用。
相比其他同类开源桥接器,本项目针对 Windows 平台及复杂的网络环境进行了深度重构与工业级优化,具有以下绝对优势:
- 🤖 Windows 智能一键启动与诊断(独创)
提供极客化的
.\start_service.ps1PowerShell 脚本。每次启动时,它会自动调用verify_auth.py模拟连接微软服务器以智能诊断您的session/token.json登录凭证是否有效。若失效,自动拉起浏览器引导登录;若有效,则自动强杀任何占用8000端口的残留僵尸 Python 进程,实现秒级无缝重启与日志实时跟踪。 - 🔌 复杂代理环境自适应(独创)
Windows 下的代理工具常常会自动将系统环境变量设为
socks5h://。但底层的curl_cffi库在建立 WebSocket 握手时无法直接解析socks5h协议,导致抛出WinError 10061握手失败或 TLS 链接错误。本项目在驱动层与浏览器层加入了自适应协议转换引擎,自动将socks5h://降级转换为标准的socks5://协议,彻底扫除网络代理障碍。 - 🛡️ 终端 GBK 编码崩溃防御(独创)
在 Windows 默认的命令提示符(CMD)或 PowerShell 终端下运行 Python 脚本时,如果 Copilot 输出的内容中包含特殊的 emoji 表情符号(如 🍎, 🤖 等),经常会触发系统的
UnicodeEncodeError: 'gbk' codec can't encode...异常,进而导致 WebSocket 线程中断崩溃。本项目在驱动初始化时注入了标准 I/O 动态流重构机制(sys.stdout.reconfigure(errors="replace")),彻底免除终端编码崩溃的隐患。 - ⚡ 0-I/O 极致性能缓存
在处理高频的首屏刷新与历史探测报告加载时,本项目将报告扫描机制由循环磁盘检索优化为“单次扫描 + 内存缓存字典映射”架构,省去了高频的
stat().st_mtime物理磁盘系统调用,即使在百度网盘等高延迟的云同步盘环境下运行,首屏刷新依然能实现毫秒级响应。 - 🎭 多样化创作风格支持
完美支持三种微软官方对话样式(模型):
copilot:平衡模式(Balanced)copilot-creative:创造力模式(Creative)copilot-precise:精确模式(Precise)
- Python 3.9+
- 拥有一个微软账号(免费的个人账号即可)
- 支持 Windows、macOS 和 Linux 操作系统
打开终端,运行以下命令克隆项目并进入目录:
git clone https://github.com/transcentlin/Copilot-API.git
cd Copilot-API根据您的操作系统选择对应的激活方式:
- Windows (PowerShell):
python -m venv venv venv\Scripts\Activate.ps1💡 注:若提示禁止运行脚本,可先在 PowerShell 中执行一次授权命令:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned。 - macOS / Linux:
python3 -m venv venv source venv/bin/activate
# 1. 安装核心依赖
pip install -r requirements.txt
# 2. 安装 Playwright 专用的 Chromium 浏览器内核(仅需执行一次)
playwright install chromium
# 3. 首次安全登录:系统将弹出一个 Chrome 窗口,请在其中正常登录您的微软账号
python -m copilot login登录成功后,浏览器会自动关闭。您的会话状态将被安全地保存在本地的 session/ 目录中(该目录已被 .gitignore 排除,绝不会上传或共享给任何人),后续运行无需重复登录。
如果您使用的是 Windows 系统,我们强烈建议您直接运行我们精心编写的一键启动脚本:
.\start_service.ps1它将自动为您处理一切起承转合:
- 自动凭证校验:通过连接测试确定
session/token.json中的 Cookie 是否过期。 - 智能唤醒登录:若凭证失效,自动拉起登录窗口供您重新扫码/登录;若有效,则跳过,免除打扰。
- 端口清理:自动查找并强制结束后台占用
8000端口的旧 Python 进程,避免端口冲突。 - 拉起服务:平稳启动 FastAPI 服务,并将实时请求日志打印在控制台上。
如果您更倾向于容器化部署,本项目同样支持使用 Docker 运行 OpenAI 兼容服务器:
⚠️ 重要提示: 请先在宿主机上完成上述的 首次安全登录 步骤(python -m copilot login)。因为 Docker 容器通常处于无桌面的 Headless 环境,无法弹出初始的登录浏览器窗口。容器启动时会通过卷挂载(Volume Mount)直接读取并复用宿主机中已生成的session/凭证,并自动在后台完成后续的 token 刷新。
docker compose up --build
# 成功启动!OpenAI 兼容 API 将运行在 http://localhost:8000docker-compose.yml 已经默认配置了 8000 端口映射与 session/ 目录的绑定挂载。您也可以在此文件中调整速率限制变量 RATE_LIMIT_RPM。
如果您不想使用 Compose,可以直接通过以下两步完成构建和运行:
# 1. 构建镜像
docker build -t copilot-api .
# 2. 挂载本地 session 目录并运行
docker run --rm -p 8000:8000 -v "$(pwd)/session:/app/session" copilot-api如果您开发的项目本身就是 Python,这是最快捷、最轻量的集成方式(无需在后台开启 FastAPI Web 服务器):
from copilot import CopilotClient
# 1. 初始化客户端(自动载入您保存在本地的登录会话)
client = CopilotClient()
# 2. 简单单轮对话,获取完整回复
reply = client.chat("用一句话简短地向我问好。")
print(reply.text)
# 3. 开启连续多轮对话 — 将上轮的 conversation_id 传回即可
reply2 = client.chat("现在请用法语再说一遍?", conversation_id=reply.conversation_id)
print(reply2.text)
# 4. 打字机流式输出(流式对话)
print("\n正在生成搞笑段子:")
for chunk in client.stream("讲一个关于程序员的冷笑话"):
print(chunk, end="", flush=True)
print()- 详细代码示例可参考项目中的:examples/01_direct_chat.py、examples/02_direct_conversation.py、examples/03_direct_stream.py。
python app.py
# -> Copilot OpenAI 兼容 API 已在 http://127.0.0.1:8000 成功运行- 提示:您可以通过环境变量修改绑定的主机和端口,例如:
HOST=0.0.0.0 PORT=8080 python app.py。
启动本地服务器后,您可以像调用 OpenAI 官方接口一样,直接使用 openai 官方库进行调用(只需将 base_url 指向本地,API Key 填任意非空字符串即可):
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="here-is-any-string" # 必需但不会被校验
)
# 支持三种模型:copilot (平衡), copilot-creative (创造力), copilot-precise (精确)
resp = client.chat.completions.create(
model="copilot-creative",
messages=[
{"role": "user", "content": "写一首关于秋天的简短四句诗。"}
],
stream=True # 同样完美支持 stream 流式输出!
)
for chunk in resp:
content = chunk.choices[0].delta.content
if content:
print(content, end="", flush=True)您也可以使用标准的 HTTP 工具(如 curl 或 Postman)直接向接口发送 POST 请求:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "copilot-creative",
"messages": [{"role": "user", "content": "你好!"}],
"stream": false
}'| 请求方法 | 路由地址 | 功能说明 |
|---|---|---|
POST |
/v1/chat/completions |
智能对话接口(支持 "stream": true 和传递 "conversation_id") |
GET |
/v1/models |
获取当前支持的模型列表(copilot, copilot-creative, copilot-precise) |
- 详细服务器接入示例可参考:examples/04_server_http.py、examples/05_server_stream.py、examples/06_server_openai_sdk.py。
除了代码集成,您也可以通过命令行进行快速会话管理:
# 扫码或密码登录,保存会话凭证
python -m copilot login
# 快速单次提问
python -m copilot ask "地球到月球的距离是多少?"微软 Copilot 网页端是基于单用户设计的,其底层的 WebSocket 通信协议不支持来自同一个账号的并发对话流。 为了确保服务器不会因为并发请求而崩溃或返回乱序内容,本桥接器在服务端(server/api.py)设计了全局请求串行化队列锁:所有的并发 HTTP 请求在进入服务后都会自动排队,以串行方式依次向上游微软发送。
这意味着高并发请求会排队等待,并导致响应时间的累加。 您可以运行项目自带的压力测试工具,它会以 2 的指数级(1 → 2 → 4 → 8 ...)不断加倍并发数,直到测出性能瓶颈:
# 终端 1:启动服务器
python app.py
# 终端 2:运行压力测试
python tests/stress.py- 最佳实践建议:请保持并发请求在合理范围(推荐并行度为 1~4)。这是一款优秀的个人桥接工具,请不要使用海量并发恶意请求,珍惜您的微软账号安全。
为了进一步保护微软账号不被判定为异常,本服务器内置了基于**令牌桶算法(Token Bucket)**的速率限流器(server/ratelimit.py)。当您的调用频率超出安全上限时,服务器会返回标准的 HTTP 429 状态码与 Retry-After 响应头。
限流参数可以通过两个环境变量进行调节:
RATE_LIMIT_RPM:每分钟允许的最大请求数(默认值为12。设为0可彻底禁用限流)。RATE_LIMIT_BURST:短时间内允许突发的请求数(默认值为4)。
# 调大限流参数启动服务
RATE_LIMIT_RPM=20 RATE_LIMIT_BURST=5 python app.py- 客户端重试机制:由于
429限流和偶尔的上游502属于短暂波动,建议在您的客户端代码中加入指数退避重试机制(如延迟 1s, 2s, 4s 后重试)。官方openaiSDK 已经默认内置了这种重试退避机制,并会自动处理Retry-After头,因此使用 SDK 可以有效规避此类报错。
Copilot-API/
├── copilot/ # 核心库:处理客户端初始化、Auth授权、Playwright登录与协议驱动
├── server/ # FastAPI 服务端实现:包含接口路由与速率限制机制
├── examples/ # 丰富且开箱即用的调用示例(Python库、OpenAI SDK、流式输出等)
├── tests/ # 测试脚本目录(包含并发压力测试与限流测试)
├── app.py # 核心入口:运行此文件启动 FastAPI 兼容服务器
├── verify_auth.py # 智能诊断:模拟发包以快速验证本地凭证是否过期
├── start_service.ps1 # 强力一键启动:Windows 用户的智能运维管理脚本
├── requirements.txt # Python 依赖清单
├── Dockerfile # Docker 镜像构建配置
└── docker-compose.yml # Docker 容器编排配置
- 原因分析:由于微软使用了 Cloudflare 等高级防爬服务,很多数据中心的公网 IP(Datacenter IP)会被直接拦截或要求进行人机身份验证(Turnstile),使得 Headless 状态下的 WebSocket 握手卡在验证环节。
- 解决方案:建议在该服务器上通过桌面环境打开 Chrome 浏览器访问 copilot.microsoft.com 手动通过一次“确认您是人类”的验证。这会生成最新的
cf_clearance缓存 Cookie,保存到session/后即可自动复用。或者,您也可以将服务器的出口流量通过住宅代理(Residential Proxy)路由。
- 原因分析:Docker 容器默认不带有可视化桌面,无法拉起扫码登录浏览器。
- 解决方案:请严格按照文档说明,先在宿主机上运行
python -m copilot login完成首次登录,确保本地生成了有效的session/文件夹,然后再启动 Docker 容器。Docker Compose 已经做好了卷挂载,会自动读取该目录。
本项目基于个人学习与教育研究目的开源。您在使用过程中应自行承担相应责任,并自觉遵守微软的服务条款。祝您开发愉快!
