无限免费大模型 token, Github Copilot CLI SDK 安装及测试

文章目录

    最近看到 Github Copilot 发布了 CLI SDK,可以直接通过代码调用 Copilot CLI 来使用 Copilot 的能力。例如,无限使用里面的免费模型例如 GPT-5 mini 和 GPT-4.1,也可以使用里面的限制额度的高级模型 Gemini 3.1 Pro, GPT 5.2 等。这可太有吸引力了,我正愁每个月 Pro 账号 300 次高级模型的额度用不完呢!不得不吹一波微软真良心!

    Github Copilot CLI SDK

    概述

    连夜搞到快凌晨 12 点,分别测试了在 Windows PowerShell 和 WSL1 Ubuntu 环境下 Golang 和 Python 的 SDK。效果很不错。其他语言的没有测试,应该都差不多。官方只提供了 golang python nodejs .net 版本的 SDK,其他语言的则是非官方的版本例如 Java Rust Clojure C++ 等等,感兴趣的可以去官方 Github 仓库看看。

    https://github.com/github/copilot-sdk

    原理

    Your Application
           ↓
      SDK Client
           ↓ JSON-RPC
      Copilot CLI (server mode)
    

    实际上就是我们写代码通过 SDK 调用 Copilot CLI 的 server mode 来使用 Copilot 的能力。SDK 负责和 CLI 进行通信,CLI 负责和 Copilot 的后端服务进行通信。

    所以,运行环境必须安装 Copilot CLI,并且 CLI 需要登录才能使用。第一次使用,大部分时间花在了 Copilot CLI 的安装和登录上了,SDK 的使用还是非常简单的。下面会介绍一下安装和登录的大坑。

    为了缩短篇幅,这篇只介绍 Windows PowerShell 下测试 Copilot SDK 的方法。WSL1 Ubuntu 下的另起一篇文章介绍。

    windows 安装 github copilot CLI

    打开 PowerShell,执行命令:

    winget install GitHub.Copilot
    

    会自动安装好 Copilot CLI。由于我的 PowerShell 版本太旧,winget 自动更新了 PowerShell 的版本:

    “msstore”源要求在使用前查看以下协议。
    Terms of Transaction: https://aka.ms/microsoft-store-terms-of-transaction
    源要求将当前计算机的 2 个字母的地理区域发送到后端服务才能正常工作,(例如"US")。
    
    是否同意所有源协议条款?
    [Y] 是  [N] 否: Y
    已找到 Copilot CLI [GitHub.Copilot] 版本 v0.0.417
    此应用程序由其所有者授权给你。
    Microsoft 对第三方程序包概不负责,也不向第三方程序包授予任何许可证。
    此包需要以下依赖项:
      - 程序包
          Microsoft.PowerShell [>= 7.0.0]
    (1/1) 已找到 PowerShell [Microsoft.PowerShell] 版本 7.5.4.0
    此应用程序由其所有者授权给你。
    Microsoft 对第三方程序包概不负责,也不向第三方程序包授予任何许可证。
    正在下载 https://github.com/PowerShell/PowerShell/releases/download/v7.5.4/PowerShell-7.5.4-win-x64.msi
      ██████████████████████████████   107 MB /  107 MB
    已成功验证安装程序哈希
    正在启动程序包安装...
    已成功安装
    
    正在下载 https://github.com/github/copilot-cli/releases/download/v0.0.417/copilot-win32-x64.zip
      ██████████████████████████████  51.1 MB / 51.1 MB
    已成功验证安装程序哈希
    正在提取存档...
    已成功提取存档
    正在启动程序包安装...
    添加了命令行别名: "copilot"
    已修改路径环境变量;重启 shell 以使用新值。
    已成功安装
    

    除了速度有点慢,这里没有什么坑。

    登录 github copilot 账号

    安装好 Copilot CLI 之后,需要退出 PowerShell 重新打开一个新的 PowerShell 才能使用 copilot 命令。

    copilot
    

    此时会看到 copilot cli 的终端交互界面,在里面输入 /login 命令,就可以登录了。

     You must be logged in to send messages. Please run /login
    
    
     What account do you want to log into?
    
     ❯ 1. GitHub.com
       2. GitHub Enterprise Cloud with data residency (*.ghe.com)
    
     ↑↓ to navigate · Enter to select
    

    按照提示在浏览器中打开 https://github.com/login/device 输入设备码进行登录即可。看到登录成功,这时候,就可以自己编写代码通过 SDK 来调用 Copilot CLI 来使用 Copilot 的能力了。

    分别看一下 Python 和 Golang 的不同使用方法。

    Python 调用 Copilot SDK

    首先需要安装 Python 版本的 Copilot SDK:

    pip install github-copilot-sdk
    

    新建一个 main.py 文件,写入以下代码:

    import asyncio
    from copilot import CopilotClient
    
    async def main():
        # Create and start client
        client = CopilotClient()
        await client.start()
    
        # Create a session
        session = await client.create_session({"model": "gpt-5-mini"})
    
        # Wait for response using session.idle event
        done = asyncio.Event()
    
        def on_event(event):
            if event.type.value == "assistant.message":
                print(event.data.content)
            elif event.type.value == "session.idle":
                done.set()
    
        session.on(on_event)
    
        # Send a message and wait for completion
        await session.send({"prompt": "帮我翻译一下 MES 是什么的英文缩写,及中文翻译"})
        await done.wait()
    
        # Clean up
        await session.destroy()
        await client.stop()
    
    asyncio.run(main())
    

    运行 main.py 文件:

    > python main.py
    MES 是英文缩写 "Manufacturing Execution System",中文通常译为“制造执行系统”或“生产执行系统”。它指用于车间/工厂层面管理、跟踪和执行生产作业(调度、数据采集、质量与绩效监控等)的信息化系统。
    

    会看到输出了 Copilot 的回答,说明调用成功了。详情参考:

    https://github.com/github/copilot-sdk/tree/main/python

    这里用的是 gpt-5-mini 免费模型,Pro 账号没有调用次数限制,非常适合用来做批量的翻译任务。
    Python 的测试成功了,再看看 Golang 的测试。

    Golang 调用 Copilot SDK

    详情参考:

    https://github.com/github/copilot-sdk/tree/main/go

    初始化项目并安装 Golang 版本的 Copilot SDK:

    go mod init sunzhongwei.com/gobot
    
    go get github.com/github/copilot-sdk/go
    

    Demo 代码,新建一个 main.go 文件,写入以下代码:

    package main
    
    import (
    	"context"
    	"fmt"
    	"log"
    	"os"
    
    	copilot "github.com/github/copilot-sdk/go"
    )
    
    func main() {
    	ctx := context.Background()
    	client := copilot.NewClient(nil)
    	if err := client.Start(ctx); err != nil {
    		log.Fatal(err)
    	}
    	defer client.Stop()
    
    	session, err := client.CreateSession(ctx, &copilot.SessionConfig{
    		Model:     "gpt-4.1",
    		Streaming: true,
    	})
    	if err != nil {
    		log.Fatal(err)
    	}
    
    	// Listen for response chunks
    	session.On(func(event copilot.SessionEvent) {
    		if event.Type == "assistant.message_delta" {
    			fmt.Print(*event.Data.DeltaContent)
    		}
    		if event.Type == "session.idle" {
    			fmt.Println()
    		}
    	})
    
    	_, err = session.SendAndWait(ctx, copilot.MessageOptions{Prompt: "给我讲个中文笑话"})
    	if err != nil {
    		log.Fatal(err)
    	}
    	os.Exit(0)
    }
    

    运行代码:

    > go run main.go
    有一天,一只小鸭走进了药店,对老板说:“有葡萄吗?”
    老板说:“这里是药店,没有葡萄。”
    第二天,小鸭又来了:“有葡萄吗?”
    老板有点生气:“我都说了,这里没有葡萄!”
    第三天,小鸭又来了:“有葡萄吗?”
    老板怒了:“你再来问,我就用钳子夹你的嘴!”
    第四天,小鸭又来了:“有钳子吗?”
    老板愣住了:“没有……”
    小鸭开心地说:“那有葡萄吗?”
    

    虽然笑话不好笑,但是说明调用成功了。

    golang 有个小优势,就是可以把 CLI 打包进二进制文件里,这样就不需要在运行环境安装 Copilot CLI 了,直接运行二进制文件就可以了,非常方便。

    > go get -tool github.com/github/copilot-sdk/go/cmd/bundler
    go: downloading github.com/klauspost/compress v1.18.3
    
    > go tool bundler
    Found copilot-sdk v0.1.25 in go.mod
    Fetching https://raw.githubusercontent.com/github/copilot-sdk/v0.1.25/nodejs/package-lock.json...
    Auto-detected CLI version: 0.0.411
    Building bundle for linux/amd64 (CLI version 0.0.411)
    Downloading from https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-0.0.411.tgz...
    Downloaded copilot (132.3 MB)
    Successfully created zcopilot_0.0.411_linux_amd64.zst
    Generated zcopilot_linux_amd64.go
    

    但是这个方案,有几个地方让我很纠结:

    • 虽然免去了 CLI 的安装,但是在低版本 Ubuntu 版本下,例如 18.04,无法启动。而 24.04 则正常
    • 使用打包中的 CLI,就需要使用其他的账号验证方案。我使用的是 COPILOT_GITHUB_TOKEN 环境变量的方案,我唯一担心的是这个 token 的权限过大了,万一泄露了,岂不是很麻烦?
    • CLI 文件体积有点大,打包到逻辑代码中,每次上传费时。

    来看一下文件大小:

    > ls -lah
    total 117M
     4.0K Feb 25 22:27 ./
     4.0K Feb 25 21:23 ../
      245 Feb 25 21:27 go.mod*
      712 Feb 25 21:27 go.sum*
      61M Feb 25 22:27 gobot*
      835 Feb 25 22:27 main.go*
     4.3K Feb 25 22:35 readme.md*
     2.9K Feb 25 21:27 zcopilot_0.0.411_linux_amd64.
      56M Feb 25 21:27 zcopilot_0.0.411_linux_amd64.zst*
      964 Feb 25 21:27 zcopilot_linux_amd64.go*
    

    Golang 的这个部署方案,我稍后再开个独立的文章介绍一下。

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式