讀屏不靠截圖:ChatGPT 客戶端的原理、實現與邊界

ChatGPT 的 Mac 客戶端現在可以連接常用的一些應用程序,比如 VSCode、XCode、iTerm2,這樣可以直接就這些應用程序上的內容去提問,效果很棒!

地址:https://openai.com/chatgpt/desktop

它基於原生應用程序的能力以及加上用戶對它的授權,可以獲取到這些應用當前窗口的內容,然後將窗口的內容整理成提示詞一起提交到 GPT,這樣 GPT 就可以根據窗口內容來處理了,提示詞類似於下面這樣:

<windows><instructions>
You are being provided with textfield content from windows the user has asked you to focus on.
</instructions><window><title>Visual Studio Code</title><app_name>Code</app_name><textfields><textfield id="窗口文件名">
【窗口內容】
</textfield></textfields></window></windows>

通過請求分析,可發現:它不是通過截圖獲取內容的,是直接獲取窗口完整內容的,比如VSCode,需要額外安裝插件以獲取完整文本,所以窗口被遮擋也沒關係。

具體的請求分析

可以將鼠標懸停在 ChatGPT Mac 客戶端橫幅上,查看 ChatGPT 發送哪些內容。

在歷史消息中,鼠標懸停在消息頂部,也可以看發送過的內容。

工程技巧與邊界

仔細查看,發現:

  • 使用編輯器和 IDE(Xcode、VS Code、TextEdit)時,ChatGPT 會包含打開的編輯器窗格的全部內容,直到達到最大長度限制被截斷。

  • 如果在編輯器中選擇文本,ChatGPT 會重點關注選中的內容,窗口的全部內容仍然會包含在上下文中。

  • 使用命令行窗口(Terminal、iTerm)時ChatGPT 包含最後 200 行內容。如果在窗口中選中文本,ChatGPT 將重點關注所選內容以及相鄰文本,直至截斷限制。

這個功能確實不錯,但要說能替代 Cursor 那還太扯了:

  • 它不是項目級別的,只是窗口級別的,編程是要用到整個代碼庫的

  • 它的結果不能自動更新回窗口,需要手動複製黏貼