Understanding ChatGPT Work

Simon Willison

搞懂 ChatGPT Work

原文由 Simon Willison 發布,訂閱此部落格

OpenAI 發表了 ChatGPT Work 於 7 月 9 日,之後便馬不停蹄地持續迭代。這是一款極度讓人困惑、卻又非常強大的產品。以下是我目前為止摸索出的心得。

ChatGPT Work 其實是兩種產品

ChatGPT Work 中比較有趣的版本是在雲端執行的那個。可以透過 chatgpt.com 或 ChatGPT 行動版 App 存取。我們暫且稱它為 Work Cloud

如果你安裝 ChatGPT 桌面版 App——也就是以前叫做 Codex 的那個——就能用到一個同樣叫做 ChatGPT Work 的功能,它可以直接存取你電腦上的檔案並執行程式。我們就稱它為 Work Local。這個版本感覺比較像是把原本的 Codex 重新包裝,讓非軟體開發者比較不會感到有距離感。

(更新:Work Cloud 也可以在 ChatGPT 桌面版 App 中使用,透過 Where should this chat run? 下拉選單。)

接下來的內容,我只會談 Work Cloud。

只有付費用戶才能使用 Work

目前,ChatGPT Work(兩種版本皆然)僅開放給月費 20 美元以上的訂閱用戶。免費用戶與月費 8 美元的 Go 用戶無法使用。

Work 擁有 Chat 所沒有的功能

存取 Work 的介面是一個分頁切換器,把它呈現為 Chat 的替代選項:

ChatGPT App 頂部,顯示 Chat 與 Work 兩個分頁

很直覺的問題就是我什麼時候該用 Chat,什麼時候該用 Work?

OpenAI 針對這個問題的 官方說法是:

當你想要一個答案、解釋、腦力激盪或簡短草稿時,請使用 Chat。當你希望 ChatGPT 完成一項有明確成果的任務時,請使用 ChatGPT Work,例如簡報摘要、投影片、分析、定期更新、工作流程,或是可供你檢視與使用的檔案。

我覺得這回答幾乎完全沒用,因為這些類型的任務,我用一般的 ChatGPT Chat 已經做了好幾年!

所以更好的問題是Work 有哪些 Chat 所沒有的功能?

經過大量實驗,我認為我已經大致搞清楚了:

模型選擇

在 Work 中,你可以選擇 GPT-5.6 的 Sol、Luna 或 Terra,每個模型都有 Light、Medium、High、Extra High、Max 或 Ultra 推理等級可選。你也可以選擇 GPT-5.5 的 Light、Medium、High 或 Extra High。

這些看起來就是透過 OpenAI API 提供的相同模型。

Chat 則提供不同的選項:5.6 Instant、Medium、High、Extra High 和 Pro(實際上 Extra High 和 Pro 僅開放給月費 100 美元以上的訂閱用戶——月費 20 美元的用戶最高只到 High)。它並未說明這些是 Luna、Terra 還是 Sol(我猜是 Sol?)。5.6 Pro 似乎是 Chat 獨有的,Work 中沒有對應的版本。

根據我使用 Codex 的經驗,我目前的理解是,Ultra 是一種會更積極地將任務委派給子代理的特殊模式。

我認為 ChatGPT Work 的工作階段是計入你的 Codex 額度,而 ChatGPT Chat 的工作階段則有各自獨立的額度。這或許可以解釋模型可用性上的差異。

可連上網際網路的程式碼執行環境!

身為 Code Interpreter 模式的長期愛好者——這個模式由 OpenAI 在 2023 年開創——這對我來說是 ChatGPT Work(Cloud)目前為止最讓人興奮的功能。

程式碼執行環境現在可以跟網際網路的其他部分溝通了!

ChatGPT Chat 做不到這一點——如果你要求它安裝額外的軟體套件,或與網站、API 互動,存取就會被容器 proxy 擋下來。

(奇怪的是,早在一月時它曾一度 開放了安裝套件的能力,但現在似乎又不行了。真希望他們的更新日誌能寫得更清楚一點!)

Claude 對應的容器自去年九月推出以來,就允許受限的網際網路存取。Claude 可以從 PYPI 和 NPM 安裝套件、從 GitHub 複製儲存庫。但也就這樣了:允許的網域清單非常短。

