2026-03-19

[C#] C# 串 GitHub Copilot CLI 實測,不用 Visual Studio 也能讓 AI 幫忙寫程式

最近朋友問我可不可以不透過 Visual Studio or Visual Code 呼叫 Github Copilot 

感覺起來他就是要幹大事,其實問一下 AI 就知道可以不過我還是測試一下

畢竟可以讓程式自己寫程式,一直都是工程師的浪漫?


1. 先安裝 且運行起來 GitHub Copilot CLI 

這一步也很簡單,基本上就是打開 powershell  然後輸入下面指令

winget install GitHub.Copilot copilot --version copilot

基本上這邊沒啥雷,他會給你一個驗證碼,然後你在 "瀏覽器" 登入你的 github 然後到這網址

https://github.com/login/device

輸入 powershell 那邊給你的 device code.



2. 接來就是 C# 部分,先安裝 SDK :  https://www.nuget.org/packages/GitHub.Copilot.SDK

之後就是寫 code 的部分,這邊就簡單啦,完全可以問 AI ,但是因為版本一直改

一開始他給的程式碼,我跑起來都會直接失敗,這邊我附上執行成功的 程式碼

      
      
      
		static async Task Main(string[] args)
        {
            try
            {
                await using var client = new CopilotClient();

                // 如果你的版本需要明確啟動 CLI,可以保留這行
                await client.StartAsync();

                await using var session = await client.CreateSessionAsync(new SessionConfig
                {
                    //gpt-4.1 for free account
                    //Model = "gpt-4.1",
                    Model = "gpt-5-mini",
                    Streaming = true,

                    // 新版 SDK 需要提供 permission handler
                    OnPermissionRequest = PermissionHandler.ApproveAll
                });

                // 用來避免同一輪 stream 結束前,主程式就跑下一輪
                TaskCompletionSource? currentResponseTcs = null;

                session.On(ev =>
                {
                    switch (ev)
                    {
                        case AssistantMessageDeltaEvent deltaEvent:
                            // 逐字 / 逐段輸出 assistant 回應
                            Console.Write(deltaEvent.Data.DeltaContent);
                            break;

                        case SessionIdleEvent:
                            // 這一輪完成,換行並通知主流程可以繼續讀下一次輸入
                            Console.WriteLine();
                            currentResponseTcs?.TrySetResult(true);
                            break;
                    }
                });

                Console.WriteLine("Copilot Console 已啟動");
                Console.WriteLine("輸入 exit 可離開");
                Console.WriteLine();

                while (true)
                {
                    Console.Write("You : ");
                    var input = Console.ReadLine();

                    if (string.IsNullOrWhiteSpace(input))
                    {
                        continue;
                    }

                    if (input.Equals("exit", StringComparison.OrdinalIgnoreCase))
                    {
                        break;
                    }

                    Console.Write("Copilot: ");

                    // 每一輪都建立新的等待物件
                    currentResponseTcs = new TaskCompletionSource();

                    // 送出訊息
                    await session.SendAsync(new MessageOptions
                    {
                        Prompt = input
                    });

                    // 等 stream 完整結束
                    await currentResponseTcs.Task;

                    Console.WriteLine();
                }

                await client.StopAsync();
            }
            catch (Exception ex)
            {
                Console.WriteLine("發生錯誤:");
                Console.WriteLine(ex);
            }
        }

      
      
      
  


這邊我做個比較,因為我用到一半發現免費帳戶真的噴很兇,就直接付款看一下比較圖

我的 prompt : 

只輸出可直接貼上的 C# 方法實作程式碼,不要任何解釋、前言、後記、標題、markdown code fence、類別、namespace、using 或多餘文字,也不要修改方法簽名;回覆內容只能是這一個完整方法:private void LockAndWrite(string path, string conent) { }


Modal : gpt-4.1



Modal : gpt-5-mini



來一段簡單的小結

gpt-4.1 跟 gpt-5-mini 能力差很多,如果可以用 gpt-5-mini  就不要用 gpt-4.1 

雖然看起來,我只是把問程式建議的動作或是自動寫程式的動作從 "瀏覽器" , "IDE" 中搬出來

當然就變得讓自動寫程式有可能性,畢竟身為工程師的浪漫就是希望一切都按照計畫運行

當然這一步只是開始,之後有機會夢想就是在透過另一個 AI 來稽核整流程,讓人類盡量少介入的情況下

完成專案,雖然夢想很美,但是真的要拿來幹大事還有很多問題,畢竟跟 AI 的 "認知對齊" 一直都是一個痛點

不過現在迭代速度很快,誰知道未來呢,或許下下周就有哪位大神配合 AI 解決了這問題 :)



--

The bug existed in all possible states. Until I ran the code.

如果這篇文章有幫助到您幫我分享一下,讓我有寫下去的動力...