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, 云资产清单, 内存规避, 大语言模型, 无后门, 特征检测, 自动化代码审查, 逆向工具, 逆向工程