【免费下载链接】Windows-Copilot-API
Reverse engineered Windows Copilot into an OpenAI-compatible API. Access GPT-4 and GPT-5 models through a simple REST interface without API keys or billing.
如果你已经在用 OpenAI SDK,却想省掉 API Key 和账单,Windows-Copilot-API就是答案:它把免费的 Microsoft Copilot 反向工程成一个OpenAI 兼容 API,本地起一个服务后,你现有的chat.completions代码几乎不用动,只要把请求地址指向localhost即可调用。本文将带你完成一次真正的"零改造"迁移。
为什么值得迁移?3 个核心理由
在动手之前,先搞清楚它能给你带来什么:
- 💸完全免费:使用你自己的 Copilot 账号(普通的微软/谷歌账号即可),不需要 API Key,不走任何计费通道。
- 🔌Drop-in 替换:服务端说的就是 OpenAI 协议,任何 OpenAI 兼容客户端把它指向
localhost就能直接工作。 - 🌊流式 + 多轮对话:支持 token 级流式输出,也能通过
conversation_id延续同一段对话线程。
⚠️ 这是一个非官方项目,与微软无隶属关系,仅用于个人使用,请遵守微软服务条款、理性使用。
接入前准备:2 分钟搭建本地 OpenAI 服务
迁移的第一步是把本地服务跑起来。整个过程只需要一条登录命令,会话会自动保存和刷新。
1️⃣ 获取项目并安装依赖(需 Python 3.9+):
git clone https://gitcode.com/gh_mirrors/wi/Windows-Copilot-API cd Windows-Copilot-API pip install -r requirements.txt2️⃣ 安装 Playwright 所需的浏览器,并登录一次(会自动打开浏览器,登录微软/谷歌账号后浏览器自动关闭):
playwright install chromium python -m copilot login3️⃣ 启动 OpenAI 兼容服务:
python app.py # -> Copilot OpenAI-compatible API on http://127.0.0.1:8000启动成功后,你的"新 OpenAI"地址就是http://localhost:8000/v1。服务由 app.py 启动,核心逻辑在 server/api.py,OpenAI 报文格式由 server/openai_format.py 构造。
核心迁移:只改两行代码
这是整篇文章最关键的部分。对比你原来的 OpenAI 写法,只需要修改base_url,并给api_key填任意占位值(SDK 强制要求,但服务端会忽略它):
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": "你好!"}], ) print(resp.choices[0].message.content)就这么简单。官方示例可参考 examples/06_server_openai_sdk.py。
一个必改项:模型名
Copilot 没有模型选择器,所以服务只对外暴露一个模型,名字叫copilot。因此把代码里的gpt-4/gpt-4o统一替换成copilot即可(性能大约处于 GPT-4 级别)。
三种请求方式:单轮、流式与多轮对话
1. 标准单轮请求
如上文的chat.completions.create,一次一问,返回完整文本。
2. 流式输出(逐 token 打印)
在请求体里加"stream": true,SDK 会自动以流式返回,体验上和 OpenAI 完全一致:
for chunk in client.chat.completions.create( model="copilot", messages=[{"role": "user", "content": "讲个短笑话"}], stream=True, ): print(chunk.choices[0].delta.content or "", end="", flush=True)3. 多轮对话(延续上下文)
Copilot 有自己的会话标识conversation_id,它不在 OpenAI 标准 schema 内,所以 SDK 会把它放进model_extra。想要延续上一轮,就把上次的 id 通过extra_body传回去:
# 从响应里取出会话 id(不在标准字段中) extra = getattr(resp, "model_extra", None) or {} cid = extra.get("conversation_id") # 下一轮携带该 id,即可继续同一线程 client.chat.completions.create( model="copilot", messages=[{"role": "user", "content": "现在用法语再说一遍?"}], extra_body={"conversation_id": cid}, )请求/响应结构定义见 server/schemas.py,完整示例清单见 examples/README.md。
注意事项:限流、单模型与返回差异
迁移时这几点和官方 OpenAI 略有不同,提前了解可避免踩坑:
| 项目 | 说明 |
|---|---|
| 限流 | 服务默认限制 12 次/分钟,超限返回标准429+Retry-After头,openai SDK 会自动指数退避重试。可用环境变量RATE_LIMIT_RPM/RATE_LIMIT_BURST调整。 |
| 单模型 | 只有一个copilot模型,没有gpt-4o-mini之类的可选列表。 |
| 参数被忽略 | temperature、max_tokens等字段会被接收但忽略(消费版协议不暴露这些开关)。 |
| usage 为 0 | 因为不走计费,usage里的 token 数恒为 0。 |
| 鉴权失效 | Cloudflare 凭证约 30 分钟过期,服务端过期时返回503,在宿主机重跑python -m copilot login即可恢复。 |
限流实现见 server/ratelimit.py,默认阈值在 server/config.py。
常见问题排查
503(clearance_required):Cloudflare 凭证过期,重跑python -m copilot login重新登录即可。502(upstream_error):上游 Copilot 在高并发下的偶发抖动,属于临时错误,稍后重试即可。429(rate_limit_exceeded):请求过快,稍等Retry-After秒数后重试;建议保持并发在 1–4 之间。- 登录 / 网络异常:运行内置诊断工具会自动刷新会话并生成可分享的报告(敏感信息已脱敏):
python tests/diagnostic.py迁移清单(TL;DR)
- 本地起服务:
python app.py,得到http://localhost:8000/v1。 - SDK 中
base_url指向该地址,api_key填"unused"。 - 模型名统一改成
copilot。 - 需要多轮时,用
extra_body={"conversation_id": cid}回传会话 id。 - 其余
messages、stream等用法与原 OpenAI 代码保持一致。
照上面 5 步走,你的存量 OpenAI 代码基本无需重写就能"搬到"本地免费通道——这正是Windows-Copilot-API作为 OpenAI 兼容中间层的价值所在。
【免费下载链接】Windows-Copilot-API
Reverse engineered Windows Copilot into an OpenAI-compatible API. Access GPT-4 and GPT-5 models through a simple REST interface without API keys or billing.
相关推荐
零代码改造:Perplexica无缝对接云服务指南
零代码改造:Perplexica无缝对接云服务指南 你是否还在为开源AI搜索引擎Perplexica对接云服务感到困惑?配置密钥总是出错?API端点不知如何设置
人工智能大模型AI 应用本地部署后端前端零代码改造!FastAPI系统无缝迁移到MCP架构的实战指南
零代码改造!FastAPI系统无缝迁移到MCP架构的实战指南 你是否正面临API系统与AI模型集成的困境?现有接口无法被智能助手直接调用?用户需要反复复制粘贴数
后端MCP 服务工具调用librdkafka时间戳管理:消息创建时间与日志追加时间的精确控制
librdkafka时间戳管理:消息创建时间与日志追加时间的精确控制 概述 在现代分布式消息系统中,时间戳(Timestamp)是确保消息有序性、追踪消息生命周
AI Agent人工智能前端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考