ä½¿ç¨ FilesystemMiddleware å®ç°èææä»¶ç³»ç»ãå端ï¼StateãStoreãFilesystemãCompositeï¼å Deep Agents çä¸ä¸æç®¡çã
Install
npx skillscat add evanfang0054/cc-system-creator-scripts/deepagents-filesystem Install via the SkillsCat registry.
SKILL.md
deepagents-filesystem (JavaScript/TypeScript)
æ¦è¿°
FilesystemMiddleware éè¿å¯ææåç«¯ç³»ç»æä¾æä»¶æä½ï¼è§£å³ä¸ä¸æå·¥ç¨ææãå·¥å
·å
æ¬ï¼lsãread_fileãwrite_fileãedit_fileãglobãgrepã
å端类å
StateBackendï¼é»è®¤ï¼
å¨ agent ç¶æä¸ç临æ¶åå¨ - ä» å¨å个ä¼è¯å æä¹ åã
import { createDeepAgent } from "deepagents";
const agent = await createDeepAgent({});
// é»è®¤ StateBackend - æä»¶ä»
åå¨äºä¼è¯ä¸FilesystemBackendï¼æ¬å°ç£çï¼
import { createDeepAgent, FilesystemBackend } from "deepagents";
const agent = await createDeepAgent({
backend: new FilesystemBackend({
rootDir: ".",
virtualMode: true // å®å
¨æ§ï¼éå¶è·¯å¾
})
});StoreBackendï¼æä¹ åï¼
import { createDeepAgent, StoreBackend } from "deepagents";
import { InMemoryStore } from "@langchain/langgraph";
const store = new InMemoryStore();
const agent = await createDeepAgent({
backend: (config) => new StoreBackend(config),
store
});CompositeBackendï¼æ··åï¼
import { 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 | æ··åä¸´æ¶ + æä¹ å |
代ç 示ä¾
ç¤ºä¾ 1ï¼ç®¡ç大ä¸ä¸æ
const agent = await createDeepAgent({});
const result = await agent.invoke({
messages: [{
role: "user",
content: "æç´¢ TypeScript æä½³å®è·µå¹¶ä¿åç»æä»¥ä¾åæ"
}]
});
// Agent: æç´¢ -> write_file -> å缩ä¸ä¸æ -> éè¦æ¶ read_fileç¤ºä¾ 2ï¼é¿æå å
import { 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" } });ç¤ºä¾ 3ï¼èªå®ä¹å·¥å ·æè¿°
import { createAgent, createFilesystemMiddleware } from "langchain";
const agent = createAgent({
model: "claude-sonnet-4-5-20250929",
middleware: [
createFilesystemMiddleware({
systemPrompt: "å°ä¸é´ç»æä¿åå° /workspace/",
customToolDescriptions: {
read_file: "é
è¯»ä½ ä¹åç¼åçæä»¶ã对大æä»¶ä½¿ç¨ offset/limitã",
write_file: "ä¿åæ°æ®ä»¥é¿å
ä¸ä¸ææº¢åºã",
}
}),
],
});è¾¹ç
Agent å¯ä»¥é ç½®çå 容
â
å端类ååé
ç½®
â
èªå®ä¹å·¥å
·æè¿°
â
æä»¶è·¯å¾åç»ç»
â
æä»¶æä½ç人工审æ¹
Agent ä¸è½é ç½®çå 容
â å·¥å
·åç§°
â ç¦ç¨æä»¶ç³»ç»å·¥å
·
â è®¿é® virtual_mode éå¶å¤çè·¯å¾
注æäºé¡¹
1. StateBackend æä»¶ä¸ä¼è·¨ä¼è¯æä¹ å
// â ä¼è¯æ´æ¹æ¶æä»¶ä¸¢å¤±
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 æ StoreBackend2. FilesystemBackend å®å ¨æ§
// â ä¸å®å
¨
new FilesystemBackend({ rootDir: "/project", virtualMode: false })
// â
å®å
¨
new FilesystemBackend({ rootDir: "/project", virtualMode: true })3. StoreBackend éè¦ Store
// â ç¼ºå° store
await createDeepAgent({ backend: (config) => new StoreBackend(config) });
// â
æä¾ store
await createDeepAgent({
backend: (config) => new StoreBackend(config),
store: new InMemoryStore()
});