(长期有效)接入第三方 OpenAI 兼容模型到 GitHub Copilot

目前 GitHub Copilot 仅支持接入国外的几家模型提供商,无法直接调用 OpenAI 兼容的自定义 API 进行扩展。参考相关解决方案,我总结了一下Copilot中接入OpenAI 兼容 API 的方法。
实现方法主要分为两种:

方案一:修改 Copilot Chat 源代码
在模型选择器中新增自定义提供商选项。

方案二:API 兼容适配
将 OpenAI 兼容的自定义 API 虚拟化封装为与 Ollama 兼容的 API(运行期间占用 Ollama 端口),从而利用 Copilot 模型选择器中原生的 Ollama 选项。

方法一(目前存在问题)

具体做法可参考修改Copilot chat插件增加自定义模型提供商


这里只说一下这个方法存在的问题:

  1. 官方开源的Copilot chat插件版本通常滞后于最新版,可能存在未来兼容性问题
  2. 打包过程的npm install环节容易报错,需要多次调试
  3. 重要 当前打包后的Copilot chat插件在VSCode中无法显示模型选择器。虽然原作者指出这是由于插件要求的VSCode最低版本与实际版本不匹配所致,但即便修改了package.json中的vscode版本号,问题依然存在。

方法二(长期有效)

这一方法基于Github上的oai2ollama项目,它通过命令行工具启动一个服务,将OpenAI兼容API封装为Ollama兼容API。特别适合为不支持自定义OpenAI API但支持Ollama的编码代理(如VS Code中的GitHub Copilot)提供自定义模型支持。
这一项目的灵感来源于vscode-copilot GitHub讨论区中关于添加自定义 OpenAI 端点配置(基础 URL 和模型参数)到协同聊天设置的讨论。值得注意的是,官方已采纳该提议,未来Copilot版本可能直接支持第三方模型。
言归正传,具体操作步骤如下:

  1. 安装UV工具
    详细安装教程可参考:Windows系统UV安装及路径配置指南
    • 执行uv tool install进行永久安装
    • 创建批处理文件(双击运行):

配置VS Code
在Copilot模型选择器中选择"Ollama",稍候将显示第三方模型列表。

模型选择界面

运行转换程序
在命令行直接执行(无需本地下载项目):

uvx oai2ollama --api-key your_api_key --base-url provider_base_url 

如需长期使用,可选择以下任一方式:

@echo off powershell -NoExit-Command"uvx oai2ollama --api-key your_api_key --base-url provider_base_url"

常见问题:若未显示模型列表,请检查命令行报错信息。多数情况下,在base-url末尾添加/v1即可解决。

Read more

【JVM 终极通关指南】万字长文从底层到实战全维度深度拆解 Java 虚拟机

【JVM 终极通关指南】万字长文从底层到实战全维度深度拆解 Java 虚拟机

【JVM 终极通关指南】万字长文从底层到实战全维度深度拆解 Java 虚拟机 我的主页:寻星探路个人专栏:《JAVA(SE)----如此简单!!! 》《从青铜到王者,就差这讲数据结构!!!》 《数据库那些事!!!》《JavaEE 初阶启程记:跟我走不踩坑》 《JavaEE 进阶:从架构到落地实战 》《测试开发漫谈》 《测开视角・力扣算法通关》《从 0 到 1 刷力扣:算法 + 代码双提升》 《Python 全栈测试开发之路》没有人天生就会编程,但我生来倔强!!! 寻星探路的个人简介: 导读:为什么每个大厂程序员都必须精通 JVM? Java 程序的运行效率、系统的稳定性、甚至高并发下的抗压能力,都与 JVM 密切相关。如果你只会写业务代码而不懂 JVM,就像只会开车而不懂发动机原理的赛车手。当遇到 OutOfMemoryError(内存溢出)

By Ne0inhk
Java Web开发基础与Servlet核心技术

Java Web开发基础与Servlet核心技术

Java Web开发基础与Servlet核心技术 15.1 学习目标与重点提示 学习目标:掌握Java Web开发的核心概念与Servlet技术的使用方法,包括Web应用的结构、Servlet的定义与使用、HTTP请求与响应的处理、会话管理、过滤器与监听器的使用,学会在实际开发中处理Web应用问题。 重点:Web应用的结构(目录结构、配置文件)、Servlet的定义与使用(Servlet接口、HttpServlet类、注解配置)、HTTP请求与响应的处理(Request、Response对象)、会话管理(Session、Cookie)、过滤器与监听器的使用、Web开发的实际应用场景。 15.2 Web开发概述 Java Web开发是用于处理Web应用的机制。 15.2.1 Web开发的定义 定义:Web开发是用于处理Web应用的机制。 作用: * 实现Web应用的开发。 * 实现客户端与服务器之间的通信。 * 实现动态网页的生成。 * 实现Web应用的部署与维护。 ✅ 结论:Web开发是用于处理Web应用的机制,作用是实现Web应用的开发、客户端与服务器之间的通

By Ne0inhk
Java 时间类(上):JDK7 及以前时间类 Date、SimpleDateFormat、Calendar 最全总结

Java 时间类(上):JDK7 及以前时间类 Date、SimpleDateFormat、Calendar 最全总结

🏠个人主页:黎雁 🎬作者简介:C/C++/JAVA后端开发学习者 ❄️个人专栏:C语言、数据结构(C语言)、EasyX、JAVA、游戏、规划、程序人生 ✨ 从来绝巘须孤往,万里同尘即玉京 文章目录 * Java 时间类(上):JDK7 及以前时间类 Date、SimpleDateFormat、Calendar 最全总结 🕒 * 📝 文章摘要 * 一、时间相关基础知识点 ⏱ * 1. 时间标准 * 2. 时间单位与换算 * 二、Date 时间类 📅 * 1. 概述 * 2. 构造方法 * 3. 成员方法 * 4. 代码示例 * 三、SimpleDateFormat 格式化与解析 ✍️ * 1. 作用

By Ne0inhk
【Java 开发日记】为什么要有 time _wait 状态,服务端这个状态过多是什么原因?

【Java 开发日记】为什么要有 time _wait 状态,服务端这个状态过多是什么原因?

目录 为什么要有 TIME_WAIT 状态? 原因一:可靠地终止TCP连接(确保最后的ACK能到达对方) 原因二:让旧连接的重复报文段在网络中自然消失(防止影响新连接) 服务端 TIME_WAIT 状态过多是什么原因? 原因一:服务端使用了短连接,并且是它主动关闭连接 原因二:客户端的非正常行为 原因三:负载均衡器的健康检查 总结 面试回答 为什么要有 TIME_WAIT 状态? TIME_WAIT,俗称2MSL等待状态,是TCP连接主动关闭一方(通常是客户端,但也可能是服务端)在发送最后一次ACK确认报文后,会进入的一个状态。它需要等待2倍的最大报文段生存时间后,才会最终进入CLOSED状态,释放连接资源。 设计TIME_WAIT状态主要有两个核心原因,它们是确保TCP协议可靠性的基石: 原因一:可靠地终止TCP连接(确保最后的ACK能到达对方) 这是最主要的原因。让我们回顾一下TCP四次挥手的正常流程: 1. 主动关闭方(假设为A)

By Ne0inhk