Agent harness capabilities¶
我們將 deepagents 視為一種 “agent harness”。它與其他代理框架一樣,都採用相同的核心工具呼叫循環,但內建了更多工具和功能。
graph TB
Agent[Deep Agent] --> Tools[File System Tools]
Agent --> Todo[To-Do List]
Agent --> Sub[Subagents]
Tools --> Backend[Storage Backend]
Backend --> State[State]
Backend --> Disk[Filesystem]
Backend --> Store[Store]
Sub --> |isolated work| Result[Final Result]
Result --> Agent Info
「Harness」 一詞在不同情境下有多種含義,主要可分為以下幾類:
- 實體裝備(吊帶、安全帶、馬具)
這是最常見的物理定義,指用來控制、支撐或固定人或動物的皮帶或支架。
- 安全吊帶: 登山、攀岩或高空作業時穿戴的安全吊帶 (Safety Harness)。
- 寵物胸背帶: 狗狗散步時使用的胸背帶 (Dog Harness),比頸圈更安全舒適。
- 嬰兒安全帶: 嬰兒推車或高腳椅上的固定帶。
-
馬具: 套在馬身上以拉動車輛的設備。
-
動詞用法(利用、治理、控制)
在科技或商業語境中,「harness」常用來表示「有效利用」某種力量或資源。
- 利用能源: 例如「harness solar energy」指利用太陽能。
- 運用控制: 指控制自然力量(如水利)或抽象資源(如數據、集體智慧)以產生效用。
本頁列出了構成代理程式框架的各個元件。
File system access¶
該元件提供了六種檔案系統操作工具,使文件在代理環境中成為一等公民:
| Tool | Description |
|---|---|
ls | 列出目錄中的檔案及其元資料(大小、修改時間) |
read_file | 讀取檔案內容並顯示行號,支援大檔案的偏移量/限制值。 |
write_file | 建立新文件 |
edit_file | 在檔案中執行精確字串替換(使用全域替換模式) |
glob | 尋找符合特定模式的檔案(例如,**/*.py) |
grep | 支援多種輸出模式(僅文件、包含上下文的內容或計數)搜尋文件內容 |
Large tool result eviction¶
當工具結果超過 token threshold 時,該工具會自動將 large tool results 轉儲到檔案系統中,從而防止上下文視窗飽和。
工作原理:
- 監控工具呼叫結果的大小(預設閾值:20,000 個 tokens)
- 當超過閾值時,將結果寫入文件
- 將工具結果替換為指向該檔案的簡潔引用
- 代理程式稍後可以根據需要讀取該文件
Pluggable storage backends¶
該框架透過協定抽象檔案系統操作,從而允許針對不同的使用情境採用不同的儲存策略。
可用的 backends:
-
StateBackend - Ephemeral in-memory storage
- 文件存在於代理程式的狀態中(與對話進行檢查點同步)
- 在線程內持久存在,但不會跨線程持久存在
- 適用於臨時工作文件
-
FilesystemBackend - Real filesystem access
- 從實際磁碟讀寫
- 支援虛擬模式(沙盒化到根目錄)
- 與系統工具整合(ripgrep 用於 grep 命令)
- 安全特性:路徑驗證、大小限制、防止符號鏈接
-
StoreBackend - Persistent cross-conversation storage
- 使用 LangGraph 的 BaseStore 實現持久化
- 按 assistant_id 命名空間
- 文件在對話間保持不變
- 適用於長期記憶或知識庫。
-
CompositeBackend - Route different paths to different backends
- 範例:
/→ StateBackend,/memories/→ StoreBackend - 路由採用最長前綴匹配
- 支援混合儲存策略
- 範例:
Task delegation (subagents)¶
此元件允許 main agent 建立臨時的 “subagents” 來執行獨立的多步驟任務。
它的優勢在於:
- Context isolation - Subagent 的工作不會干擾 main agent 的上下文。
- Parallel execution - 多個 subagents 程式可以同時運行
- Specialization - Subagents 可以擁有不同的 tools/configurations
- Token efficiency - 大型 subtask 上下文可被壓縮成 single result
工作原理:
- Main agent 擁有一個
task工具 - 當被呼叫時,會建立一個具有獨立上下文的全新 agent 實例
- Subagent 自主執行直至完成
- 向 main agent 回傳一份最終報告
- Subagents 是無狀態的(不能發送多個訊息)
預設 subagent:
- 自動提供 “general-purpose” subagent
- 預設包含檔案系統工具
- 可使用其他工具/中介軟體進行自訂
客制化 subagents:
- 定義具有特定工具的專用 subagents
- 例如:code-reviewer, web-researcher, test-runner
- 透過
subagents參數進行配置
Conversation history summarization¶
當 token 使用量過大時,harness 會自動壓縮舊的對話歷史記錄。
配置:
- 觸發條件: token 數達到 170,000
- 保留最近的 6 則訊息
- 較早的消息由模型進行匯總壓縮。
它的優勢在於:
- 支援超長對話,不受上下文限制
- 保留近期上下文,同時壓縮過往對話
- 對代理透明(以特殊系統訊息的形式顯示)
Dangling tool call repair¶
當 tool calls 在接收結果之前中斷或取消時,該機制可以修復訊息歷史記錄。
問題:
- Agent 請求 tool call: "Please run X"
- Tool call 被中斷(用戶取消、出錯等)
- Agent 在 AIMessage 中看到
tool_call,但沒有對應的 ToolMessage - 這將導致無效的訊息序列
解決辦法:
- 檢測 tool_calls 無結果的 AIMessage
- 建立合成 ToolMessage 回應,指示呼叫已取消
- 在 agent execution 前修復訊息歷史記錄
它的優勢在於:
- 防止因訊息鏈不完整而導致 agent 困惑
- 妥善處理中斷和錯誤
- 保持對話連貫性
To-do list tracking¶
該工具框架提供了一個 write_todos 工具,代理可以使用該工具來維護結構化的任務清單。
特徵:
- 追蹤多個任務及其狀態(待處理、進行中、已完成)
- 持久化到代理狀態
- 幫助代理組織複雜的多步驟工作
- 適用於長時間運行的任務和計劃
Human-in-the-Loop¶
此安全機制會在指定 tool calls 時暫停代理執行,以便人工核准/修改。
配置:
- 將 tool names 對應到中斷配置
- 範例:
{"edit_file": True}- 每次編輯前暫停 - 可以提供審批訊息或修改 tool inputs
它的優勢在於:
- 破壞性操作的安全防護措施
- 呼叫高成本 API 前進行使用者驗證
- 互動式調試和指導
Prompt caching (Anthropic)¶
此元件支援 Anthropic 的提示快取功能,以減少冗餘的 tokens 處理。
工作原理:
- 快取回合間重複出現的提示訊息部分
- 顯著降低長系統提示的延遲和成本
- 自動跳過 non-Anthropic 的模型
它的優勢在於:
- System prompts(尤其是包含檔案系統文件的提示)可能包含 5k+ tokens。
- 這些提示每回合都會重複執行,除非進行快取。
- 快取可以帶來約 ~10x 倍的速度提升和成本降低。