Understanding Cursor and WindSurf's Code Indexing Logic

  tr_cn        2024-12-21 20:23:54       11,593        0          English  简体中文  繁体中文  ภาษาไทย  Tiếng Việt 

背景:AI 程式設計中上下文的重要性

如果大型模型(例如 Claude 3.5 Sonnet)的「智慧」是推動 AI 程式設計能力逐步躍升的關鍵因素,那麼另一個關鍵因素就是上下文長度

目前,Claude 3.5 Sonnet 提供最多 200k 個 token 的上下文長度。雖然這對於對話模型來說已經綽綽有餘——可以輕鬆處理 50,000 字甚至 100,000 字的書籍——但對於涉及數十或數百個程式碼檔案(每個檔案包含數百或數千行程式碼)的程式設計專案來說,仍然遠遠不夠。此外,大型模型根據輸入和輸出 token 的數量收費,邊際成本並不可忽略。

這兩個特性促使 Cursor 和 Windsurf 等 AI 程式設計工具實施多項優化,目標如下:

  1. 準確提取與任務相關的程式碼以節省上下文長度,實現多步驟任務優化並提供更好的使用者體驗。
  2. 最大限度地減少閱讀「不必要」的程式碼內容,不僅可以改善任務優化,還可以降低成本。

在上述約束和目標下,Cursor 和 Windsurf 採用了不同的優化策略來提升其產品體驗。然而,這種「優化」往往涉及權衡,只能產生局部最優解,不可避免地會犧牲使用者體驗的某些方面。

本文旨在幫助您和我理解其「優化」背後的 methods 和邏輯。通過掌握這些調整中涉及的權衡,我們可以更好地利用不同產品的優勢和劣勢。這種理解將使我們能夠在各種情況下切換工具和調整使用方法,最終實現任務的最優解。

結論:Windsurf 適用於入門,Cursor 適用於優化

根據最近的經驗和對 12 月 15 日 Cursor 0.43.6 和 Windsurf 1.0.7 的實際評估,得出以下結論:

1. 對於執行基本任務的初學者:Windsurf > Cursor Agent > Cursor Composer(普通模式)

在 Agent 模式下,執行基本任務的效能優於標準 Cursor Composer 模式。這是因為 Agent 模式會解釋任務,掃描程式碼庫,定位檔案,閱讀程式碼並逐步執行操作以完成任務。

與 Cursor Composer 模式的 Agent 相比,Windsurf 的 Agent 表現出更好的任務理解和多步驟執行能力。

2. Agent 模式的關鍵限制:檔案閱讀不完整

此限制會影響複雜專案和大型程式碼檔案。

  • 在 Cursor 的 Agent 模式下,預設情況下會讀取檔案的前 250 行。如果需要更多內容,它有時會自動再擴展 250 行。對於某些定義明確的任務,Cursor 會執行搜尋,每次搜尋最多返回 100 行程式碼。
  • Windsurf 預設情況下每次讀取 200 行,如有必要,最多重試 3 次,總共最多讀取 600 行。

3. 對於單個檔案操作,Cursor 的效能優於 Windsurf

在 Cursor 中,如果您 @ 指定檔案,它將嘗試盡可能完整地讀取檔案(測試最多 2000 行)。

在 Windsurf 中,@ 檔案僅僅幫助它找到相關檔案,但不會提示完整讀取該檔案。這是兩種工具之間邏輯上的關鍵區別。

4. 當您了解專案結構時:Cursor 在單個檔案聚焦方面表現更好

如果您知道自己在做什麼,並且您的任務與特定檔案相關,則在 Cursor 中使用 @ 將焦點放在單個檔案上會產生更好的結果。相反,使用 @codebase 無法確保 Cursor 會將所有相關程式碼包含在上下文中。相反,它使用較小的模型來分析和總結每個檔案,導致必要的程式碼覆蓋不完整。

3. 測試過程

以上所有結論均基於我每天大量使用 Cursor 和 Windsurf(500 多小時)以及有針對性的測試。在這次測試中,我使用了一個包含 1,955 行的影片字幕檔案。字幕檔案包含時間戳記和鬆散耦合的內容,因此很容易確定 AI 程式設計工具是否真正讀取了檔案以及讀取了多少內容——沒有留下任何「猜測」的空間。

為確保工具確實是「閱讀」而不是通過 Retrieval-Augmented Generation (RAG) 來總結,我在每 500 行隨機插入不相關的內容。這些隨機插入的內容包括:

• 「花生最喜歡的運動是網球。」

• 「花生最喜歡的籃球隊是湖人隊。」

• 「花生喜歡戴白色圓頂帽。」

• 「花生最喜歡的食物是螳螂蝦。」

測試回合:

回合 1:Cursor Composer(普通模式)

Cursor 沒有主動定位或讀取字幕檔案,導致任務失敗。

回合 2:Cursor Composer(Agent 模式)

在 Agent 模式下,Cursor 找到並讀取了字幕檔案,但只讀取了 250 行。

回合 3:Windsurf Cascade(預設 Agent 模式)

Windsurf 找到並讀取了字幕檔案,嘗試讀取三次,但只讀取了 600 行。

回合 4:Cursor Compose(單個檔案 @ 模式)

通過明確 @ 檔案,Cursor 完全讀取了所有 1,955 行,第一次返回準確的結果。它還通過了隨機的「陷阱」問題,證實它確實讀取了內容。

回合 5:Cursor Compose(@codebase 模式)

Cursor 總結了影片的內容,但所有陷阱問題都失敗了。這表明在此模式下,Cursor 使用較小的模型執行多次讀取,並且只將總結後的資訊返回到上下文中。

回合 6:Windsurf Cascade(單個檔案 @ 模式)

在 Windsurf 中明確 @ 檔案仍然只會產生 600 行的總結,證實它沒有完全讀取檔案。

在不同場景中使用 Cursor 和 Windsurf 的建議

  1. 將每個程式碼檔案保持在 500 行以下。這確保檔案保持在 Cursor Agent 可以嘗試兩次讀取的範圍內。
  2. 在程式碼檔案的前 100 行中清楚地記錄每個程式碼檔案的功能和實現邏輯。使用註釋使 Agent 更容易索引和理解檔案的目的。
  3. 對於初學者或初始階段的簡單專案,Windsurf 更有效。Windsurf 擅長處理新使用者的簡單任務和專案。
  4. 對於檔案超過 600 行的複雜專案。如果您熟悉該專案,了解您的任務並知道哪些程式碼檔案相關,則使用 Cursor 並明確 @ 相應的檔案將產生最佳結果。
  5. 經常重新啟動對話。例如,完成新功能或修復錯誤後,重新啟動互動有助於防止長時間的上下文污染專案。
  6. 定期在專用檔案(例如 README.md)中記錄專案的狀態和結構。這允許 Cursor 和 Windsurf 在重新啟動對話時快速了解專案的狀態,最大限度地減少引入過多或不必要上下文的風險。

注意:本文經花叔授權翻譯和重新發布。原文連結:https://mp.weixin.qq.com/s/Fl-K-tdRuhlT9I-bcLbtdg

COMPARISON  CURSOR  WINDSURF  INDEXING 

           

  RELATED


  0 COMMENT


No comment for this article.



  RANDOM FUN

We are Twins

This scene happens at the Roxbury theme one night back in 90's. The original video can be found at YouTube.