ChatGPT Work 允許的則多得多。它可以設定為只允許特定的網域清單,但預設值看起來是對所有網域開放。

這讓 Work 成為一個極為實用的工具。你可以讓它複製 GitHub 儲存庫、安裝相依套件,然後用它們來與網路上的其他服務互動!

完整的無頭 Chrome 瀏覽器

ChatGPT Work 的另一個殺手級功能是 瀏覽器工具。ChatGPT Work 可以啟動一個完整的 Chrome 實例、載入網站、填寫表單並截圖。

ChatGPT 對話截圖。黑色圓角氣泡中的使用者訊息寫著:Visit https://london-pelicans-in-her-piety.simonw.chatgpt.site/ and take a screenshot with you browser. 下方有一行收合的狀態列寫著 "Worked for 1m 18s >",接著是回覆 "Here's the screenshot of the live site:" 以及嵌入的網站截圖。

如果網站需要登入,瀏覽器會提示你接手操作,自行輸入密碼和 2FA 驗證碼,而不會讓這些憑證經過模型本身。

它甚至可以在已載入頁面的 DOM 上執行 JavaScript。我下的提示是:

Load simonwillison.net in your browser and extract the headings using JavaScript

ChatGPT Work 啟動了一個瀏覽器實例並執行了這段程式碼:

await tab.playwright.evaluate(() => {
  return Array.from(document.querySelectorAll("h1,h2,h3,h4,h5,h6"), heading => ({
    level: heading.tagName.toLowerCase(),
    text: heading.innerText.trim().replace(/\s+/g, " "),
    id: heading.id || null
  }));
});

這感覺很像我的 shot-scraper javascript 工具,只不過現在我可以在手機上用了!

持久化的共用檔案系統

ChatGPT Chat 的每個對話都會取得一個全新的檔案系統。這些檔案無法從任何其他對話存取。

在 ChatGPT Work 中,每個工作階段都會有自己的 scratch 資料夾——名稱像是 /workspace/scratch/e00a0a017944——但這些資料夾會在不同工作階段之間保留下來,所以你可以存取先前對話中的檔案。我現在在 /workspace/scratch 底下就有 171 個資料夾!

據我觀察,那個 /workspace 磁區會掛載到所有正在執行的 Work 工作階段——在一個工作階段中的檔案編輯會立刻被其他工作階段看到。不過,它們似乎沒有共用同一個處理程序空間,在其中一個工作階段中執行的 localhost 伺服器無法從另一個工作階段存取。

ChatGPT Sites

ChatGPT Work 具備使用 Cloudflare Workers 建立並部署完整網站的能力。這些網站可以包含 HTML 和 JavaScript,也能執行伺服器端功能,包括基於 Cloudflare D1 和 R2 的有狀態功能。

以下是我用這個功能建立的一個簡單網站:

london-pelicans-in-her-piety.simonw.chatgpt.site

淺米色背景的網站首頁截圖。頂部導覽列:左側為寫著 "P/P" 的圓形標誌,中間是 "THE CENSUS"、"COLLECTIONS" 與 "METHOD" 連結,右側為 "JSON ↓"。左半部為主視覺區,上方以紅色小寫大寫字母寫著 "AN ICONOGRAPHIC CENSUS · GREATER LONDON",下方是大型襯線標題 "Pelicans in her piety",其中 "piety" 為紅色斜體。底下寫著:"Across London, an impossible bird bleeds for her young—in limewood, marble, mosaic, metal and glass. This is an evidence-backed census of where to find her." 接著是兩個按鈕:實心黑色的 "EXPLORE ALL 28" 與外框式的 "DOWNLOAD THE DATA"。右半部是一張教堂內華麗深色木雕祭壇背屏的照片,頂部有鍍金甕與紋章、科林斯柱式、中央為一隻展翅的鍍金鵜鶘,祭壇上有黃銅十字架與紅花,兩側有刺繡旗幟,以及黑白格子地板與紅地毯。照片右緣有垂直文字 "ST MARY ABCHURCH",底部說明文字為 "Grinling Gibbons's reredos, St Mary Abchurch. Photograph: Diliff, CC BY-SA 3.0, via SPAB ↗"。底部有一條統計資訊列,顯示 "28 FIXED SITES"、"4 COLLECTIONS"、"3 OPEN LEADS" 與 "2 KNOWN LOSSES"。

