news 2026/10/14 16:04:42

Windows-Copilot-API 流式输出教程:3 种方式实现实时逐字打印的 AI 打字机效果

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Windows-Copilot-API 流式输出教程:3 种方式实现实时逐字打印的 AI 打字机效果

【免费下载链接】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.

项目地址:https://gitcode.com/gh_mirrors/wi/Windows-Copilot-API
点击查看免费下载

想用Windows-Copilot-API实现 AI 打字机效果?这篇流式输出教程带你用 3 种方式拿到实时逐字打印的结果:Python 库直接流式、HTTP 服务器 SSE 流式、官方 OpenAI SDK 流式。无需 API Key,无需计费,基于自己的 Copilot 账号,2 分钟就能跑起来 🚀

什么是流式输出?为什么需要打字机效果

普通的chat()调用要等模型把整段回答生成完才返回。回答越长,等待越久,体验越"闷"。

流式输出(streaming)则完全不同:模型边生成、边把一小段一小段的文字(chunk)推送给你的程序,你边收边打印,就像聊天窗口里字一个个蹦出来一样。

Windows-Copilot-API 的两种使用方式都原生支持流式:

  • 🐍 Python 库:client.stream()返回可迭代对象
  • 🔌 HTTP 服务器:请求体里加"stream": true,服务端以Server-Sent Events(SSE)格式推送

核心实现分别在 copilot/client.py(CopilotClient.stream)和 server/openai_format.py(SSE 数据块构造)。

准备工作:克隆项目并完成一次登录

git clone https://gitcode.com/gh_mirrors/wi/Windows-Copilot-API cd Windows-Copilot-API python -m venv venv source venv/bin/activate # Windows 用 venv\Scripts\activate.bat pip install -r requirements.txt playwright install chromium python -m copilot login # 打开浏览器登录一次,之后自动复用

登录完成后,会话保存在session/目录,每次运行自动复用,无需重复登录 ✅

方式一:Python 库直接流式(最简单)

如果你的代码本身就是 Python,这是最快上手的路径,完整示例见 examples/03_direct_stream.py:

from copilot import CopilotClient client = CopilotClient() stream = client.stream("Tell me a short, clean joke.") for chunk in stream: print(chunk, end="", flush=True) # 每收到一段就立刻打印 print() print("conversation_id:", stream.conversation_id)

几个关键细节:

  • stream是ChatStream对象,可以像普通迭代器一样for循环,每轮产出一小段文本(字符串)
  • flush=True是打字机效果的关键:不刷新的话输出会滞留在缓冲区,看起来就是一次性冒出来的
  • conversation_id随流自动填充:开始新对话时 id 在迭代开始后自动写入stream.conversation_id,把它传给下一次调用即可续接同一个对话
  • 流式调用若遇到 Cloudflare 校验过期,客户端会自动打开浏览器刷新验证并重试,恢复发生在输出任何文字之前,所以不会重复打印(见 copilot/client.py 中_stream_with_recovery的说明)

对比非流式:client.chat("...")会缓冲完整回答后一次性返回ChatReply(含text、conversation_id、images),适合不需要实时展示的场景,参见 examples/01_direct_chat.py。

方式二:HTTP 服务器 SSE 流式(跨语言通用)

需要给别人用、或者前端网页实时展示时,启动本地 OpenAI 兼容服务器更合适。

第一步,在终端启动服务器(详见 server/api.py):

python app.py # -> Copilot OpenAI-compatible API on http://127.0.0.1:8000

第二步,发送请求。注意流式需要两个stream:请求体里的"stream": true让服务器切换为 SSE 模式,而 HTTP 客户端侧的stream=True让你可以逐行读取响应,完整示例见 examples/05_server_stream.py:

import json import requests with requests.post("http://localhost:8000/v1/chat/completions", json={ "model": "copilot", "stream": True, "messages": [{"role": "user", "content": "Tell me a short, clean joke."}], }, stream=True) as response: for line in response.iter_lines(): if not line or not line.startswith(b"data: "): continue payload = line[len("data: "):] if payload == b"[DONE]": # 流结束标记 break chunk = json.loads(payload) piece = chunk["choices"][0]["delta"].get("content") if piece: print(piece, end="", flush=True)

理解 SSE 数据格式只需要知道 3 件事:

内容位置
文字片段每个data: {...}块里的choices[0].delta.content
对话 id只有最后一个chunk 携带顶层conversation_id
结束信号data: [DONE]

⚠️ 与方式一不同,服务器运行在无头模式:若 Cloudflare 校验过期,它不会弹浏览器,而是直接返回503(type: "clearance_required")。在主机会话上重新执行python -m copilot login后再重试即可。

