系列文章: Deepagent (5/10)

Filesystem 工具:用檔案管理 Context,不讓 Token 爆炸
Context window 的問題,用 AI 做複雜任務的人幾乎都遇過:任務進行到一半,context 裡已經塞了一大堆工具回傳的資料、中間結果、對話紀錄,然後模型開始「失憶」——前面說過的事不記得了,或者乾脆給你一個 context too long 的錯誤。
解法有幾種,但最直接的是:把不需要一直待在 context 裡的東西,暫時放到別的地方。
Deep Agents 的 Virtual Filesystem 就是那個「別的地方」。
代理人的虛擬 Filesystem
Deep Agents 給代理人內建了四個 filesystem 工具:
ls:列出目錄下有哪些檔案read_file:讀取指定檔案的內容write_file:把內容寫入新檔案edit_file:修改現有檔案的部分內容
這些工具的設計跟你在終端機裡操作檔案是一樣的邏輯,只是執行環境是代理人的虛擬空間——具體用哪種後端儲存,由你設定(下一篇會說,預設是 in-memory)。
為什麼要有 Filesystem
直接來一個類比:想像一個分析師要處理一份 50 頁的技術報告。
沒有 Filesystem 的做法:把整份報告丟進 context,然後在 context 裡做分析。問題是,當報告內容 + 分析過程 + 後續對話全部堆在一起,context 很快就擠爆,而且你無法「只看報告的第三章,其他先放旁邊」。
有 Filesystem 的做法:把報告寫進 report.md,每次只 read_file 需要的那個段落,分析結果寫進 analysis.md,最後再讀取 analysis.md 產生最終報告。Context 裡只有「當下這一步真正需要的東西」。
這就是 Filesystem 工具的核心價值——讓代理人可以做 選擇性讀取,不需要把所有東西一直裝在 context 裡。
實際示範
來看一個研究任務的範例:
from deepagents import create_deep_agent
def fetch_article(url: str) -> str:
"""抓取網頁文章的內容。"""
return f"文章內容:{url} 的詳細內容,包含大量技術細節..."
agent = create_deep_agent(
tools=[fetch_article],
system_prompt="""你是一個研究助理。
處理大量資訊時,善用 filesystem 工具:
- 用 write_file 把抓到的原始資料存起來
- 用 read_file 按需要讀取,不要一次把所有東西載入 context
- 分析結果也存成檔案,最後再整合
""",
)
result = agent.invoke({
"messages": [
{"role": "user", "content": "幫我研究這三篇文章的共同主題:url1, url2, url3。整理成一份摘要報告。"}
]
})代理人可能的執行流程會是這樣:
fetch_article("url1")→write_file("article1.md", 內容)fetch_article("url2")→write_file("article2.md", 內容)fetch_article("url3")→write_file("article3.md", 內容)read_file("article1.md")→ 分析主題 →write_file("analysis1.md", 結果)- 同樣處理 article2 和 article3
read_file("analysis1.md"),read_file("analysis2.md"),read_file("analysis3.md")→ 整合 → 最終報告
每一步 context 裡只有當前步驟需要的資料,而不是三篇文章全部同時塞著。
edit_file:修改而不是覆蓋
有一個工具特別值得說一下:edit_file。
和 write_file(整個覆蓋)不同,edit_file 可以只修改檔案的特定部分——類似程式碼的 diff 操作。這在代理人需要逐步建構一份文件時很有用:
- 先寫好文件的骨架
- 每個步驟完成後,用
edit_file更新對應的段落 - 不需要每次都重寫整份文件
這讓代理人在長時間的任務裡,可以維護一個「持續更新的工作文件」,而不是在 context 裡靠記憶維持狀態。
Filesystem 工具和外部工具的分工
值得釐清的一點是:Filesystem 工具是代理人自己的工作空間,不是你的應用程式儲存資料的地方。
| Filesystem 工具 | 你自訂的工具 | |
|---|---|---|
| 用途 | 代理人的中間工作狀態 | 連接外部服務、資料庫 |
| 誰在用 | 代理人自己管理 | 代理人呼叫、外部系統處理 |
| 持久性 | 取決於後端設定 | 由外部系統決定 |
| 典型內容 | 草稿、分析結果、計畫 | 資料庫記錄、API 回應 |
簡單說:你的工具負責「跟外面世界溝通」,Filesystem 工具負責「代理人自己整理中間過程」。
什麼任務最需要 Filesystem
特別有價值的場景:
- 需要處理多份長文件(報告、程式碼、論文)
- 任務有多個階段,每個階段都會產生輸出給下一階段用
- 需要代理人反覆修改某份文件直到滿足條件
- 同時追蹤多個資訊來源
可以不用的場景:
- 簡單的問答或單步工具呼叫
- 輸入資料量小,放在 context 完全沒問題
- 不需要中間儲存的短任務
一句話說清楚
Filesystem 工具讓代理人從「只有腦子沒有桌子」,變成「有桌子可以把東西攤開、分類、逐步處理」的工作方式。
但這個虛擬桌子的「底層實作」是可以換的——測試時用記憶體、正式環境用磁碟或雲端儲存。下一篇來聊這個選擇。
上一篇:任務規劃與 write_todos:讓代理人先想清楚再做事 下一篇:可插拔後端:In-Memory、Disk、LangGraph Store、Sandbox 怎麼選