编写一个 VS Code 扩展:将 Copilot 支持的大模型通过 REST API 方式暴露出来

在 AI 辅助编程的时代,Copilot 已经成为众多开发者的得力助手。我们只要拥有一个 GitHub 账号,只要开通了 Copilot,即可在 VS Code 等编辑器中使用它。而且 Copilot 可选的大模型日益增多,从最初的 Codex 模型到如今支持更强大的 GPT-5 系列,模型能力不断增强。

然而,Copilot 的能力被完全释放了吗?答案是否定的。它依然被限制在 IDE 插件、特定工作流的框架内。如果我们可以将 Copilot 背后的大模型能力「解放」出来,通过简单、通用的 REST API 提供给更多开发者、工具和应用调用,将会带来哪些可能性?

今天,我们就将共同探索这个实践:如何通过编写一个 VS Code 扩展,将 Copilot 支持的大模型转化为可灵活调用的 API 服务。

1 为什么需要一个 VS Code 扩展

下面以在 VS Code 中借助 Copilot 批量生成报告为例来说明为什么需要编写一个 VS Code 扩展。

假设,我正在为一个博客聚合网站做年度报告。拥有的初始数据是一个 JSON 数组 blog-posts.json,该数组记录了聚合网站中所有博客在 2025 全年发布的文章。

格式如下:

[
  {
    "blog": "leileiluoluo.com",
    "articles": [
      "提示工程需要遵循的五个原则(附实践案例)",
      "關於 2026 年即將生效的「吸毒記錄可封存」法案",
      "如何使用 Spec Kit 工具进行规范驱动开发?"
    ]
  }
  // ...
]

如果我想借助 Copilot,让其基于上述数据批量生成所有博客的年度报告 blog-summary.json(格式如下),该如何做呢?

[
  {
    "blog": "leileiluoluo.com",
    "summary": "您的博客文章涵盖了技术开发、社会热点和个人生活等多个领域。在技术方面,您深入探讨了提示工程、规范驱动开发、Spring Boot 框架的应用、数据库迁移与优化等主题,展示了对前沿技术的关注与实践经验的分享;同时,您还介绍了 Markdown 编程语言的潜力、MapStruct 对象映射工具的优势,以及 MCP 在浏览器自动化中的应用等内容,体现了对技术趋势的敏锐洞察。在社会热点方面,您关注了吸毒记录封存法案、历史事件以及社会案件,表达了独到的见解。在个人生活方面,您记录了多次旅行与家庭活动,展现了对自然风光的热爱与家庭生活的温馨。这些文章内容丰富,兼具专业性与生活化,体现了广泛的兴趣与深刻的思考。"
  }
  // ...
]

要实现这个任务,我们可以先从一个博客开始,编写提示词看看效果,没问题再让 Copilot 运用到所有博客。

针对单个博客生成年度总结的提示词如下:

下面是一个博客在 2025 年发布的所有文章,请以「您的博客文章涵盖了...」开始写一段 200 字以内的总结:

{
  "blog": "leileiluoluo.com",
  "articles": [
    "提示工程需要遵循的五个原则(附实践案例)",
    "關於 2026 年即將生效的「吸毒記錄可封存」法案",
    "如何使用 Spec Kit 工具进行规范驱动开发?",
    ...
  ]
}

可以看到 Copilot 完美的完成了任务。

使用 Copilot 生成单个博客的年度总结

接下来尝试编写提示词,让 Copilot 运用到所有博客。

annual-report 文件夹下的 blog-posts.json 文件包含了多个博客在 2025 年的所有文章标题。

您需要针对每个博客在这一年发布的所有文章标题,以「您的博客文章涵盖了...」开始写一段 200 字以内的总结。

最后以 `blog-summary.json` 为文件名,输出一个包含所有博客总结的 JSON 数组,格式如下:

[
  {
    "blog": "leileiluoluo.com",
    "summary": "您的博客文章涵盖了技术开发、社会热点和个人生活等多个领域。在技术方面,您深入探讨了提示工程、规范驱动开发、Spring Boot 框架的应用、数据库迁移与优化等主题,展示了对前沿技术的关注与实践经验的分享;同时,您还介绍了 Markdown 编程语言的潜力、MapStruct 对象映射工具的优势,以及 MCP 在浏览器自动化中的应用等内容,体现了对技术趋势的敏锐洞察。在社会热点方面,您关注了吸毒记录封存法案、历史事件以及社会案件,表达了独到的见解。在个人生活方面,您记录了多次旅行与家庭活动,展现了对自然风光的热爱与家庭生活的温馨。这些文章内容丰富,兼具专业性与生活化,体现了广泛的兴趣与深刻的思考。"
  }
  // ...
]

上述提示词发出后,Copilot 开始编写 Python 脚本,试图用程序的方式去实现这个批量任务。

但是结果很不理想,其生成的总结非常的单薄。

使用 Copilot 批量生成博客的年度总结

究其原因,是因为 Copilot 根本没有调用大模型去生成总结,而是在程序中写了一组关键词,只要文章标题匹配了某些关键词就固定输出一个分类,生成的总结死板,没有活力。

使用 Copilot 批量生成博客的年度总结之使用的脚本

看到这里,您不禁要问:Copilot 不知道我们想要的总结是大模型生成的吗?还是有哪些难言之隐?

下面我们尝试使用提示词强制让其使用大模型来生成总结。

提示词发出后,Copilot 修改原先的 Python 脚本,改为调用 OpenAI 来生成总结。但是调用这个程序我们需要有 OpenAI 账号,必须提供一个 OPENAI_API_KEY 给 Copilot。

使用 Copilot 批量生成博客的年度总结之使用的 OpenAI

看到这里您可能跟我一样有一些迷惑,你 Copilot Chat 中支持的那么多模型直接拿来用不就行了吗?还让我专门开通一个大模型账号?或者,你用笨一点的办法,像获取单个博客的总结一样,自己自动组装提示词发给 Chat,然后取回结果;然后再发出,再取回。帮我完成任务,不行吗?

其实,这个问题恰好触碰到了 Copilot 的难言之隐。因为 Copilot 的确没有提供调用模型的 REST API 出来,所以它编写的脚本想使用模型时,必须让我们提供一个额外的模型 API_KEY

这就是我为什么要写本文的缘由。我们需要编写一个 VS Code 扩展,来将 Copilot 中模型的能力通过 REST API 释放出来,供程序去使用。

2 编写这个 VS Code 扩展

2.1 准备工作

echo 'export PATH="$(npm config get prefix)/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
yo code

生成 VS Code 扩展工程脚手架

2.2 编写核心逻辑

2.3 生成 vsix 文件

3 使用这个 VS Code 扩展

4 小结

参考资料

[1] Visual Studio Code Extension API: Your First Extension - https://code.visualstudio.com/api/get-started/your-first-extension

[2] Visual Studio Code Extension API: Language Model API - https://code.visualstudio.com/api/extension-guides/ai/language-model

评论

正在加载评论......