sums001/Windows-Copilot-API
GitHub: sums001/Windows-Copilot-API
该项目通过逆向工程将免费的 Microsoft Copilot 聊天功能转换为本地 OpenAI 兼容的 API,使开发者无需 API 密钥或付费即可在代码中调用大模型。
Stars: 150 | Forks: 37
# Windows Copilot API:由 Microsoft Copilot 提供支持的免费 LLM API
**使用你自己的 Microsoft Copilot 账号。** 无需 API 密钥,无需额度,无需付费计划:它将 [copilot.microsoft.com](https://copilot.microsoft.com) 上的免费聊天转变为可以通过代码调用的 API。
你可以通过两种方式使用它:
- 🐍 **作为 Python 库:** 只需调用 `client.chat("Hi")`。支持流式传输和多轮对话。
- 🔌 **作为本地 OpenAI 兼容 API:** 在 `http://localhost:8000/v1` 运行一个使用 OpenAI 格式的服务器,因此官方的 `openai` SDK(以及任何 OpenAI 兼容的应用)都可以直接替代使用,只需将 OpenAI 替换为 `localhost`。
你只需在浏览器中使用 Microsoft 账号登录一次;之后你的 session 将会被自动保存和刷新。
## 为什么使用这个?
- **免费:** 使用你正常登录的 Copilot,没有 API 账单。
- **直接替代 OpenAI:** 将任何 OpenAI 客户端指向 `localhost` 即可直接运行。
- **在你已登录的任何地方都可用:** 即使在*匿名* Copilot 被阻止的地区(例如印度),已登录的路径也可以正常工作。
- **流式传输 + 对话:** 支持 token 级别的输出以及由 `conversation_id` 标识的多轮线程。
## 环境要求
- **Python 3.9+**
- 一个 **Microsoft 账号**(你用于 Copilot 的免费账号即可)
- 适用于 Windows、macOS 和 Linux
## 设置(2 分钟)
```
# Clone 项目
git clone
cd Windows-Copilot-API
```
**2. 创建并激活虚拟环境**
在 **macOS / Linux** 上:
```
python3 -m venv venv
source venv/bin/activate
```
在 **Windows** (PowerShell) 上:
```
python -m venv venv
venv\Scripts\Activate.ps1
```
**3. 安装依赖并登录**
```
# 安装依赖
pip install -r requirements.txt
# 安装 Playwright 所需的浏览器(一次性)
playwright install chromium
# 登录一次:浏览器会打开,登录你的 Microsoft 账户
python -m copilot login
```
大功告成。你的 session 保存在 `session/` 下(已被 git 忽略,绝不会共享),并在每次运行时重复使用。
## 用法 1:在 Python 中使用(无需服务器)
如果你的代码已经是 Python,这是最简单的方法。
```
from copilot import CopilotClient
client = CopilotClient() # loads your signed-in session
# 获取完整回复
reply = client.chat("Say hello in one short sentence.")
print(reply.text)
# 继续 SAME 会话 — 传回 id
reply2 = client.chat("And now in French?", reply.conversation_id)
print(reply2.text)
# 在输入时流式传输答案
for chunk in client.stream("Tell me a short joke"):
print(chunk, end="", flush=True)
```
`chat()` 返回完整文本以及一个 `conversation_id`;将该 id 传回即可保持线程继续,或者省略它以重新开始。`stream()` 会逐块生成回复。
👉 更多:[examples/01_direct_chat.py](examples/01_direct_chat.py)、[02_direct_conversation.py](examples/02_direct_conversation.py)、[03_direct_stream.py](examples/03_direct_stream.py)
## 用法 2:作为 OpenAI 兼容服务器
启动一个使用 OpenAI API 格式的本地服务器,以便现有的 OpenAI 工具和 SDK 无需更改即可工作。
```
python app.py
# -> 在 http://127.0.0.1:8000 上的 Copilot OpenAI-compatible API
```
然后将任何 OpenAI 客户端指向它(SDK 需要 API 密钥,但此处会被忽略):
```
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="unused")
resp = client.chat.completions.create(
model="copilot",
messages=[{"role": "user", "content": "Hello!"}],
)
print(resp.choices[0].message.content)
```
或者使用普通的 HTTP / `curl` 调用它:
```
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"messages": [{"role": "user", "content": "Hello!"}]}'
```
**Endpoints**
| 方法 | 路径 | 描述 |
| --- | --- | --- |
| `POST` | `/v1/chat/completions` | 聊天(支持 `"stream": true` 和可选的 `"conversation_id"`) |
| `GET` | `/v1/models` | 列出单个 `copilot` 模型 |
👉 更多:[examples/04_server_http.py](examples/04_server_http.py)、[05_server_stream.py](examples/05_server_stream.py)、[06_server_openai_sdk.py](examples/06_server_openai_sdk.py)
## 命令行
```
python -m copilot login # sign in and save the session
python -m copilot ask "Hello!" # quick one-shot question
```
## 并发与压力测试
该服务器桥接了**单个**已登录的 Copilot 账号,而 Copilot 的聊天
socket 无法容忍来自同一进程的并发对话。因此服务器会
**串行化** 上游调用:并行的 HTTP 请求会在锁后排队并
逐一运行(参见 [server/api.py](server/api.py))。这是有意为之的,这意味着
吞吐量是顺序的,而不是并行的。
你可以使用内置的压力测试来测量它的崩溃临界点,该测试会发送
一批同时发生的请求,并**在每轮成功后将批次大小翻倍**,
直到出现第一个错误:
```
# 在一个终端中启动服务器
python app.py
# 在另一个终端中增加并发 (1 → 2 → 4 → 8 → …)
python tests/stress.py
python tests/stress.py --max 64 --timeout 120 --url http://localhost:8000
```
**示例运行**(单个已登录账号):
| 并发数 | 结果 | 挂钟时间 | 延迟 (最小 / 中位数 / 最大) |
| --- | --- | --- | --- |
| 1 | ✓ 全部成功 | 3.7s | 3.7 / 3.7 / 3.7s |
| 2 | ✓ 全部成功 | 4.6s | 3.4 / 4.6 / 4.6s |
| 4 | ✓ 全部成功 | 8.3s | 3.7 / 6.7 / 8.3s |
| 8 | ✗ 1 个失败 (`HTTP 502`) | 13.3s | 3.5 / 9.7 / 13.3s |
**完全成功的最高并发数:4。** 每轮的挂钟时间大约翻倍,
而*最小*延迟保持不变(约 3.5s)——这是串行队列的典型特征:
一个请求立即运行,其余的排队等待。并发数为 8 时的失败是上游的
`502` 错误(Copilot 在负载下拒绝请求),而不是服务器崩溃或
超时——因此确切的崩溃点并不稳定,并且可能在不同运行之间有所差异。
## 项目结构
| 路径 | 作用 |
| --- | --- |
| [copilot/](copilot/) | 核心库:`CopilotClient`、身份验证、浏览器登录、HTTP driver |
| [server/](server/) | FastAPI OpenAI 兼容服务器 |
| [examples/](examples/) | 涵盖每个功能的可运行示例 ([examples/README.md](examples/README.md)) |
| [tests/](tests/) | 测试脚本,包括并发压力测试 ([tests/stress.py](tests/stress.py)) |
| [app.py](app.py) | 启动服务器 |
## 注意事项与限制
- **登录一次,然后重复使用。** 缓存的 token 会自动刷新;你只有在 session 完全过期时才需要重新登录。
- **没有每日限制,但请适度使用。** Microsoft 不会施加每日聊天上限,但请适度使用,不要发送垃圾信息或使用自动化批量请求轰炸它。
- **单一模型。** Copilot 没有模型选择器,因此服务器只提供一个名为 `copilot` 的单一模型。
- **大致属于 GPT-4 级别。** 在 GPQA Diamond(198 道闭卷研究生级别问题)上,它的得分为 **40.9%**,这使其处于 GPT-4 系列范畴,而不是推理级别 (o1/o3)。使用 [tests/gpqa_bench.py](tests/gpqa_bench.py) 测量。
- **你的 session 是私密的。** `session/` 中的所有内容(cookies + token)都保留在你的机器上,并且已被 git 忽略。
## 故障排除
**在服务器/VPS 上出现 `RuntimeError: Copilot error: invalid-event`(或聊天挂起)。**
在数据中心 IP 上,Cloudflare 会拒绝发放机器人放行许可,因此有时聊天 socket 会因空挑战而停滞。**手动修复:** 在该机器上的浏览器中打开 [copilot.microsoft.com](https://copilot.microsoft.com) 并通过一次“验证你是人类”的检查;这将设置一个 `cf_clearance` cookie,保存的 session 会重复使用它。如果它过期了,请重新执行此操作,或者通过住宅连接(例如家庭 PC 出口节点)路由服务器的流量。
## 许可证
仅供个人和教育用途。你有责任遵守 Microsoft 的服务条款。
标签:AI, API网关, DLL 劫持, OpenAI, Python, Spyse API, 云资产清单, 内存规避, 大语言模型, 无后门, 特征检测, 自动化代码审查, 逆向工具, 逆向工程