智能體寫代碼就是香
有那么一個(gè)夜晚,我差點(diǎn)關(guān)掉編輯器,開始懷疑自己是否還屬于這個(gè)行業(yè)。
我做了所有“正確”的事。 多年經(jīng)驗(yàn)。整潔的提交。扎實(shí)的評(píng)審。
然而我眼看著更年輕的開發(fā)者交付功能的速度快出一倍,僅僅因?yàn)樗麄冏詭б环N AI-first 的工作方式,而我還在把 AI 當(dāng)成更聰明的搜索框。
他們?cè)诤?Agents 結(jié)對(duì)。 我在復(fù)制—粘貼答案。
那一刻,我決定不再假裝這只是個(gè)小趨勢(shì),而是重塑自己的工作方式。
這篇文章講的是,我如何把 AI 從一個(gè)吵鬧的聊天窗口變成一支“小型代理小隊(duì)”,在不破壞代碼質(zhì)量、也不損害作為工程師的自信的前提下,實(shí)際替代了我大約一半的編碼時(shí)間。
替代一半“編碼時(shí)間”到底意味著什么
先把話說清楚。
我仍然做系統(tǒng)設(shè)計(jì)。 我仍然做權(quán)衡。 我仍然在 pull request 上簽下自己的名字。
改變的是我的時(shí)間花在哪里。
在使用 Agents 之前,一個(gè)普通的后端(backend)特性開發(fā)通常是這樣的:
- 長(zhǎng)時(shí)間閱讀舊代碼和注釋。
- 搜索某個(gè)行為究竟藏在哪里。
- 寫出第一個(gè)“丑陋”的實(shí)現(xiàn)。
- 逐步清理。
- 補(bǔ)上測(cè)試和日志。
- 修復(fù)那些我最初忘掉的情形。
當(dāng)我終于不再憑感覺、而是實(shí)際記錄了一周時(shí)間后,我意識(shí)到一個(gè)不舒服的事實(shí):
我的“大量編碼時(shí)間”并不在思考。 而是在搬運(yùn)信息,小心翼翼、緩慢移動(dòng)。
這部分,才是我決定要外包出去的。
現(xiàn)在,一天忙下來我依然會(huì)累。 但這種累來自“設(shè)計(jì)決策與取舍”,而不是在膠水活里泡上好幾個(gè)小時(shí)。
我如何把 AI 變成一支 Agents 小隊(duì)
如果你是負(fù)責(zé)人,你不會(huì)把一個(gè)完整項(xiàng)目丟給新同事然后消失。 你會(huì)把工作拆成角色。
我對(duì) AI 做了同樣的事。
與其“一個(gè)萬能助理包打天下”,我把協(xié)作拆成四個(gè)清晰的角色,我稱之為 SCCR(Spec / Context / Code / Review):
- Spec Agent(規(guī)格/需求代理) 這個(gè)代理像一個(gè)苛刻的產(chǎn)品經(jīng)理。 它的工作是把我含糊的想法逼問成清晰的行為描述。
- Context Agent(上下文代理) 這個(gè)代理是 codebase 向?qū)А?它會(huì)搜索文件、讀注釋,并指出對(duì)這個(gè)特性真正重要的部分。
- Code Agent(代碼代理) 這個(gè)代理像一個(gè)積極的初級(jí)工程師。 在我定義好的邊界內(nèi),為小而明確的變更寫出第一版草稿。
- Review Agent(評(píng)審代理) 這個(gè)代理像一個(gè)謹(jǐn)慎的同級(jí)評(píng)審者。 它會(huì)建議測(cè)試、高亮風(fēng)險(xiǎn)點(diǎn),并指出令人困惑的命名。
這里沒有任何一步替代我的責(zé)任。 這只意味著,我不再親自完成每一個(gè)重復(fù)動(dòng)作。
我變成了那個(gè)“分派、決策、糾錯(cuò)”的人。
它第一次把我從麻煩里救出來

