Loading skill
Install any skill in seconds. Free to start, no credit card required.
Get Started Free →使用 FilesystemMiddleware 实现虚拟文件系统、后端(State、Store、Filesystem、Composite)和 Deep Agents 的上下文管理。
.claude/skills/majiayu000-deepagents-filesystem/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 32% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -45% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -11% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 28% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 90% | 0% |
FilesystemMiddleware 通过可插拔后端系统提供文件操作,解决上下文工程挑战。工具包括:ls、read_file、write_file、edit_file、glob、grep。
在 agent 状态中的临时存储 - 仅在单个会话内持久化。
typescriptimport { createDeepAgent } from "deepagents"; const agent = await createDeepAgent({}); // 默认 StateBackend - 文件仅存在于会话中
typescriptimport { createDeepAgent, FilesystemBackend } from "deepagents"; const agent = await createDeepAgent({ backend: new FilesystemBackend({ rootDir: ".", virtualMode: true // 安全性:限制路径 }) });
typescriptimport { createDeepAgent, StoreBackend } from "deepagents"; import { InMemoryStore } from "@langchain/langgraph"; const store = new InMemoryStore(); const agent = await createDeepAgent({ backend: (config) => new StoreBackend(config), store });
typescriptimport { createDeepAgent, CompositeBackend, StateBackend, StoreBackend } from "deepagents"; import { InMemoryStore } from "@langchain/langgraph"; const store = new InMemoryStore(); const agent = await createDeepAgent({ backend: (config) => new CompositeBackend( new StateBackend(config), { "/memories/": new StoreBackend(config) } ), store });
| 使用场景 | 后端 | 原因 | |----------|---------|-----| | 临时文件 | StateBackend | 默认,无需设置 | | 本地开发 | FilesystemBackend | 直接磁盘访问 | | 跨会话内存 | StoreBackend | 在会话间持久化 | | 混合存储 | CompositeBackend | 混合临时 + 持久化 |
typescriptconst agent = await createDeepAgent({}); const result = await agent.invoke({ messages: [{ role: "user", content: "搜索 TypeScript 最佳实践并保存结果以供分析" }] }); // Agent: 搜索 -> write_file -> 压缩上下文 -> 需要时 read_file
typescriptimport { createDeepAgent, CompositeBackend, StateBackend, StoreBackend } from "deepagents"; import { InMemoryStore } from "@langchain/langgraph"; const store = new InMemoryStore(); const agent = await createDeepAgent({ backend: (config) => new CompositeBackend( new StateBackend(config), { "/memories/": new StoreBackend(config) } ), store }); // 会话 1:保存偏好 await agent.invoke({ messages: [{ role: "user", content: "保存我的偏好:简洁解释到 /memories/prefs.txt" }] }, { configurable: { thread_id: "thread-1" } }); // 会话 2:访问偏好 await agent.invoke({ messages: [{ role: "user", content: "阅读我的偏好并解释 async/await" }] }, { configurable: { thread_id: "thread-2" } });
typescriptimport { createAgent, createFilesystemMiddleware } from "langchain"; const agent = createAgent({ model: "claude-sonnet-4-5-20250929", middleware: [ createFilesystemMiddleware({ systemPrompt: "将中间结果保存到 /workspace/", customToolDescriptions: { read_file: "阅读你之前编写的文件。对大文件使用 offset/limit。", write_file: "保存数据以避免上下文溢出。", } }), ], });
✅ 后端类型和配置 ✅ 自定义工具描述 ✅ 文件路径和组织 ✅ 文件操作的人工审批
❌ 工具名称 ❌ 禁用文件系统工具 ❌ 访问 virtual_mode 限制外的路径
typescript// ❌ 会话更改时文件丢失 await agent.invoke({messages: [{role: "user", content: "写入 /notes.txt"}]}, {configurable: {thread_id: "thread-1"}}); await agent.invoke({messages: [{role: "user", content: "读取 /notes.txt"}]}, {configurable: {thread_id: "thread-2"}}); // 文件未找到! // ✅ 使用相同的 thread_id 或 StoreBackend
typescript// ❌ 不安全 new FilesystemBackend({ rootDir: "/project", virtualMode: false }) // ✅ 安全 new FilesystemBackend({ rootDir: "/project", virtualMode: true })
typescript// ❌ 缺少 store await createDeepAgent({ backend: (config) => new StoreBackend(config) }); // ✅ 提供 store await createDeepAgent({ backend: (config) => new StoreBackend(config), store: new InMemoryStore() });
Other measured skills in the registry, with their headline benchmark lift.