持續改進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成功的意義將越來越重大。