這個(gè)方案的第一次真正考驗(yàn),是一個(gè)可能悄悄“動(dòng)到錢”的改動(dòng)。
我們需要調(diào)整一個(gè)多年積累、愈發(fā)混亂的服務(wù)里,失敗支付的 retry 行為。
過去,這類任務(wù)能把我榨干一整天:
- 三個(gè)不同模塊里長(zhǎng)時(shí)間的代碼閱讀。
- 追蹤 retry、日志和用戶消息到底由誰驅(qū)動(dòng)。
- 一邊寫新邏輯,一邊祈禱別弄壞什么。
- 第一次評(píng)審之后再補(bǔ)測(cè)試與日志。
這種工作,打開第一個(gè)文件肩膀就會(huì)立刻沉下去。
這一次,我決定相信 SCCR。
先上場(chǎng)的是 Spec Agent。
我把自己對(duì)改動(dòng)的粗略想法寫出來,并讓它把我當(dāng)成一個(gè)討厭空話的產(chǎn)品經(jīng)理來“盤問”。它的問題多少有點(diǎn)刺痛:
- 到底什么算永久失敗、什么算臨時(shí)失敗?
- 最多允許嘗試多少次才放棄?
- 每次嘗試后用戶應(yīng)該看到什么?
- 之后我們要如何向支持和財(cái)務(wù)團(tuán)隊(duì)解釋這個(gè)行為?
回答這些問題迫使我直面那些我通常會(huì)“寫著寫著再想”的細(xì)節(jié)。
等我答完,腦子里的特性已經(jīng)更扎實(shí)了。
接著是 Context Agent。
我把與 payments、retries、notifications 相關(guān)的模塊指給它。 它返回了這些東西:
- 實(shí)際觸發(fā)支付嘗試的主方法。
- 一個(gè)被加上去后就被遺忘的歷史 workaround。
- 寫著“不要改動(dòng)這些調(diào)用的順序”的注釋。
讀完這份總結(jié),感覺就像有個(gè)隊(duì)友帶我繞著 codebase 轉(zhuǎn)了一圈,把所有重要內(nèi)幕都悄悄告訴了我。
這才把 Code Agent 請(qǐng)進(jìn)來。
我沒有讓它重寫服務(wù)。 我讓它修改一個(gè)具體函數(shù):
- 加上 backoff 支持。
- 遵循最大嘗試次數(shù)的配置。
- 保持對(duì)外簽名不變。
它給出的第一稿不完美,但已經(jīng)非常接近我會(huì)寫的樣子,而且更快。
最后由 Review Agent 過目。
我把修改后的函數(shù)和更新的規(guī)格交給它,并讓它幫我以“偏執(zhí)評(píng)審者”的視角來思考。 它指出了:
- 外部網(wǎng)關(guān)返回奇怪狀態(tài)碼時(shí)的失敗模式。
- 配置可能被錯(cuò)誤設(shè)置的情形。
- 日志不足以在將來定位問題的情況。
我還是自己過了一遍每一行。 我還是跑了測(cè)試、加了日志,并和另一個(gè)同事討論了這次改動(dòng)。
但過程變了。
我不再是一個(gè)人和 codebase 硬碰硬,而像是在協(xié)調(diào)一支小而專注的團(tuán)隊(duì)在背后托著我。
過去能吞掉一天的活,現(xiàn)在只需要幾個(gè)小時(shí)的高強(qiáng)度投入,且最終結(jié)果更“安全”,而不是更冒險(xiǎn)。
讓這些 Agents 真有用的 Prompts
很多人會(huì)問,實(shí)際起作用的 prompt 到底長(zhǎng)什么樣。
下面是我每天在用的范式。
Spec Agent:把粗想法錘成清晰行為
我先把腦子里的東西寫下來,然后讓代理對(duì)我“嚴(yán)格”一點(diǎn):
“我是一個(gè)后端工程師,正在為 [system] 開發(fā)一個(gè)特性。 以下是我當(dāng)前的描述。 你的角色是一個(gè)苛刻的產(chǎn)品經(jīng)理。
- 指出任何含糊之處。
- 列出缺失的重要邊界情況(edge cases)。
- 提出直接的問題,直到這個(gè)描述變得可測(cè)試。
描述: [我的粗略筆記]”
這里的“魔法”不在于具體措辭。 而在于給代理“和我爭(zhēng)論”的權(quán)限,而不是讓它點(diǎn)頭附和。
Context Agent:替我走一遍 codebase
當(dāng)規(guī)格落地后,我給代理一組文件,并讓它“畫地圖”:
“你是我在這個(gè) codebase 里的向?qū)А?我想修改 [behavior]。
從這些文件中: [文件與文件夾列表]
用簡(jiǎn)單語言解釋:
- 這個(gè)行為目前從哪里來,
- 如果改動(dòng)它,可能會(huì)弄壞什么,
- 任何我應(yīng)該留意的警告性注釋。”
很多令人難堪的“驚喜”,往往會(huì)在這個(gè)時(shí)刻先暴露,而不是在生產(chǎn)上爆炸。
Code Agent:在“圍欄”內(nèi)起草改動(dòng)
輪到動(dòng)代碼時(shí),我把“圍欄”說得非常清楚:
“你是一名謹(jǐn)慎的高級(jí)工程師。 只修改我提供的函數(shù)。 不要引入新的依賴或模式。
目標(biāo):[小而具體的行為變更]
- 給出更新后的函數(shù)。
- 用簡(jiǎn)單語言解釋變化。
- 建議我應(yīng)該補(bǔ)充的若干測(cè)試。
當(dāng)前函數(shù): [粘貼代碼]”
如果答案讓人困惑,我就再問。 如果答案不對(duì),我就丟棄。
重點(diǎn)不是服從 Agent。 重點(diǎn)是把它當(dāng)作一個(gè)能在幾秒內(nèi)響應(yīng)的快速協(xié)作者。
我一周下來的真實(shí)基準(zhǔn)
我對(duì)“隔夜提速十倍”這種說法保持懷疑。
所以我悄悄記錄了自己在一周內(nèi)用 SCCR 風(fēng)格協(xié)作時(shí)的時(shí)間開銷。
現(xiàn)實(shí)大概是這樣:
| Work Type |Old Hands-OnTime|New Hands-OnTime|
|---------------------------------- | ----------------- | ----------------- |
| Mid-Sized Feature Change |~7 hours |~3 hours |
| Bug Fix That Needed Investigation |~3 hours |~1.5 hours |
| Increasing Test Coverage |~5 hours |~2 hours |
| Cleaning Up Logs And Observability |~4 hours |~1.5 hours |這些數(shù)字不是實(shí)驗(yàn)室里的對(duì)照實(shí)驗(yàn)。 而是來自一個(gè)有會(huì)議、有干擾、有真實(shí)截止期的普通工作周。
也有一些任務(wù)里,Agents 并不太管用:
- 全新設(shè)計(jì)、連問題本身都尚未明確的時(shí)候。
- 由基礎(chǔ)設(shè)施不穩(wěn)定或罕見競(jìng)爭(zhēng)條件導(dǎo)致的問題。
但在日常后端工作里,規(guī)律是反復(fù)出現(xiàn)的:

我在鍵盤上的“手指時(shí)間”變少了。 我的“思考時(shí)間”保住了,甚至更鋒利了。
我這套 Agent 方案背后的架構(gòu)
外面看起來這可能像個(gè)巨大而復(fù)雜的系統(tǒng)。 其實(shí)不是。
我想要的是足夠簡(jiǎn)單到我每天都會(huì)真的用它。
大致工作示意是這樣的:
+-------------------------------+
| Developer |
| (Me) |
+--------------+----------------+
|
v
+-------------------------------+
| SCCR Orchestrator |
| (routes tasks toeach agent) |
+-----+-----------+------------+
| |
v v
+-----------+ +-----------+
| Spec || Context |
| Agent || Agent |
+-----------+ +-----------+
| |
v v
+-----------+ +-----------+
| Code || Review |
| Agent || Agent |
+-----------+ +-----------+
|
v
+-------------------+
| CI / Test Run |
+-------------------+“orchestrator”只是一個(gè)很樸素的腳本,做幾件事:
- 接收一個(gè)目標(biāo)(goal)和一個(gè)角色(role)。
- 構(gòu)造解釋該角色的 system message。
- 注入來自 repo、文檔或日志的相關(guān)上下文。
- 把請(qǐng)求發(fā)給 language model(LLM)。
- 返回一個(gè)建議的 diff 或摘要。
用 TypeScript 風(fēng)格的偽代碼,大致像這樣:
type AgentRole = "spec" | "context" | "code" | "review";
interfaceAgentTask {
role: AgentRole;
goal: string;
context: string;
}
asyncfunctionrunAgent(task: AgentTask): Promise<string> {
const system = `You are my ${task.role} agent.
You help me ship safe production code.`;
const prompt = `${system}\n\nGoal:\n${task.goal}\n\nContext:\n${task.context}`;
const result = await llm.complete({ prompt });
return result.text;
}你可以用任何你熟悉的語言實(shí)現(xiàn)它。 結(jié)構(gòu)遠(yuǎn)比語法重要得多。
我與 AI 的“邊界線”畫在哪里
有些領(lǐng)域我讓 Agents 大膽幫忙。 也有些地方,我讓它們穩(wěn)穩(wěn)坐在副駕。
我不會(huì)外包的是:
- 會(huì)影響未來幾年 codebase 的最終系統(tǒng)設(shè)計(jì)決策。
- 與認(rèn)證、加密或權(quán)限檢查相關(guān)的安全敏感邏輯。
- 任何帶有法律或合規(guī)風(fēng)險(xiǎn)的內(nèi)容。
- 構(gòu)建與團(tuán)隊(duì)或利益相關(guān)者信任的那類對(duì)話。
Agents 可以提想法、指出擔(dān)憂、給出文檔線索。 但承擔(dān)這些決策責(zé)任的,不是它們。
把這條邊界畫清楚帶來了一個(gè)意外的副作用: 我對(duì) AI 的威脅感更小了,對(duì)它的支持感更強(qiáng)了。
如何在不打亂現(xiàn)有工作流的前提下嘗試
如果整套 SCCR 看上去太大,那就小步開始。
挑出你日常工作里最“耗人”的一塊。 對(duì)很多人來說,那是讀遺留代碼或?qū)懼貜?fù)性的測(cè)試。
只為這個(gè)痛點(diǎn)創(chuàng)建一個(gè) Agent:
- 清晰解釋它的角色。
- 給它正確的上下文。
- 讓它挑戰(zhàn)并輔助你,而不是接管你。
持續(xù)用上一周。 觀察它在哪里幫你省力,在哪里讓你煩躁。
只有當(dāng)這一切變得自然,再加第二個(gè)角色。
以這種緩慢、謹(jǐn)慎的方式成長(zhǎng)系統(tǒng),你就不會(huì)把工作流變成一個(gè)會(huì)在復(fù)雜性下自我坍塌的實(shí)驗(yàn)。
你怎么看
2025 年真正可怕的地方,不在于 AI 會(huì)寫代碼。
可怕的是,兩位經(jīng)驗(yàn)幾乎一致的開發(fā)者,如今會(huì)在完全不同的層級(jí)上運(yùn)作——僅僅因?yàn)槠渲幸晃粚W(xué)會(huì)了如何與 Agents 協(xié)作,而另一位還停留在復(fù)制—粘貼的時(shí)代。
紙面上,他們看起來一樣。 實(shí)際中,一位總是被工作淹沒,另一位則有足夠的喘息空間去思考。
你已經(jīng)知道自己想成為哪一個(gè)人。
如果這段經(jīng)歷有任何一部分引起你的共鳴,我很愿意聽聽你的想法……
本文轉(zhuǎn)載自????PyTorch研習(xí)社????,作者:AI研究生

