方式三:官方 OpenAI SDK 流式(对已有代码零改动)

如果你的项目已经在用 OpenAI SDK,只需把base_url指向本地服务器,流式代码与调用 OpenAI 时完全一致。先pip install openai,完整示例见 examples/06_server_openai_sdk.py:

from openai import OpenAI client = OpenAI(base_url="http://localhost:8000/v1", api_key="unused") stream = client.chat.completions.create( model="copilot", messages=[{"role": "user", "content": "Say hello in one short sentence."}], stream=True, ) for chunk in stream: if chunk.choices and chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="", flush=True)

由于conversation_id不在 OpenAI 标准 schema 中,SDK 会把它放进model_extra;要续接对话,用extra_body={"conversation_id": cid}回传即可。SDK 还会自动处理429限流的指数退避重试,省心很多。

流式输出的实用注意事项

  • 限流:服务器默认每分钟最多 12 个请求(RATE_LIMIT_RPM),超出返回标准429+Retry-After头,实现见 server/ratelimit.py。建议客户端做指数退避(1s → 2s → 4s)
  • 并发:上游 Copilot 聊天 socket 不支持同一账号并发会话,服务器会把请求串行排队处理,保持同时在途请求数在 1–4 个左右最稳
  • 模型名称:服务器只有一个模型,就叫copilot,通过GET /v1/models可以确认
  • 前端接入:SSE 是标准 Web 技术,浏览器里用EventSource或 fetch 流式读取同一接口即可,把print换成往 DOM 追加文本

总结

场景推荐方式示例文件
本地 Python 脚本、快速验证CopilotClient.stream()examples/03_direct_stream.py
跨语言 / 前端 / 其他客户端HTTP + SSE("stream": true)examples/05_server_stream.py
已有 OpenAI SDK 代码改base_url即可examples/06_server_openai_sdk.py

三种方式的打字机效果都来自同一个原理:逐段接收、逐段打印、及时刷新。跑通任意一种后,你可以参考 examples/ 目录下的 README.md 把 6 个示例全部过一遍,基本就掌握了 Windows-Copilot-API 的全部用法 🎉

【免费下载链接】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.

项目地址:https://gitcode.com/gh_mirrors/wi/Windows-Copilot-API
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 16:04:20

CycleGAN完整解析:无监督条件生成如何突破配对数据困境

很多讲生成对抗网络的文章都喜欢用“把马变成斑马”作为开场例子。它看起来就像给照片套了一层滤镜,但真正动手训练过才会发现,这是个比想象麻烦得多的问题——训练数据里只有一堆马的照片和一堆斑马的照片,没有任何一张“同一匹马长了斑马条…

作者头像 李华
网站建设 2026/10/14 16:04:02

国家大地2000精准转换器:椭球、投影与七参数避坑指南

简介:这份资源是面向测绘、GIS 从业者与相关专业学生的坐标转换工具包,重点解决国家大地2000(CGCS2000)与西安80(Xian 1980)两套坐标系统之间的高精度互转问题。包内以 COORD GM2.0 转换软件为核心&#xf…

作者头像 李华
网站建设 2026/10/14 16:03:51

以太网IO模块与Modbus TCP协议适配:从接线到联调的全流程实战

做自动化项目最怕什么?不是PLC程序写不出来,而是设备之间说不上话。我接过不少现场改造的活儿,最常见的卡点就是第三方IO模块和上位机之间的通讯适配。最近一套项目里用了综科智控的以太网IO模块,配合Modbus TCP协议做数据采集和继…

作者头像 李华
网站建设 2026/10/14 16:03:27

impeccable:轻量CLI+浏览器扩展协同的可执行产品工作流

1. 项目概述:从一个词出发,构建可落地的开发者工具链“impeccable”这个词本身是英文形容词,意为“无懈可击的、无可挑剔的、完美无瑕的”。它不是技术名词,没有内置功能,不指向任何具体协议或架构。但恰恰是这种高度抽…

作者头像 李华
网站建设 2026/10/14 16:03:08

数字乡村+智慧农业数字化转型大数据平台建设方案:农业大数据中心为大脑,物联网平台为感知神经,综合指挥决策平台为中枢

该方案是一套全面、系统、可落地的数字乡村与智慧农业建设指南。它以农业大数据中心为大脑,以物联网平台为感知神经,以综合指挥决策平台为中枢,通过3大服务平台和4大类应用,致力于解决当前农业产销脱节、管理粗放、融资困难等痛点…

作者头像 李华