跳到內容

與代理聊天

本指南說明如何在空間中與代理協作。

  1. 在側邊欄前往 空間
  2. 按一下「空間」標題旁的 + 按鈕
  3. 輸入名稱——這是必填欄位。空的名稱會被拒絕; 對話方塊會保持開啟
  4. 視需要從工作區加入代理
  5. 如果工作區有任何儲存庫,會出現儲存庫選擇器。它一開始會選取所有 儲存庫;請縮小範圍(包括取消選取單一儲存庫),只留下這個空間 應該為其佈建工作樹的儲存庫
  6. 確認

Control Center 會開啟該空間,並在背景為每個選取的儲存庫開始佈建一個 寫入時複製工作樹。

在輸入區輸入訊息並按 Enter。代理便會派送,並開始串流它的回應。

如果空間仍在佈建中,你的訊息會被暫留而不是遺失—— 輸入區會留住它,並在工作樹就緒後自動送出。

當代理工作時,你會看到它的回合串流進來:推理區段、工具呼叫 (檔案讀取、寫入、shell 命令)以及回答文字,全都位於同一則代理回合 訊息中。

當代理正在工作時,一般的對話文字不會排入新的回合。 它會變成輸入區上方那一列中的排隊引導卡片,並在下一個回合邊界 注入正在進行的執行。不會出現快顯通知——那張卡片本身就是回饋。

有三件事會改變這種行為:

  • 含有 @提及 的訊息一律以訊息送出,絕不作為引導
  • 以斜線指令開頭的訊息一律以該指令處理
  • 帶有附件的訊息一律以訊息送出——引導佇列只接受文字
  • 如果每個進行中的執行都已結束,這段文字就會直接通過,並以一般訊息 送出

當代理觸及護欄把關的動作時——例如具破壞性的命令、需要特殊權限的 工具——伺服器會封鎖該次執行,並向每個已連線的用戶端發佈一則核准 請求。如果你開著那個對話,該請求會在對話中、輸入區上方出現, 形式與 ask_user 所用的編號選項卡片相同(拒絕、核准,以及可選的 核准 8 小時)。沒有略過這種選項:遭封鎖的代理正在等待一個決定。

如果你人在應用程式中的其他地方,殼層中一個一律置頂的面板仍會列出 正在等待的項目,因此你不必費心尋找那個空間就能解除代理的封鎖。 一旦該空間的對話出現在畫面上,覆蓋層就會立刻隱藏該請求,因此你永遠 不會對同一個提示回答兩次。

沒有逾時:遭封鎖的代理會一直等到有人做出決定。同一則請求也會出現在 收件匣需要注意的項目列上,以及手機用戶端上。

當代理需要一個偏好設定、一項缺少的需求,或面對真正的分歧時,必須 呼叫 ask_user。把問題寫成聊天訊息會結束該回合,你得重新提示一次。 這個工具會在對話中呈現一張編號卡片——選項、可選的自由文字,或兩者 兼具——而該次執行會等待你的回答。

點選單一選項即可送出(游標停留時,尾端的數字會變成箭頭)。 多選與輸入的答案則使用 繼續(⌘↵ / Ctrl↵)。略過會告訴代理 挑一個合理的預設值,並且不要再問。

它與上方的核准卡片是兩套不同的機制:核准問的是「我可以做這件事嗎?」, 問題問的是「你指的是其中哪一個?」。在內建執行環境上,每一種模式都能 提問,包括唯讀模式(它不會變更任何東西),而且它刻意不被包在核准提示 中——在沒有連接核准者的情況下,在對話方塊前面再擋一個對話方塊,只會 以失效即拒絕收場。沒有對話可以呈現的執行,就單純不會取得這個工具。

當有執行正在進行時,輸入區的送出按鈕會變成停止按鈕。清空輸入區並 按下它——這會停止該對話中正在執行的每一個代理。

空間標頭中沒有停止控制項,也沒有對應的鍵盤快捷鍵。當有多個執行正在 進行,而你只想停止其中一個時,請開啟該次執行的活動分頁——它的標頭 帶有僅限該次執行的暫停/恢復與停止(停止會要求你確認)。 可觀測性 → 即時會列出工作區中每個正在執行的代理,並提供相同的 控制項。

已停止的執行會標示為已停止。送出新的訊息即可再次派送。

在輸入區輸入 / 即可看到指令清單。以下是會改變對話行為的幾個:

指令 作用
/plan 將空間切換為計畫模式。單獨的 /plan 只會進入該模式;/plan <request> 會進入該模式,並把其餘內容當作你的訊息送出
/goal <text> 記錄此對話的工作目標
/loop <text> 反覆迭代一項任務,直到完成
/compact 將較舊的歷史摺疊成一份錨定的摘要,並在壓縮後的情境上繼續
/todo … 檢視並編輯此對話持久化的待辦清單

技能會以自己的 skill: 命名空間出現在同一份清單中,因此永遠不會與上述 指令衝突——名為 plan 或 compact 的技能仍然可以觸及:

指令 執行內容
/skill:<name> 安裝在工作區中的技能,或附加至該代理的技能
/skill:<repo>:<name> 此空間中已簽出的其中一個儲存庫所隨附的技能

儲存庫技能會標上它來自哪個儲存庫的徽章,因為光看名稱無法得知它編碼的是 哪個服務的慣例,而且兩個儲存庫可能各自都隨附一個 testing。你不必輸入 前綴就能找到:直接輸入技能名稱也會比對到有命名空間的項目。

代理只會帶著它目前工作所在儲存庫的技能——請參見 儲存庫範圍技能。輸入區 則不採這種範圍劃分:只要你指名,就能叫用任何儲存庫的技能。

/compact 與 /todo 會被用戶端攔截,且永不持久化為訊息——逐字稿中若有 一行 /compact,會把下一次壓縮的切點往回推一個回合。/plan 會翻轉空間 儲存的模式,而不是以文字形式傳送。因此這三者都不是「你送給代理的訊息」; 別預期會在歷史中看到它們。

在進行複雜的變更之前,請用 /plan、輸入區工具列上的模式下拉式選單, 或 Shift+Tab 將空間切換為計畫模式。接著代理會以唯讀方式研究,並交付 一份具型別的計畫,由你在任何工作開始前核准。請參見 使用計畫模式。

你不需要為每個代理各開一個空間。在任何空間中:

@alice can you look at the failing tests in src/auth_test.dart?

被提及的代理會被加入該空間,並帶著該空間的情境派送。名稱如何比對請參見 @提及代理。