我下的提示是:

Figure out all of the places in London with a pelican in her piety, then turn that into a JSON file and build a ChatGPT sites site about them

(pelican in her piety 是一種迷人的中世紀基督教圖像——一旦你認識了它,就會發現它無處不在。)

這些網站預設僅對建立者本人可見,但你可以將其設為公開,並(在團隊方案中)與特定人士分享。

使用 Sol、Luna 與 Terra 的子代理

這個沒什麼好多說的。ChatGPT Chat 無法執行子代理,ChatGPT Work 可以。這完全是一個進階使用者功能:如果你正在執行一個複雜的專案,需要多個平行代理協作完成,Work 就能做到。

排程提示自動化

另一個似乎在某個時間點從一般 ChatGPT 移轉到 ChatGPT Work 的功能。你可以這樣對 ChatGPT Work 下提示:

run a search to see if Waymo have announced a launch date for Half Moon Bay every day at 8am

這會排程一個提示以該頻率執行。這些提示可以判斷沒有發生什麼值得注意的事,或決定通知你有新資訊。

更新:實際上這在 ChatGPT Chat 中似乎也可行。

不過還是值得在這裡提一下,因為它可以與其他 ChatGPT Work 獨有的功能搭配使用。例如,你可以設定一個排程任務,每小時更新一次 ChatGPT Site。

這樣安全嗎?

對我來說,目前一個懸而未決的問題是,這些東西到底有多安全

我的 lethal trifecta 模型警告了任何同時具備存取私密資料、接觸不受信任內容,以及能將竊取的資訊回傳給攻擊者的管道這三者的代理系統所固有的風險。

ChatGPT Work 三者兼具!

我很想聽聽 OpenAI 會如何說明他們如何保護 ChatGPT Work 工作階段免受提示注入攻擊。我預期他們的答案會和 Codex 相同,也就是 auto-review 機制

OpenAI 可以讓這一切不這麼令人困惑

要搞懂這一切,花了我遠比應有還多得多的功夫。

我認為主要有兩個關鍵問題:

  1. OpenAI 在解釋 Work 時都在講它的用途,而不是它實際上能做什麼
  2. OpenAI 仍然堅持隱藏他們的系統提示與工具說明

如果 ChatGPT Work 的說明文件包含了代理所使用的確切系統提示與工具說明,我根本就不需要寫這篇文章。

所有工具一覽

發表這篇文章後沒多久,我有了一個想法。我開啟了一個全新的 Work 工作階段,並下了這樣的提示:

Build a site that lists every one of your tools - nearly grouped into categories - and for each one explain what it does. Try to exactly duplicate arguments and tool descriptions where possible. Design aesthetic should be technical docs, minimal flare

這是它建立的網站,其中包含了 223 個已註冊工具的詳細資訊——不過其中有 6 個來自透過 datasette-mcp 提供的我個人 MCP。

還有為數眾多的 Skills

我注意到清單中唯一與瀏覽器相關的工具是 web.run,它有執行搜尋、開啟網址和點擊連結的方法,但就無頭瀏覽器自動化而言,看起來並非全貌。

這讓我懷疑還少了些什麼,所以我告訴那個建立工具參考網站的 ChatGPT Work 工作階段:

Add full copies of every skill to the website (separate pages linked to from the homepage)

結果發現 ChatGPT Work 使用了大量的 skills——事實上多達 44 個!

control-browser skill 解釋了瀏覽器的運作方式:

透過 Node REPL js 工具執行瀏覽器設定程式碼。在此環境中,可呼叫的工具 ID 通常顯示為 mcp__node_repl__js。 [...]

直接與瀏覽器互動的能力是透過 browser-client 執行環境,經由 agent.browsers.* API 所提供。在嘗試與其互動之前,你必須一次完整地輸出並讀取由 await browser.documentation() 回傳的完整文件。

所以我告訴 Work:

Add the full output of await browser.documentation() to the bottom of the /skills/control-browser page

現在你也可以在 /skills/control-browser 上讀到它。

還有幾個有趣的 Skills:

本文章由 muse-spark-1.2-contributor 進行翻譯

留言