AI Coding 不只是幫你寫程式!Claude Code 與 Codex CLI 最新更新解析:Agent 更聰明、執行更安全,附 .NET 實戰範例

過去我們使用 AI 寫程式,最常做的事情大概就是問它:「這段 C# 能不能幫我重構一下?」

現在的 AI Coding 工具,已經開始負責閱讀整個專案、修改多個檔案、執行測試、操作 Git,甚至與其他 Agent 合作完成一個開發任務。

但企業真正需要的,並不是一個寫程式速度很快的 AI,而是一個能被控制、能夠追蹤、發生錯誤可以恢復,而且不會隨便把程式碼弄丟的 AI 開發助手。

2026 年 10 月 15 日(UTC),Anthropic 與 OpenAI 分別推出:

  • Claude Code v2.1.301
  • Codex CLI v0.163.0

這兩次更新有一個非常值得關注的共同方向:AI Coding 工具正逐漸從「互動式程式碼助手」,進化成「具有流程控制與安全機制的自主開發代理人」。

以下用實際開發情境,說明這次到底更新了什麼,以及 .NET 工程師該如何應用。


一、Claude Code v2.1.301:開始把「執行可靠性」當成重點

這次 Claude Code 沒有推出什麼令人眼花撩亂的新介面,但其中幾項功能,對長時間執行的 Agent 開發流程相當重要。

1. Git Worktree 保護:避免 AI 把未推送的程式碼清掉

如果使用 AI 同時處理多個 Issue,Git Worktree 是非常實用的技術。

例如同一個 ASP.NET Core 專案,需要同時處理:

  • Issue #101:新增訂單查詢 API
  • Issue #102:修復庫存計算錯誤
  • Issue #103:重構 JWT 驗證

我們不希望三個 Agent 同時修改相同的工作目錄,因此可以利用 Git Worktree 建立彼此隔離的開發環境。

這次 Claude Code 修正了一個重要問題:透過 WorktreeCreate Hook 建立的 Worktree,在結束工作階段時,如果存在未推送的 Commit,先前可能會被直接移除,而沒有經過適當確認。

新版本修正了這個情況。

要注意,這項修正特別針對 Claude Code Hook 所建立的 Worktree,並不是宣稱所有 Git Worktree 操作都會自動備份。

實作範例:建立獨立工作目錄

在 Git Repository 目錄執行:

git worktree add -b feature/order-api ../OrderApi-feature
cd ../OrderApi-feature
claude

接著在 Claude Code 輸入:

請分析目前 ASP.NET Core 專案,新增訂單查詢 API,要求:

  1. 保留現有架構與 Coding Style。
  2. 使用 Dependency Injection。
  3. 補上必要的 Unit Tests。
  4. 修改完成後執行 dotnet test。
  5. 提供 Git Diff 摘要。
  6. 不要自行 Commit、Push 或刪除 Worktree。

這是一個非常典型的企業開發情境:讓 AI 執行工作,但不把版本控制的最終決策權完全交出去。

2. Workflow Agent 修正:避免「事情沒做完卻回報完成」

以前使用多代理人時,有時最麻煩的不是執行失敗,而是 Agent 明明沒有完成指定步驟,卻回報整個任務成功。

Claude Code v2.1.301 修正了一種 Workflow Agent 可能跳過步驟、但執行結果仍被視為成功的狀況。

這對企業自動化尤其重要。

例如,我們安排以下工作:

需求分析 → 程式開發 → 單元測試 → 安全檢查 → 產出報告

如果測試 Agent 跳過測試,卻讓整個流程呈現成功,後續 CI/CD 就可能將未驗證的程式碼交付出去。

這次修正降低了特定情境下發生誤報成功的風險。不過企業仍應自行建立驗收關卡,例如測試 Exit Code、測試報告存在性、Code Review 與必要的人工作業核准。

3. OpenTelemetry 加強:開始追蹤 Agent 為什麼執行工具

這是我認為此次非常值得企業關注的功能。

Claude Code 在 OpenTelemetry tool_decision 事件中,新增了:

欄位作用
classifier_verdict記錄分類器做出的工具存取判斷
permission_mode記錄當時使用的權限模式
classifier_category在啟用詳細工具記錄時,標示命中的內建規則分類

第三個欄位需要設定 OTEL_LOG_TOOL_DETAILS=1,並搭配既有的 OpenTelemetry 匯出設定。

這讓企業可以進一步分析,Agent 的某次工具操作是如何被許可、限制或阻擋。

例如在 PowerShell 啟動 Claude Code 前:

$env:OTEL_LOG_TOOL_DETAILS = "1"
claude

此設定不會單獨啟用完整的 OpenTelemetry 匯出,仍需先依照官方文件完成 Telemetry 設定。

如果企業有 Azure Monitor、OpenTelemetry Collector 或其他監控平台,可以研究如何將 Agent 工具事件與應用程式 Trace 整合。

未來的 AI Agent 管理平台,除了觀察 Token 消耗、Latency 和 Error Rate,也需要知道:Agent 做了什麼、為什麼被允許執行,以及是否符合權限政策。

4. 無人值守任務:避免無止境等待使用額度恢復

新版新增環境變數:

`CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT

理解c# 程式非同步async 跟await

隨著軟體開發的進步,以及硬體效能不斷增加,非同步程式設計是現代程式開發很重要的技術。在c# 主要以async 與await 二個關鍵字,讓非同步更直觀與容易管理。

非同步程式設計是允許程式在等待其他非阻塞任務操作完成時,能繼續執行其他任務的一個技術。能提高系統的回應性以及性能,尤其在處理高併發請求或者是耗時間的操作上。

async關鍵字

這個關鍵字主要用宣告這個方法是非同步的,但它不會去啟動一個新的執行緒,而是告訴compiler該下來的方法會有await的關鍵字,compiler需要為這個方法支持非同步的操作。

而async主要是宣告方法,而且只能回傳Task、Task<TResult>、void一起使用,但不建議void。

await關鍵字

awiat 是用來等待非同步操作完成用的關鍵字,只能在有宣告asyncASYNC的方法內部,compliler遇到await ,會將方法中其他部門註冊為等待任務延續,然後立既返回user。


using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
static async Task Main(string[] args) // Main也可以非同步的
{
try
{
string content = await DownloadContentAsync(“https://example.com”);
Console.WriteLine(content.Substring(0, 100));
}
catch (Exception ex)
{
Console.WriteLine($”An error occurred: {ex.Message}”);
}
}

static async Task DownloadContentAsync(string url)
{
using (HttpClient client = new HttpClient())
{
HttpResponseMessage response = await client.GetAsync(url); // 透過非同步取得
response.EnsureSuccessStatusCode(); // 確定回應碼是是正確
return await response.Content.ReadAsStringAsync(); // 透過非同步取得回傳內容作回應
}
}
}

上面的例子中,透過await 關鍵字 donwloadcontentasync 的方法,不會阻塞主執行緒,而是允許程式在等網路回應時繼續執行其他任務

非同步的異常處理

在處理非同步的異常,可以用try catch 來await 。而非同步方法在拋出異常時,會封裝在回傳的Task 裡。

注意的事

避免在非同步用.Result 跟 wait() 會導致死結與效能問題

非同步方法會盡可能快速回傳,避免在非同步的方法裡執行需長時間運行的同步程式,會造成執行緖阻塞。
確實處理非同步中會發生的異常,避免程式崩潰與資料損毀

C# 進階概念釐清


一、瞭解IEnumerable 以及 ICollection
不允許資料被修改操作用前者,後者可以

二、要寫低耦合可測試的程式,使用DI
透過依賴注入可以簡單管理class間的依賴關係
三、參數使用ref 與out 的差別
ref 傳給方法的參數要先初始化,方法可修改值;out不需初始,但一定要回傳值
四、透過async await 來提高程式的效能
async允許非同步執行;await透過不阻塞主thread來update ui
五、錯誤處理機制
一般使用try catch 。全局時可以透過app.UseExceptionHandler統一處理

六、appsettings.json 搭配環境來劃分

七、task與thread
thread單執行緒;taskTA是非同步的抽象,與async/await一起服用

有趣的.net core 後端人員AI面試

昨天晚上,wil 保哥發了一則貼文。就是用gpt4訓練了一個.net core 後端工程師的面試line。主要是透過問答方式,瞭解像.net core與.net framework的異同、restful api的設計原則、非同步、DI、memorycache、middleware、entity framework。

wil保哥徵才原貼

gpt 多奇 AI 面試官 ( .NET )

line官方帳號  @290quxfz

redis 的key 過期通知設定

Redis - Wikipedia

redis有expire機制,且同時有redis keyspace notification。不過預設默認的通知是關閉的~需要透過redis.conf或config set啟用。

config set notify-keyspace-events KEA

接著在c# 使用StackExchange.Redis

然後訂閱__keyevent@0__:expired 這個頻道就可以了

var redisConnection = ConnectionMultiplexer.Connect(“localhost”);
var db = redisConnection.GetDatabase();

var subscriber = redisConnection.GetSubscriber();
// 訂閱過期事件通知頻道
subscriber.Subscribe(“__keyevent@0__:expired”, (channel, key1) =>
{
// 在這裡進行過期事件的處理邏輯
// key 是過期的 Redis 鍵名
Console.WriteLine($”Key {key1} has expired.”);
});

Console.WriteLine(“Press any key to exit.”);
Console.ReadKey();

// 斷開與 Redis 的連線
redisConnection.Close();

C# 微軟語音辨識/語音合成結合OpenAI ChatGPT 變成ai人工智慧管家

透過微軟azure上的語音服務,辨識麥克風傳入的聲音後將語音轉成文字
接著再把文字送到open ai api中的chatgpt 模型中取得回應內容
最後再將回應內容透過語音合成送出

參考:
Introducing ChatGPT and Whisper APIs
https://openai.com/blog/introducing-chatgpt-and-whisper-apis
openai api
https://platform.openai.com/docs/guides/chat

Betalgo.OpenAI.GPT3
https://www.nuget.org/packages/Betalgo.OpenAI.GPT3/6.7.0
https://github.com/betalgo/openai

使用.net 搖控 DJI TELLO 無人機

 

看到DJI TELLO有SDK,幾個重點整理

1 使用的是UDP

2   IP是: 192.168.10.1

3  使用的PORT有 8889(指令) 8890(狀態) 11111(取得畫面)

程式碼大概就是


// 定義 IP

string DJIIP = "192.168.10.1";

//定義埠號

int DJIPort = 8889;

// 開啟

UdpClient udpClient = new UdpClient();

udpClient.Connect(DJIIP,DJIPort);

//
Byte[] sendCmdBytes = null;

sendCmdBytes = Encoding.UTF8.GetBytes(“takeoff”);

udpClient.Send(sendCmdBytes, sendCmdBytes.Length);

 

 

https://www.ryzerobotics.com/zh-tw

https://www.ryzerobotics.com/zh-tw/tello/downloads

 

 

C#資料結構與演算法

使用對的演算法與資料結構,在程式效能上有很大的幫助。常用的資料結構有array、stack、 queue、 linked list、 tree、 graph、 heap、 hash。在c#上常見的是使用array 、arraylist、 list、 dictonary 以及queue可以滿足絕大部份的場景。

以下介紹github上二個高階資料結構與演算法的項目。

一、C Sharp Algorithms

一開始是學習資料結構,在不斷更新以及維護後,可以用在正式環境。

https://github.com/aalhour/C-Sharp-Algorithms

二、Advanced Algorithms

https://github.com/justcoding121/advanced-algorithms

.Net 7 開發增進效能的小撇步

預計在2022年11月發布的.net7目前進入RC2的版本。來談談.net7 做了那些效能上的改進~

LINQ部份

1針對max/min最佳化

2針對Average/sum

3新增order/orderDescending 取代orderby/orderbydescending

4 System.IO的改善 WriteAllText改ReadAllText

5 針對Jsonserializer NoCachedOptions提昇

6Guid的 GuidEquals提昇

7ParseBigInt提昇

8ParseBool

9 Stopwatch中的getprocessbyname與getcurrentprocessname

10 在stopwatch加上getelapsedtime取得時間戳