以階段管理你的對話上下文
context-editor 模組讓你能夠編輯自己的對話。由你根據工作的邏輯狀態,決定何時清理內容。隨著上下文增長,注意力會逐漸下降:一旦完成某個工作區塊,就壓縮已處理的部分。主機的自動壓縮僅是安全網。
工具:context_tag, context_list, context_edit, context_note。策展規則(從失敗中學到的教訓、修正、引用、狀態項目、主機列):使用 context_list 並帶參數 "rules": true。
階段
階段是你工作的一個邏輯區塊:一個階段、一個子任務、一個修正。
- 在區塊開始時開啟階段:
{"tags":[{"op":"open","stage":"read the config files"}]}。區塊從開啟它的回應開始;若加上"index",則從context_list中的那一列開始。 - 當區塊完成且結果已知時關閉階段:
{"tags":[{"op":"close"}]}。結果會列出該區塊的列號#a..#b、大小、媒體、清理候選項目、遙測資訊與建議。這些索引是當前的:你可以立即根據它們進行編輯。 - 階段是扁平的:開啟一個新階段會先關閉當前已開啟的階段。
- 若要關閉一個從未開啟過的區塊:
{"tags":[{"op":"open","stage":"<名稱>","index":<其第一列>},{"op":"close"}]}。 context_list會在已開啟階段的第一列顯示[stage ▶ name],在最近關閉的區塊前後顯示[block ▶ name]..[block end]。
壓縮區塊
關閉區塊後,整體檢視該區塊,並排入一個 context_edit 來處理其中已處理或冗餘的內容:你已使用的工具輸出、重複且過時的讀取、死路、你已經看過的媒體(若任務允許,使用摘要:對工具結果用 summarize,對圖片、文件或貼在人員提示中的文字用 describe,其輸入的文字保持原樣;主機附加到該提示的附件,例如來自 @path 的檔案內容和提醒,會一起處理,因此必要時需重新讀取檔案)。如果沒有需要壓縮的內容,則不排入任何任務。
在被處理的列位置寫入一個階段記錄,例如作為 collapse 的摘要:
- 階段的目標;
- 決策,包含原因、背後的人員原話,以及為何拒絕其他選項;
- 驗證過的事實及其來源(路徑、行號、版本、URL);
- 已變更的成品(檔案、提交、設定);
- 未解決的問題。
在 context_list 中標記為 ~ 的配對(Read, Grep, Glob)是可重現的:將它們縮減為一個指標(內容、位置、找到的結果;必要時重新讀取)。其他所有內容需要仔細摘要或保留:即時探測、子代理報告、網頁內容。人員的訊息,包括你對問題的回答(AskUserQuestion),在此對話中保持原樣:context_edit 和 context_tag 拒絕涵蓋它們的編輯;請將範圍在它們周圍分割。
通常保留仍有效的規則和技能,以及你下一步需要的結論。[pin] 目標無法被編輯;圖釘由你設定和移除(模組只會固定交接文件或種子摘要)。
編輯在你的回合結束時生效:以一行狀態結束你的回合,然後對話會自動繼續(context_edit 會提供選項)。套用會重寫快取一次:將一個區塊的編輯批次處理為一次呼叫。"keep_cache": true 可在回合結束時,若最早編輯位置在最後約 20 個位置內(Cache: 行),則保留快取。你的 context_* 呼叫會從對話中消失;標籤和筆記會保留。
死路
當你放棄一個分支時,立即標記它:將範圍標記為 disposable 並加上筆記,{"op":"add","kind":"disposable","index":<第一列>,"to":<最後一列>,"note":"dead end: X fails because Y"}(範圍涵蓋每個工具呼叫及其結果;context_tag 在涵蓋人員訊息時會發出警告)。使用你自己的單一文字列,或透過 ref/tool_use_id 指定輸出也可以。當你關閉階段或從標記的區塊繼續前進時,這些替代會被排入;一個範圍會變成一個 collapse。
最佳化標記
當你結束回合等待人員回應,且區塊已完成時,用以下這行獨立的文字結束你的回答:
[context-editor: optimize]
- 只能獨立在最後一個非空行;若放在文字中間、與其他文字共用一行,或在
/compact回合中,則無效。 - 它會關閉已開啟的階段(如果沒有已開啟的階段,則關閉自上次關閉區塊以來的區塊;在該回合中由工具關閉的階段仍算作該區塊)。該區塊隨後進入等待狀態;不會被壓縮。
- 下一次提示會指出該區塊:如果工作進入下一個階段,則在該回合中壓縮它;否則保留。開啟一個階段會報告其索引;接受一個
context_edit也會結束等待,並排入你的disposable替代。 - 自行遵循計畫時:每個階段開啟一個階段;下一個階段時壓縮前一個區塊,並以狀態行結束回合;對話會自動繼續。工作中途,由工具關閉階段。
遙測
使用 "count":0 的 context_list 只顯示標頭(其描述列出了一些行)。Effect: … M reread(s) of compressed content:數字很大表示你壓縮過頭了。大小是校準後的估計值(在確定前會標註 approx.)。[context-editor: suggestion] 行(隨著上下文增長,或在大量讀取後的人員下次提示時)會提議一個批次處理,包含收益、快取成本和結論;它僅供參考。根據工作的狀態做決定,而不是依據數字。
候選項目
[review: big]大型輸出;[review: search]搜尋結果(幾回合後);[review: stale]對你後來編輯過的檔案的讀取:其內容已過時,將其縮減為一個指標;[review: superseded]對檔案內容已更改的後續讀取涵蓋的先前讀取:也已過時;[review: duplicate]同一輸出或讀取範圍的較早副本:刪除或縮減;[review: agent]你自己的標記(可選ttl_turns)。審查建議檢查,但不強制編輯。[disposable: note]:你自己的替代(請參閱死路一節)。
關閉報告會按原因列出區塊的候選項目,計算 ~ 配對的數量,並為過時和重複的讀取提供現成的替代文字。
狀態插槽
將任務的狀態(目標、計畫、已完成、下一步)保存在你自己的一個文字列中,標記為 state:{"tags":[{"op":"add","kind":"state","index":<列>}]}。透過 rewrite 在原地更新該列,絕不要附加新的狀態到對話末尾。或者將其保持為項目:使用 context_edit 搭配 {"op":"state","changes":[{"do":"add","kind":"plan","text":"…"}]}(set, mark 有害/過時, unmark, remove 使用 id 如 p3);套用會從這些項目重建插槽,並且當插槽中有項目時,只有 state 操作能更改它。該標籤會跟隨重建後的列。新的 state 標籤會移動插槽。每次更新都是一次套用:應與區塊的編輯一起執行,而不是單獨執行。
筆記
context_note 以無令牌成本的方式保留筆記(其描述會說明操作及顯示位置)。
- 立即標記稍後要丟棄或壓縮的內容,以及方式:
{"notes":[{"op":"add","ref":"last","text":"drop after the fix is verified"}]}。 "remind_in_turns":2會在兩回合後再次顯示一則筆記一次。根據內容連結列。
描述內容,而不是列號:索引在套用後會改變。階段關閉時會列出其區塊中的筆記。
壓縮列與模組文字
以 Later, your context_edit(或 context_tag)開頭的文字是你自己的替代:你在那裡讀到了原始內容,然後將其壓縮以節省上下文。你製作了這個替代;它指定的來源(the full output of Read docs/x.md)說明了內容的來源。在你指責其中任何東西是編造之前,請先開啟存檔。
… summarize call replaced the full output of <source> you had read here …,… collapse call replaced these N rows you had read (what they held) …(其呼叫的collapsed輸入列出了相同內容),同樣的還有rewrite,describe:你的文字跟隨在冒號之後。在對人員提示執行describe之後,他們自己的文字會跟隨在你的文字之後。舊的格式為[context-editor] you read …, then replaced …。(original: <path>, open with Read),(media: <path>),media carried as files:存檔。使用Read讀取你需要的內容;它會出現在對話的末尾。- 以
[context-editor或context-editor:開頭的文字是模組的,不是人員或工具的。context-editor: applied N edit(s): …:套用報告;產生這些替代的context_*呼叫已被移除,但你從其結果中引用的內容是真實的。以context-editor:開頭的/compact列是模組的命令;… repair the resumed conversation …:模組丟棄了恢復對話時重複載入的回答;先前的思考已消失。 id cN,reminder from your note nN,[context-editor: suggestion],[context-editor: N chars cut], 你設定的恢復提示,/compact回合, 交接文件:都是模組的服務文字。