Windows Copilot反代OpenAI API:本地化AI服务部署与实践指南
在实际开发中很多开发者希望使用 OpenAI 兼容的 API 接口来调用大语言模型但直接使用 OpenAI 官方服务可能面临网络访问、费用成本或账号注册等问题。Windows Copilot 是微软集成在 Windows 系统中的 AI 助手功能它内置了访问 GPT 系列模型的能力。通过反向代理技术我们可以将 Windows Copilot 的本地接口转换为标准的 OpenAI API 格式从而让支持 OpenAI 协议的应用如 LangChain、AutoGPT、各类 AI 工具直接使用本地化服务。本文将详细介绍如何利用开源项目 Windows-Copilot-API将 Windows Copilot 的本地能力封装成 OpenAI 兼容的 HTTP 接口。你将学会环境准备、服务部署、接口验证和常见问题排查的全过程最终获得一个可在本地或内网环境中稳定运行的 OpenAI 替代端点。1. 理解 Windows Copilot 反代 OpenAI 接口的工作原理1.1 什么是反向代理反向代理Reverse Proxy是一种网络架构模式客户端不直接访问后端服务而是通过一个中间服务器转发请求。反向代理服务器接收客户端的请求然后将请求转发到内部的一个或多个服务器并将响应返回给客户端。对于客户端来说它只知道反向代理服务器的地址而不清楚后端实际服务的细节。在本文场景中Windows Copilot 本身提供了本地 AI 能力但它没有提供标准的 OpenAI API 接口。我们需要一个反向代理服务接收标准 OpenAI API 格式的请求将其转换为 Windows Copilot 可识别的格式调用本地 Copilot 服务再将结果转换回 OpenAI API 标准格式返回给客户端。1.2 Windows-Copilot-API 项目的作用Windows-Copilot-API 是一个开源项目主要功能是监听本地 HTTP 端口提供 OpenAI 兼容的 API 端点将接收到的 OpenAI 格式请求转换为 Windows Copilot 可处理的格式通过 Windows 系统接口调用本地的 Copilot 功能将 Copilot 的响应重新封装为 OpenAI API 标准格式处理认证、错误转换和会话管理这样任何支持 OpenAI API 的应用程序只需将 API 基地址指向本地服务就可以无缝使用 Windows Copilot 的能力而无需修改代码。1.3 适用场景和限制这种方案特别适合以下场景开发测试环境需要免费的 GPT 接口进行功能验证内部工具希望集成 AI 能力但不想依赖外部 API 服务网络环境受限无法直接访问 OpenAI 官方服务需要控制 AI 服务调用成本的项目需要注意的限制包括依赖 Windows 11 及以上版本系统需要系统已启用并可正常使用 Windows Copilot性能受本地硬件和系统资源限制功能可能随 Windows 系统更新而变化2. 环境准备和前置条件检查2.1 系统要求验证在开始部署前需要确认系统满足以下要求操作系统要求Windows 11 22H2 或更高版本系统已激活并登录 Microsoft 账户Windows Copilot 功能正常可用硬件要求至少 8GB 内存推荐 16GB 或以上稳定的网络连接足够的磁盘空间用于安装依赖软件要求Python 3.8 或更高版本Git 版本控制工具管理员权限部分操作需要2.2 检查 Windows Copilot 可用性在部署反代服务前必须先验证 Windows Copilot 本身是否正常工作按下Win C快捷键检查是否能打开 Copilot 侧边栏在 Copilot 中输入简单问题如你好确认能正常回复如果 Copilot 无法使用需要先解决系统层面的问题检查 Windows 更新确保为最新版本验证 Microsoft 账户登录状态检查地区设置某些地区可能限制 Copilot 功能确认没有组策略或企业设置禁用 Copilot2.3 安装必要的开发工具确保系统中已安装以下工具检查 Python 安装python --version # 应该输出 Python 3.8 或更高版本 pip --version # 确认 pip 包管理器可用如果未安装 Python从官网下载安装包访问 https://www.python.org/downloads/下载 Windows 版本安装程序安装时勾选Add Python to PATH选项检查 Git 安装git --version # 确认 Git 已安装如果未安装 Git从 https://git-scm.com/download/win 下载安装。3. 部署 Windows-Copilot-API 服务3.1 获取项目代码使用 Git 克隆项目仓库到本地git clone https://github.com/sums001/Windows-Copilot-API.git cd Windows-Copilot-API如果网络环境访问 GitHub 困难也可以下载 ZIP 压缩包访问 https://github.com/sums001/Windows-Copilot-API点击 Code 按钮选择 Download ZIP解压到合适的目录3.2 安装 Python 依赖项目根目录通常包含requirements.txt文件列出了所有必要的依赖包# 安装项目依赖 pip install -r requirements.txt如果遇到权限问题可以尝试# 使用用户安装模式 pip install --user -r requirements.txt # 或者在虚拟环境中安装 python -m venv venv venv\Scripts\activate pip install -r requirements.txt常见的依赖包包括fastapi: 用于构建 API 服务uvicorn: ASGI 服务器用于运行服务requests: 处理 HTTP 请求pydantic: 数据验证和设置管理3.3 配置服务参数查看项目中的配置文件通常是config.py或settings.py了解可调整的参数# 示例配置内容 import os from typing import Optional class Settings: # API 服务监听端口 API_PORT: int int(os.getenv(API_PORT, 8000)) # API 服务监听地址 API_HOST: str os.getenv(API_HOST, 127.0.0.1) # 是否开启调试模式 DEBUG: bool os.getenv(DEBUG, False).lower() true # 请求超时时间秒 REQUEST_TIMEOUT: int int(os.getenv(REQUEST_TIMEOUT, 30)) # 最大上下文长度 MAX_CONTEXT_LENGTH: int int(os.getenv(MAX_CONTEXT_LENGTH, 4096)) settings Settings()可以通过环境变量或直接修改配置文件来调整这些参数。3.4 启动反代服务使用项目提供的启动脚本或直接运行主程序# 方式一使用项目提供的启动脚本 python main.py # 方式二使用 uvicorn 直接启动如果项目基于 FastAPI uvicorn main:app --host 127.0.0.1 --port 8000 --reload服务成功启动后应该看到类似输出INFO: Started server process [1234] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://127.0.0.1:80003.5 验证服务运行状态打开浏览器访问 http://127.0.0.1:8000/docs 应该能看到自动生成的 API 文档页面这表明服务正常运行。也可以使用 curl 命令测试基础接口curl http://127.0.0.1:8000/health # 预期返回{status:healthy}4. OpenAI API 兼容接口使用详解4.1 接口认证方式标准的 OpenAI API 使用 API Key 进行认证但本地反代服务通常简化了认证流程。根据具体实现可能有以下几种方式无需认证开发模式import openai # 直接配置端点不设置 API Key openai.api_base http://127.0.0.1:8000/v1 openai.api_key sk-dummy-key # 使用虚拟 Key固定 API Key某些实现可能要求使用固定的 API Key可以在项目文档或配置文件中找到openai.api_key sk-windows-copilot-local自定义认证头如果需要自定义认证可以在请求头中添加headers { Authorization: Bearer sk-custom-token, Content-Type: application/json }4.2 聊天补全接口Chat Completions这是最常用的接口对应 OpenAI 的/v1/chat/completions端点基本使用示例import openai from openai import OpenAI # 配置客户端 client OpenAI( base_urlhttp://127.0.0.1:8000/v1, api_keysk-dummy-key ) # 发送聊天请求 response client.chat.completions.create( modelgpt-3.5-turbo, # 模型名称可能因实现而异 messages[ {role: system, content: 你是一个有用的助手。}, {role: user, content: 请用中文介绍一下 Python 编程语言。} ], max_tokens500, temperature0.7 ) print(response.choices[0].message.content)支持的参数model: 模型标识可能固定为特定值messages: 对话消息列表max_tokens: 生成的最大 token 数temperature: 生成随机性0-2之间stream: 是否使用流式响应4.3 模型列表接口Models List获取可用的模型列表# 获取模型列表 models client.models.list() for model in models.data: print(f模型ID: {model.id})通常返回的模型列表会包含类似gpt-3.5-turbo、gpt-4等标识具体取决于反代服务的实现。4.4 流式响应处理对于需要实时显示生成内容的场景可以使用流式响应response client.chat.completions.create( modelgpt-3.5-turbo, messages[{role: user, content: 写一个简短的故事。}], streamTrue ) for chunk in response: if chunk.choices[0].delta.content is not None: print(chunk.choices[0].delta.content, end, flushTrue)5. 集成到现有项目的实战示例5.1 在 LangChain 项目中使用LangChain 是流行的 AI 应用开发框架可以轻松集成自定义的 OpenAI 兼容端点from langchain.chat_models import ChatOpenAI from langchain.schema import HumanMessage # 配置 LangChain 使用本地反代服务 chat ChatOpenAI( openai_api_basehttp://127.0.0.1:8000/v1, openai_api_keysk-dummy-key, model_namegpt-3.5-turbo, # 根据实际支持的模型调整 temperature0.7, max_tokens500 ) # 使用 LangChain 进行对话 messages [HumanMessage(contentLangChain 是什么)] response chat(messages) print(response.content)5.2 在 AutoGPT 类项目中使用对于需要自主运行的 AI 代理项目配置方法类似# 示例配置自定义端点 import os os.environ[OPENAI_API_BASE] http://127.0.0.1:8000/v1 os.environ[OPENAI_API_KEY] sk-dummy-key # 后续的 AI 代理代码会自动使用配置的端点5.3 构建简单的聊天应用下面是一个完整的 Flask 聊天应用示例集成本地反代服务from flask import Flask, render_template, request, jsonify import openai from openai import OpenAI app Flask(__name__) # 配置 OpenAI 客户端 client OpenAI( base_urlhttp://127.0.0.1:8000/v1, api_keysk-dummy-key ) app.route(/) def index(): return render_template(chat.html) app.route(/chat, methods[POST]) def chat(): user_message request.json.get(message, ) try: response client.chat.completions.create( modelgpt-3.5-turbo, messages[ {role: system, content: 你是一个有用的AI助手。}, {role: user, content: user_message} ], max_tokens300, temperature0.7 ) ai_response response.choices[0].message.content return jsonify({response: ai_response}) except Exception as e: return jsonify({error: str(e)}), 500 if __name__ __main__: app.run(debugTrue, port5000)对应的 HTML 模板templates/chat.html!DOCTYPE html html head title本地AI聊天/title style .chat-container { max-width: 800px; margin: 0 auto; } .message { margin: 10px 0; padding: 10px; border-radius: 5px; } .user { background: #e3f2fd; text-align: right; } .ai { background: #f5f5f5; } /style /head body div classchat-container div idchat-messages/div input typetext idmessage-input placeholder输入消息... button onclicksendMessage()发送/button /div script async function sendMessage() { const input document.getElementById(message-input); const message input.value.trim(); if (!message) return; // 添加用户消息 addMessage(user, message); input.value ; // 发送到后端 const response await fetch(/chat, { method: POST, headers: {Content-Type: application/json}, body: JSON.stringify({message: message}) }); const data await response.json(); if (data.response) { addMessage(ai, data.response); } else { addMessage(ai, 错误: data.error); } } function addMessage(role, content) { const div document.createElement(div); div.className message ${role}; div.textContent content; document.getElementById(chat-messages).appendChild(div); } /script /body /html6. 常见问题排查和解决方案6.1 服务启动失败问题问题现象运行启动命令后服务立即退出或报错。可能原因和解决方案问题现象可能原因检查方式解决方案端口被占用8000 端口已被其他程序使用运行 netstat -anofindstr :8000Python 依赖冲突包版本不兼容查看错误日志中的具体包名创建虚拟环境或调整版本权限不足需要管理员权限检查是否以管理员身份运行以管理员身份运行命令提示符Windows Copilot 不可用系统功能被禁用测试 WinC 是否打开 Copilot启用 Windows Copilot 功能端口占用处理示例# 查找占用端口的进程 netstat -ano | findstr :8000 # 终止特定进程谨慎操作 taskkill /PID 1234 /F # 或者修改服务端口 set API_PORT8080 python main.py6.2 API 请求返回错误常见错误代码和含义错误代码含义解决方案401 Unauthorized认证失败检查 API Key 配置是否正确404 Not Found接口路径错误验证端点 URL 是否完整429 Too Many Requests请求频率过高降低请求频率或添加延迟500 Internal Server Error服务端内部错误查看服务日志排查具体原因503 Service Unavailable服务不可用检查 Windows Copilot 是否正常工作详细错误排查步骤查看反代服务的控制台输出日志检查 Windows 事件查看器中的系统日志验证网络连接和防火墙设置确认系统资源内存、CPU充足6.3 性能优化建议当服务响应缓慢时可以考虑以下优化措施调整服务配置# 增加超时时间应对复杂请求 client.chat.completions.create( # ... 其他参数 request_timeout60 # 60秒超时 )优化请求参数合理设置max_tokens避免生成过长内容调整temperature平衡创造性和确定性使用流式响应改善用户体验系统层面优化关闭不必要的后台程序释放系统资源确保足够的可用内存使用有线网络连接替代无线网络6.4 会话管理和上下文限制Windows Copilot 反代服务可能有上下文长度限制需要注意管理对话上下文# 保持合理的对话轮次避免上下文过长 messages [ {role: system, content: 你是一个有用的助手。}, # 只保留最近几轮对话 {role: user, content: 最近的问题}, {role: assistant, content: 之前的回答}, {role: user, content: 当前问题} ] # 如果对话过长可以摘要之前的内容 if len(str(messages)) 3000: # 估计的token数 # 创建摘要并重置对话 summary 之前讨论了... messages [ {role: system, content: 你是一个有用的助手。}, {role: user, content: f摘要之前对话{summary}}, {role: user, content: 当前问题} ]7. 生产环境部署和安全考虑7.1 服务持久化运行开发环境中直接运行 Python 脚本不适合生产使用需要考虑持久化方案使用 Windows 服务创建批处理文件start_service.batecho off cd /d C:\path\to\Windows-Copilot-API python main.py然后使用 nssm 或其他工具将其注册为 Windows 服务。使用进程管理器使用 PM2 等进程管理器保持服务运行npm install -g pm2 pm2 start main.py --name copilot-api --interpreter python pm2 save pm2 startup7.2 安全加固措施在公开网络环境中部署时必须考虑安全问题网络访问控制# 只允许特定IP段访问 from fastapi import FastAPI, Request from fastapi.middleware.trustedhost import TrustedHostMiddleware app FastAPI() app.add_middleware(TrustedHostMiddleware, allowed_hosts[192.168.1.0/24]) # 或使用防火墙规则限制访问API 认证增强实现自定义的认证中间件from fastapi import HTTPException, Header async def verify_token(x_api_key: str Header(...)): if x_api_key ! your-secure-token: raise HTTPException(status_code401, detailInvalid API Key) app.post(/chat) async def chat_endpoint(request: Request, x_api_key: str Header(...)): await verify_token(x_api_key) # 处理聊天请求7.3 监控和日志记录生产环境需要完善的监控体系添加结构化日志import logging import json from datetime import datetime logging.basicConfig( levellogging.INFO, format%(asctime)s - %(name)s - %(levelname)s - %(message)s, handlers[ logging.FileHandler(api.log), logging.StreamHandler() ] ) logger logging.getLogger(__name__) app.middleware(http) async def log_requests(request: Request, call_next): start_time datetime.now() response await call_next(request) duration datetime.now() - start_time log_data { timestamp: start_time.isoformat(), method: request.method, url: str(request.url), status_code: response.status_code, duration_ms: duration.total_seconds() * 1000 } logger.info(json.dumps(log_data)) return response健康检查端点app.get(/health) async def health_check(): return { status: healthy, timestamp: datetime.now().isoformat(), version: 1.0.0 }7.4 性能监控和限流防止服务被滥用实施基本的限流策略from slowapi import Limiter, _rate_limit_exceeded_handler from slowapi.util import get_remote_address from slowapi.errors import RateLimitExceeded limiter Limiter(key_funcget_remote_address) app.state.limiter limiter app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler) app.post(/chat) limiter.limit(10/minute) # 每分钟10次请求 async def chat_endpoint(request: Request): # 处理请求 pass通过本文的完整实践你应该已经掌握了将 Windows Copilot 能力通过反代服务暴露为 OpenAI 兼容接口的全过程。这种方案为本地 AI 应用开发提供了便利但在生产环境中需要综合考虑性能、安全和维护成本。建议在重要业务场景中仍然使用经过充分测试的商业化 AI 服务本地反代方案更适合开发测试和内部工具场景。

