持續改進Cursor Agent引擎:從上下文視窗到多智慧體未來
Cursor團隊分享了他們如何像開發軟體產品一樣持續最佳化AI程式設計助手背後的agent引擎。文章詳細介紹了上下文視窗的演變(從靜態上下文到動態獲取)、評估引擎改進的兩種方式(離線基準與線上A/B測試)、跟蹤和修復退化問題的機制(錯誤分類與自動化告警)、為不同模型定製引擎的策略,以及支援中途切換模型的挑戰與解決方案。最後展望了多智慧體協作的未來。
Cursor團隊近日釋出部落格,詳細闡述了他們如何像打造一款雄心勃勃的軟體產品一樣,持續改進其AI程式設計助手的底層“agent引擎”。文章揭示了從上下文視窗管理到多智慧體協作的全方位思考與實踐。
上下文視窗的進化
agent與大型語言模型互動的核心是上下文視窗。2024年末初代agent時,模型自主選擇上下文的能力較弱,團隊大量投入上下文工程,例如每次編輯後自動顯示lint和型別錯誤、限制每次呼叫工具數量等,並提供了大量靜態上下文(如程式碼庫結構、語義匹配程式碼片段)。隨著模型能力提升,這些靜態上下文大多被移除,轉而讓agent在工作時動態獲取所需資訊。團隊認為,動態上下文獲取是當前工作的重點。
評估引擎改進的兩種方式
引擎與模型共同決定agent質量,但“好”很難定義。團隊建立了多層次的度量體系:除了維護公開基準和內部測試集CursorBench外,還進行線上A/B實驗。實驗中使用延遲、token效率、工具呼叫次數等客觀指標,同時引入兩個更模糊但重要的度量:一是“程式碼保留率”(agent生成的程式碼在使用者倉庫中經過一段時間後仍保留的比例),二是用語言模型分析使用者對agent初始輸出的反應(如使用者繼續推進下一功能表示滿意,貼上錯誤棧則表示不滿意)。線上測試有時會否決看似有希望的方案,例如嘗試更昂貴的摘要模型並未帶來顯著質量提升。
跟蹤與修復退化
隨著模型和功能增加,引擎複雜度提升,bug也更難避免。工具呼叫的錯誤尤其有害,會導致“上下文腐爛”。團隊將錯誤分為未知錯誤(即引擎bug)和預期錯誤(如模型提出錯誤編輯、讀取不存在的檔案)。預期錯誤進一步細分為InvalidArguments、UnexpectedEnvironment、ProviderError等。他們設定告警:未知錯誤率超過閾值立即報警,預期錯誤則透過異常檢測(按工具和模型計算基線)來發現顯著偏離。此外,每週自動化指令碼會搜尋日誌,發現新問題或激增問題並建立工單。透過這個“軟體工廠”流程,團隊在一個衝刺中將未知工具呼叫錯誤降低了一個數量級。
為不同模型定製引擎
引擎抽象層與模型無關,但為每個模型深度定製。例如,OpenAI模型擅長補丁格式編輯,Anthropic模型擅長字串替換,引擎會為之配備各自熟悉的工具格式。定製深入到提示詞層面:OpenAI模型更字面精確,Claude更直覺化。當提前拿到新模型時,團隊從最相近的現有模型引擎開始迭代,透過離線評估發現困惑點,反覆調整直到滿意。有時還會遇到模型特有的“怪癖”,比如某個模型在上下文填滿時出現“上下文焦慮”——拒絕繼續工作,團隊透過提示詞調整減輕了這一行為。
支援中途切換模型的挑戰
使用者可能在對話中途切換模型,這要求引擎同時支援不同模型的行為、提示詞和工具形狀。Cursor會自動切換至對應引擎,但模型需要處理由另一模型產生的對話歷史,這屬於分佈外資料。為此,引擎會向模型新增指令,告知其正在接手其他模型的任務,並引導其避免呼叫不屬於當前工具集的工具。切換還會導致快取失效,增加延遲和成本。團隊嘗試用對話摘要來緩解,但複雜任務中摘要可能丟失細節,因此建議使用者在單個對話中儘量保持同一模型。另一種方案是使用子agent(subagent),其擁有全新的上下文視窗,使用者可直接要求以特定模型執行子agent。
引擎與軟體開發的未來
團隊認為,AI輔助軟體工程的未來是多智慧體協作。系統將學會把任務委託給專門的智慧體:一個負責規劃,一個負責快速編輯,一個負責除錯等。而這一切的核心是引擎——它需要知道派遣哪個agent、如何為其構建任務、以及如何將結果整合成連貫的工作流。因此,引擎工程對於agent成功的意義將越來越重大。