deepagents-guide
npx skills add https://github.com/ma-pony/deepspider --skill deepagents-guide
Agent 安装分布
Skill 文档
DeepAgents JS ä½¿ç¨æå
æ¦è¿°
DeepAgents æ¯åºäº LangGraph ç Agent æ¡æ¶ï¼æä¾ï¼
- 模ååä¸é´ä»¶æ¶æ
- å¤ç§å端å卿¹æ¡
- å代çä»»å¡å§æ´¾
- 人æºäº¤äºå®¡æ¹æµç¨
- é¿æè®°å¿æä¹ å
- æè½ç³»ç»
å¿«éå¼å§
å®è£
npm install deepagents @langchain/core @langchain/anthropic zod
åºç¡ Agent
import { createDeepAgent, StateBackend } from "deepagents";
import { tool } from "@langchain/core/tools";
import { z } from "zod";
// å®ä¹å·¥å
·
const myTool = tool(
async ({ input }) => {
return `å¤çç»æ: ${input}`;
},
{
name: "my_tool",
description: "å·¥å
·æè¿°",
schema: z.object({
input: z.string().describe("è¾å
¥åæ°"),
}),
}
);
// å建 Agent
const agent = createDeepAgent({
name: "my-agent",
model: "claude-sonnet-4-20250514",
tools: [myTool],
systemPrompt: "ä½ æ¯ä¸ä¸ªå©æã",
backend: new StateBackend(),
});
// è°ç¨
const config = { configurable: { thread_id: "session-1" } };
const result = await agent.invoke(
{ messages: [{ role: "user", content: "ä½ å¥½" }] },
config
);
å端åå¨
StateBackendï¼é»è®¤ï¼
临æ¶åå¨ï¼æ°æ®ä¿åå¨ Agent ç¶æä¸ï¼çº¿ç¨ç»æå丢失ã
import { StateBackend } from "deepagents";
const agent = createDeepAgent({
backend: new StateBackend(),
});
FilesystemBackend
åºäºæ¬å°æä»¶ç³»ç»çæä¹ ååå¨ã
import { FilesystemBackend } from "deepagents";
const agent = createDeepAgent({
backend: new FilesystemBackend({
rootDir: "./agent-data",
}),
});
StoreBackend
åºäº LangGraph Store çæä¹ ååå¨ï¼æ¯æè·¨çº¿ç¨è®¿é®ã
import { StoreBackend } from "deepagents";
import { InMemoryStore } from "@langchain/langgraph-checkpoint";
const store = new InMemoryStore();
const agent = createDeepAgent({
store,
backend: (config) => new StoreBackend(config),
});
CompositeBackendï¼æ··ååå¨ï¼
ç»åå¤ä¸ªåç«¯ï¼æè·¯å¾åç¼è·¯ç±ã
import { CompositeBackend, StateBackend, StoreBackend } from "deepagents";
const agent = createDeepAgent({
store: new InMemoryStore(),
backend: (config) => new CompositeBackend(
new StateBackend(config), // é»è®¤ï¼ä¸´æ¶åå¨
{ "/memories/": new StoreBackend(config) } // /memories/ è·¯å¾ï¼æä¹
å
),
});
è·¯å¾è·¯ç±è§åï¼
/memories/*â æä¹ ååå¨ï¼è·¨çº¿ç¨ï¼- å ¶ä»è·¯å¾ â 临æ¶åå¨ï¼ä» å½å线ç¨ï¼
ä¸é´ä»¶
createDeepAgent é»è®¤éå ä¸ä¸ªä¸é´ä»¶ï¼
TodoListMiddleware– ä»»å¡è§åFilesystemMiddleware– æä»¶æä½SubAgentMiddleware– å代çå§æ´¾
TodoList ä¸é´ä»¶
æä¾ write_todos å·¥å
·ç¨äºä»»å¡ç®¡çã
import { createAgent, todoListMiddleware } from "langchain";
const agent = createAgent({
model: "claude-sonnet-4-20250514",
middleware: [
todoListMiddleware({
systemPrompt: "ä½¿ç¨ write_todos å·¥å
ᾴ...",
}),
],
});
Filesystem ä¸é´ä»¶
æä¾å个æä»¶æä½å·¥å ·ï¼
ls– ååºæä»¶read_file– 读åæä»¶write_file– å建æä»¶edit_file– ç¼è¾æä»¶
import { createFilesystemMiddleware } from "deepagents";
const agent = createAgent({
middleware: [
createFilesystemMiddleware({
backend: undefined, // å¯éèªå®ä¹å端
systemPrompt: "å½éè¦ä¿åä¿¡æ¯æ¶åå
¥æä»¶ç³»ç»...",
customToolDescriptions: {
ls: "ä½¿ç¨ ls å·¥å
ᾴ...",
read_file: "ä½¿ç¨ read_file å·¥å
ᾴ...",
},
}),
],
});
SubAgent ä¸é´ä»¶
å¯ç¨ä»»å¡å§æ´¾ç»ä¸é¨çå代çã
import { createSubAgentMiddleware } from "deepagents";
const agent = createAgent({
middleware: [
createSubAgentMiddleware({
defaultModel: "claude-sonnet-4-20250514",
defaultTools: [],
subagents: [
{
name: "weather",
description: "è·ååå¸å¤©æ°ä¿¡æ¯",
systemPrompt: "ä½¿ç¨ get_weather å·¥å
·è·å天æ°",
tools: [getWeather],
model: "gpt-4o", // å¯éï¼è¦çé»è®¤æ¨¡å
},
],
}),
],
});
å代ç (Subagents)
å代çç¨äºä»»å¡å§æ´¾ï¼ä¿æä¸»ä»£çä¸ä¸ææ¸ æ´ã
使ç¨åºæ¯
éå使ç¨ï¼
- 夿¥éª¤ä»»å¡ï¼é¿å 主ä¸ä¸æè¨èï¼
- éè¦ä¸é¨æä»¤/å·¥å ·çé¢å
- éè¦ä¸å模åè½åçä»»å¡
ä¸éåï¼
- ç®å忥任å¡
- éè¦ä¸é´ä¸ä¸æçåºæ¯
åå ¸å¼å代ç
const researchSubagent = {
name: "research-agent",
description: "深度ç ç©¶é®é¢",
systemPrompt: "ä½ æ¯ä¸ä¸ªä¼ç§çç ç©¶å",
tools: [internetSearch],
model: new ChatAnthropic({ model: "claude-sonnet-4-20250514" }),
};
const agent = createDeepAgent({
model: new ChatAnthropic({ model: "claude-sonnet-4-20250514" }),
subagents: [researchSubagent],
});
CompiledSubAgent
使ç¨é¢æå»ºç LangGraph å¾ä½ä¸ºå代çï¼
import { CompiledSubAgent } from "deepagents";
const customSubagent: CompiledSubAgent = {
name: "data-analyzer",
description: "å¤ææ°æ®åæä»»å¡",
runnable: customGraph.compile(),
};
éç¨å代ç
DeepAgents èªå¨æä¾ general-purpose å代çï¼
- å ±äº«ä¸»ä»£ççç³»ç»æç¤º
- 访é®ç¸åå·¥å ·
- ç¨äºä¸ä¸æé离
人æºäº¤äº (Human-in-the-Loop)
é ç½®ææå·¥å ·éè¦äººå·¥å®¡æ¹ã
é ç½®
import { MemorySaver } from "@langchain/langgraph";
const agent = createDeepAgent({
model: "claude-sonnet-4-20250514",
tools: [deleteFile, sendEmail],
interruptOn: {
delete_file: true,
send_email: { allowedDecisions: ["approve", "reject"] },
},
checkpointer: new MemorySaver(), // å¿
éï¼
});
å³çç±»å
approve– 使ç¨ååæ°æ§è¡edit– ä¿®æ¹åæ°åæ§è¡reject– è·³è¿å·¥å ·è°ç¨
å¤ç䏿
import { Command } from "@langchain/langgraph";
let result = await agent.invoke({
messages: [{ role: "user", content: "å é¤ temp.txt" }]
}, config);
if (result.__interrupt__) {
const decisions = [{ type: "approve" }];
result = await agent.invoke(
new Command({ resume: { decisions } }),
config
);
}
é¿æè®°å¿
ä½¿ç¨ CompositeBackend å®ç°è·¨çº¿ç¨æä¹
åã
é ç½®
const agent = createDeepAgent({
store: new InMemoryStore(),
backend: (config) => new CompositeBackend(
new StateBackend(config),
{ "/memories/": new StoreBackend(config) }
),
});
跨线ç¨è®¿é®
// çº¿ç¨ 1: åå
¥
await agent.invoke({
messages: [{ role: "user", content: "ä¿ååå¥½å° /memories/prefs.txt" }],
}, { configurable: { thread_id: "thread-1" } });
// çº¿ç¨ 2: 读åï¼ä¸åä¼è¯ï¼
await agent.invoke({
messages: [{ role: "user", content: "读åæçå好" }],
}, { configurable: { thread_id: "thread-2" } });
ç¨ä¾
- ç¨æ·å好:
/memories/user_preferences.txt - èªæ¹è¿æä»¤:
/memories/instructions.txt - ç¥è¯åº:
/memories/research/notes.txt
æè½ç³»ç» (Skills)
æè½æ¯å¯å¤ç¨ç Agent è½åï¼éµå¾ª Agent Skills æ åã
ç®å½ç»æ
skills/
âââ langgraph-docs/
â âââ SKILL.md
âââ arxiv_search/
âââ SKILL.md
âââ arxiv_search.ts
SKILL.md æ ¼å¼
---
name: skill-name
description: æè½æè¿°
---
# æè½æ é¢
详ç»ä½¿ç¨è¯´æ...
é ç½®æè½
const agent = await createDeepAgent({
skills: ["/skills/"],
});
æè½ vs å·¥å ·
| åºæ¯ | éæ© |
|---|---|
| 大éä¸ä¸æéè¦åå° token | æè½ |
| å¤è½åæç» | æè½ |
| ç®åååæä½ | å·¥å · |
æä½³å®è·µ
å代çæè¿°
// â
好
"åæè´¢å¡æ°æ®å¹¶çææèµå»ºè®®"
// â å·®
"å¤çè´¢å¡"
æå°åå·¥å ·é
// â
好: 䏿³¨
const emailAgent = {
name: "email-sender",
tools: [sendEmail, validateEmail],
};
// â å·®: 忣
tools: [sendEmail, webSearch, databaseQuery]
æä»»å¡é模å
const subagents = [
{ name: "contract-reviewer", model: "claude-sonnet-4-20250514" },
{ name: "quick-lookup", model: "gpt-4o-mini" },
];
ç产ç¯å¢åå¨
import { PostgresStore } from "@langchain/langgraph-checkpoint-postgres";
const store = new PostgresStore({
connectionString: process.env.DATABASE_URL,
});