相关新闻

电商智能客服:千问大模型与LangChain实战解析

电商智能客服:千问大模型与LangChain实战解析

1. 电商大模型应用现状与挑战 电商行业正经历从传统搜索推荐向智能对话式服务的转型。过去三年里,头部平台的客服对话量年均增长217%,但人工客服成本上升了89%。这种矛盾催生了企业对智能客服的迫切需求,而传统规则引擎和简单NLP模型已经难以…

2026/10/19 13:53:57 阅读更多 →
概率拟合的终结与真理驱动的兴起——基于贾子理论框架的AI范式革命研究

概率拟合的终结与真理驱动的兴起——基于贾子理论框架的AI范式革命研究

概率拟合的终结与真理驱动的兴起——基于贾子理论框架的AI范式革命研究摘 要当前以Transformer架构、大规模预训练与概率拟合为核心的人工智能范式,正面临热力学不可持续、认识论根基腐朽与社会结构精英化的三重危机。本文基于贾子理论(KTS, Kucius Theo…

2026/10/17 9:12:42 阅读更多 →
德州仪器VPFE寄存器实战指南:从HMED滤波到CSC转换的嵌入式图像处理优化

德州仪器VPFE寄存器实战指南:从HMED滤波到CSC转换的嵌入式图像处理优化

1. 项目概述与VPFE核心价值在嵌入式视觉系统的开发中,图像质量往往是决定产品成败的关键。无论是安防摄像头需要清晰的夜间画面,还是工业检测设备要求精准的色彩还原,其背后都离不开一个强大且灵活的硬件图像处理前端。德州仪器(T…

2026/10/17 9:54:24 阅读更多 →

最新新闻

持久化上生产:Postgres 检查点实战

持久化上生产:Postgres 检查点实战

个人主页&#xff1a;> for_ever_love__ <&#xff08;欢迎各位大佬莅临&#x1f60a;&#xff09; 其他栏目: > 大模型开发从0到1 < 其他栏目: > iOS项目总结大全 < 其他栏目: > 我想学python了 < 其他栏目: > iOS UI < 文章目录持久化上生产&a…

2026/10/20 23:10:34 阅读更多 →
安全红线下的技术博客选题与AI实践指南

安全红线下的技术博客选题与AI实践指南

抱歉&#xff0c;我无法围绕该标题生成内容。该标题中“无需魔法”的表述涉及绕过网络访问限制的内容&#xff0c;属于安全红线范畴&#xff0c;无论是明示、暗示还是联想性表达&#xff0c;我都必须坚决舍弃。如果你有其他合规的技术主题&#xff0c;比如AI工具的实际应用技巧…

2026/10/20 23:10:34 阅读更多 →
AEB自动紧急制动全解析:感知融合、TTC决策与标定测试

AEB自动紧急制动全解析:感知融合、TTC决策与标定测试

前两年我头一回在测试车上把AEB&#xff08;Automatic Emergency Braking&#xff0c;自动紧急制动&#xff09;触发的那一脚刹车“踩”在自己身上&#xff0c;不是靠脚&#xff0c;而是靠系统自己。那一瞬间车速从60多直接往下掉&#xff0c;安全带勒紧&#xff0c;车内所有东…

2026/10/20 23:10:34 阅读更多 →
什么是ppt-master:职场隐形能力的系统拆解

什么是ppt-master:职场隐形能力的系统拆解

1. “ppt-master”不是软件&#xff0c;而是一类人的隐性能力标签最近在几个技术社区和设计协作群聊里&#xff0c;频繁看到有人发“求个ppt-master带飞”“有没有靠谱的ppt-master接单”“刚被我们组的ppt-master救场了”。起初我以为是某个新出的PPT插件或AI工具&#xff0c;…

2026/10/20 23:10:34 阅读更多 →
用Python和Jinja2打造演示文稿生成工具:内容与样式分离的自动化实践

用Python和Jinja2打造演示文稿生成工具:内容与样式分离的自动化实践

1. 为什么我要自己动手做一个演示文稿生成工具先说说这个项目的由来。我在日常工作中需要频繁制作演示文稿&#xff0c;产品方案、技术评审、项目复盘、培训材料&#xff0c;几乎每周都要产出两三份。最开始我也是老老实实打开办公软件&#xff0c;一页一页地排版、调字体、对齐…

2026/10/20 23:10:34 阅读更多 →
VINS-Fusion滑窗SFM:从位姿估计到Ceres优化全解析

VINS-Fusion滑窗SFM:从位姿估计到Ceres优化全解析

这篇继续往源码深处走。前面我们聊过前端特征追踪、IMU预积分、初始化框架&#xff0c;这次把目光单独锁定在“滑窗内的纯视觉SFM”上。之所以单独拎出来讲&#xff0c;是因为我之前很长一段时间都用现成配置跑VINS-Fusion&#xff0c;直到需要自采数据、频繁看到日志里初始化反…

2026/10/20 23:09:33 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →