從網頁對話到 coding agent第 1 篇,共 9 篇

離開網頁對話

讓 agent 直接讀取電腦上的檔案,不必再複製貼上。

發佈於

前言

近一年觀察同窗使用 ChatGPT 或 Claude,經常見到一些低效操作。比如需要修改 code 時,基本是將網頁上生成的 code 複製執行,等出結果後再將結果上傳,以此循環。如果是免費使用者,此為無奈之舉;但許多人明明持有付費帳號,卻僅僅是為了上傳更多圖片。實際上大部分功能並未充分使用,token 用量(token 是計算用量的單位)也未完全消耗,而已消耗的部分又多用於解析圖片、PDF 等非文字的視覺化文件。

上述循環其實並無必要。現有一類稱為 coding agent 的工具,可以直接讀取電腦上的檔案、執行 code 並查看結果,中間不需人工複製;而這類工具早已包含在同一份付費方案之內,並不需要另外付費。問題在於多數人並不知道它存在。

而這並非個例。CS(Computer Science)領域早已有一批工具可以改善科學分析的體驗,諸如版本控制、依賴管理(記錄一份分析用了哪些套件、各是哪一版)、平行運算;只是過去須先學會才用得上,對未受過相關訓練的人而言門檻不低。如今這些工具同樣可以交由 coding agent 操作,使用者只需知道它們存在,以及各自解決什麼問題。然而 coding agent 只會執行被交代的內容,並不會主動提出更好的方案;使用者如果不知道,它也不會提。

本系列即為此而寫,面向以 R 或 Python 進行資料分析與科學計算的學生與研究者,側重工作環境的設定,以及相關的 CS 科普;操作步驟以 Windows 為準。本系列編寫時使用的是 Claude,因此主要以 Claude 舉例;ChatGPT 一側的許多概念與之相同,如果有不同之處會單獨提及。

網頁對話與 coding agent 之別

ChatGPT 與 Claude 背後都是 LLM(Large Language Model,大型語言模型),即讀進一段文字、再生成文字的模型;本系列說「模型」時指的都是 LLM。

Agent 一詞原意為代理人,即受託代為辦事者。網頁對話如今也能代為搜尋,或在服務商的電腦上執行 code,但碰不到使用者電腦上的檔案,在本機動手的仍是使用者;coding agent 則是受託之後,在使用者的電腦上自行動手。

網頁對話看不到電腦上的檔案,它所知道的只有對話框裡貼上或上傳的內容,資料夾裡還有哪些檔案、彼此如何相關,一概不知;coding agent 則以所選的資料夾為範圍,需要哪個檔案便自行開啟,不需逐一上傳。Agent 讀進的每一段文字都計入 token 用量,而在本機上找檔案時,它會先以搜尋工具定位到相關的檔案與行號,未必將整份內容讀完,因此消耗的 token 也相對較少。

執行 code 也是如此。網頁對話雖有內建的執行環境,但那是在服務商的電腦上,沒有本機的資料,也沒有已安裝的套件,因此寫出的 code 能否執行、結果是否正確,仍須由使用者複製執行後再回報,即前言所述的循環;coding agent 則可自行在本機上執行,讀取錯誤訊息或輸出的結果,據此修改後再執行,直到完成為止。

既看不到檔案,也不能在本機執行,網頁對話對使用者電腦上的情況所知的一切,都須經使用者轉述,因此只能依描述作判斷。而許多人其實不容易將自己要什麼、遇到什麼問題說準確,比如只說「跑不動」或「結果怪怪的」,卻未附上錯誤訊息,也未說明原本預期的結果;描述愈不精確,模型判斷出錯的機率愈高,網頁對話除了追問之外並無他法。coding agent 既能自行讀檔與執行,便可直接查看實際的檔案與錯誤訊息,據此推斷使用者的意圖,即使描述含糊,判斷正確的機會也較高。但指示寫得清楚仍有幫助,寫法留待「Prompt 技巧與協作的做法」一節說明。

另一項差別在於新對話。網頁對話每開一個新對話,都須從頭交代,除非另設 Projects,否則先前上傳的檔案、說明過的背景與要求不會帶到新的對話,須重新上傳、再說明一次要點;coding agent 的新對話同樣不記得先前談過什麼,但檔案仍在資料夾內,需要時再讀即可,而每次都須交代的要點可以寫成規範檔留在資料夾裡,留待「規範檔的作用與位置」一節說明。

網頁對話與 coding agent 背後其實是同一個 LLM,差別在於包在 LLM 外面的那一層給的工具不同;LLM 與這一層各自負責什麼,留待「Agent 的工作流程」一節說明。

安裝桌面 app

Claude 與 ChatGPT 都有桌面 app,coding agent 就在其中。安裝本身與一般軟體沒有分別,此處僅列出下載位置:

訂閱方面,每月 20 美元一級的方案(Claude Pro 或 ChatGPT Plus)即已足夠;如果是免費帳號,在 Claude 桌面 app 內點選 Code 時會被要求先升級。

Claude 桌面 app 上方有三個分頁;ChatGPT 桌面 app 的結構相仿,分為 ChatGPT 與 Codex 兩處,ChatGPT 之下又有 Chat 與 Work。兩者的對應如下:

用途ClaudeChatGPT可用的檔案
一般對話,與網頁對話相同ChatChatGPT 之下的 Chat僅對話框內貼上或上傳的內容
交辦任務的 agent,產出報告、簡報一類的成品CoworkChatGPT 之下的 Work可使用本機檔案
於指定的資料夾內讀檔、改檔、執行 codeCodeCodex以本機上指定的資料夾為工作範圍

本系列只使用 Claude 的 Code 分頁與 ChatGPT 的 Codex;Code 分頁裡的 agent 名為 Claude Code,後文稱 Claude Code 時即指它。如果安裝後仍停留於 Chat,則與使用網頁對話沒有分別,前言所述的複製循環依舊;Cowork 與 Work 雖然也能使用本機檔案,但定位是交辦任務、取回成品,而本系列需逐一檢視 code 的改動與執行結果,因此不採用。

初次使用:讀取既有資料夾

初次使用不妨只讀不改,挑一個既有的資料夾,比如上學期的某份作業或報告,內容自己熟悉,agent 說得對不對一看便知。

  1. 開啟 Code 分頁,環境選 Local,即在本機上直接使用電腦裡的檔案;選單裡另有 Cloud、SSH 與 WSL,分別在 Anthropic 的伺服器、遠端的機器與 Windows 內的 Linux 環境執行,本系列都用不到。
  2. 點選 Select folder,選取該資料夾。
  3. 模型維持預設即可,如何選擇留待「模型規模與 effort」一節。
  4. 於對話框輸入指示並送出。

指示可以這樣寫:

閱讀這個資料夾,說明每個檔案的用途,以及這份分析的流程。不要修改任何檔案。

送出後可以看到 agent 逐一開啟檔案,隨後給出說明。接著可以追問一些須對照多個檔案才能回答的問題,例如:

報告裡的圖 2 是由哪一個腳本、哪幾行產生的?
哪些檔案看起來已經沒有被用到?

這類問題在網頁對話裡須先上傳全部檔案,在此則不需任何準備。Codex 的流程相同,也是選定資料夾後再下指示。

所選的資料夾就是專案,也是 agent 看得到的範圍,應選取單一分析所在的資料夾,不選裝著多份工作的上一層,比如裝著所有課程作業的資料夾。如果檔案原本是平鋪的,應先建立一個資料夾,將這份分析所需的檔案移入,再開啟。

權限提示與 plan mode

Agent 動手的方式就是修改檔案與執行指令。指令是交給作業系統執行的一行文字,與使用者寫給 agent 的指示不是同一件事;執行 code、安裝套件、搬移檔案都透過指令。

讓 agent 動手,最令人不安的是它改壞檔案,桌面 app 為此設有事前的防線。最基本的一道是權限提示:送出按鈕旁有一個模式選單,決定 agent 在動手之前是否須先徵求同意。

模式行為
Manual修改檔案或執行指令之前都先詢問
Accept edits修改檔案與建立資料夾一類的操作不再詢問,執行其他指令仍會詢問
Plan只探索並提出計畫,不修改檔案
Auto不逐一詢問,由背景的另一個模型判斷每一步操作,攔下有風險的

舊版介面將這些模式稱為 Ask permissions、Auto accept edits 與 Plan mode,所指相同。

初期建議使用 Manual。此模式下,agent 每次要修改檔案,都會先顯示改動前後的對照,並附上 Accept 與 Reject 兩個按鈕;按下 Accept 之前,檔案不會有任何變化,按下 Reject 則 agent 會詢問接下來該怎麼做。執行指令時也一樣,須先經同意。

看提示時,先看改的是哪一個檔案、改動的範圍是否與所交代的相稱,如果交代改一張圖卻動了讀取資料的部分,便應拒絕並詢問原因;指令如果看不懂,可以先拒絕,請 agent 說明其作用後再決定。熟悉之後再視情況改用 Accept edits。

另一道是 plan mode,即上表的 Plan。此模式下 agent 會閱讀檔案、執行指令以了解現況,然後提出一份計畫,但不修改任何檔案。改動較大時,例如重寫整份腳本,應先以 Plan 開始,計畫看過、修正過之後,再切回 Manual 執行,此時計畫如果有不妥,還沒有任何檔案需要復原。

Codex 的做法略有不同,預設在沙盒(sandbox,受限的執行環境)內執行,即網路關閉,寫入範圍限於專案資料夾,超出此範圍的操作才會徵求核准,因此 install.packages() 這類需要連網的指令會出現核准提示。Codex 也有 plan mode。

這些防線都在事前,改動一經接受,要退回原狀便須另有手段,這就是版本控制一篇的 Git;還沒有使用 Git 時,如果要讓 agent 修改重要的資料夾,先複製一份備份。