deepagentsjs

GitHub
1.1k 168 简单 1 次阅读 今天MIT图像开发框架Agent
AI 解读 由 AI 自动生成,仅供参考

deepagentsjs 是一款基于 LangChain 和 LangGraph 构建的 TypeScript 智能体框架,旨在帮助开发者轻松创建能够处理复杂任务的“深度智能体”。传统的智能体往往只能简单循环调用工具,面对长期或高难度任务时缺乏规划能力,显得过于“浅层”。deepagentsjs 通过整合四大核心组件解决了这一痛点:内置规划工具可将宏大目标拆解为可执行步骤;支持生成子智能体以分工协作处理专项任务;提供文件系统后端以实现持久化的状态记忆;并配合详细的提示词策略,使智能体具备更深层的思考与执行能力。

该工具特别适合熟悉 JavaScript 或 TypeScript 的软件开发者和 AI 工程师,尤其是那些希望在自己的应用中复现类似"Deep Research"、"Manus"或"Claude Code"等高级自主代理功能的团队。其技术亮点在于完全采用 TypeScript 编写,提供完整的类型安全支持,同时原生集成了流式输出功能,方便实时追踪任务进度。作为开源项目,deepagentsjs 在保持架构灵活可扩展的同时,降低了构建高阶智能体的门槛,让复杂的自动化工作流开发变得更加直观高效。

使用场景

某全栈开发团队需要构建一个能自动执行“竞品深度调研并生成分析报告”的智能助手,该任务涉及多轮搜索、数据整理、代码分析及长文档撰写。

没有 deepagentsjs 时

  • 任务规划能力弱:传统 Agent 只能线性执行简单指令,面对“先搜索、再对比、最后写报告”的复杂流程时,容易迷失方向或中途断开,无法自主拆解步骤。
  • 缺乏持久记忆:中间产生的搜索片段和临时数据仅存在于内存中,一旦任务耗时过长或需要分阶段处理,上下文极易丢失,导致重复劳动。
  • 难以处理专业子任务:单一模型试图同时完成“联网搜索”、“代码库分析”和“图表绘制”,导致每个环节都不够深入,产出内容肤浅且错误率高。
  • 状态不可见:开发者无法实时感知 Agent 当前正在执行哪个子步骤,调试困难,用户也无法获得进度反馈,体验如同“黑盒”。

使用 deepagentsjs 后

  • 智能战略拆解:借助内置的规划工具(Planning Tool),deepagentsjs 能自动将宏观目标拆解为“定义关键词”、“并行搜索竞品”、“提取核心数据”等可执行的子步骤序列。
  • 文件系统持久化:利用文件系统后端,Agent 能将每一步的搜索结果和分析草稿实时写入本地文件,确保长任务中的状态不丢失,支持断点续传。
  • 子代理分工协作:通过动态生成子代理(Sub-agents),deepagentsjs 可指派专门的“搜索专家”负责查资料,“分析专家”负责写代码逻辑,显著提升各环节的专业度。
  • 流式进度透明:基于 LangGraph 的流式支持,系统能实时推送当前执行步骤和 Token 消耗,让开发者和最终用户清晰掌握任务进展。

deepagentsjs 通过将规划、记忆与分工机制标准化,让开发者能轻松打造出具备“深度思考”能力的智能体,从容应对复杂长链路任务。

运行环境要求

操作系统
  • 未说明
GPU

未说明

内存

未说明

依赖
notes这是一个基于 TypeScript 的 AI 代理框架,运行于 Node.js 环境而非 Python。默认使用 Claude Sonnet 模型,需配置相应的 API Key(如 ANTHROPIC_API_KEY)。支持通过 npm、yarn 或 pnpm 安装。核心功能依赖 LangGraph 进行状态管理和流程控制,并内置了文件系统操作工具(读/写/编辑文件),因此运行环境需具备相应的文件系统读写权限。
python不适用 (此为 TypeScript/Node.js 项目)
langchain
@langchain/core
@langchain/langgraph
zod
@langchain/anthropic (可选)
@langchain/openai (可选)
deepagentsjs hero image

快速开始

开箱即用的智能体框架。

npm版本 许可证:MIT TypeScript Twitter / X

使用大语言模型循环调用工具是最简单的智能体形式。然而,这种架构生成的智能体往往较为“浅层”,难以在较长且复杂的任务中进行规划和执行。

像“Deep Research”、“Manus”和“Claude Code”这样的应用,通过结合以下四点来克服这一局限性: 规划工具子智能体、对文件系统的访问权限,以及详尽的提示词

deepagents 是一个 TypeScript 库,以通用的方式实现了这些功能,使您能够轻松为自己的应用创建深度智能体。

💡 提示: 想要该库的 Python 版本吗?请查看 langchain-ai/deepagents

📖 概述

使用大语言模型循环调用工具是最简单的智能体形式。然而,这种架构生成的智能体往往较为“浅层”,难以在较长且复杂的任务中进行规划和执行。

Deep ResearchManusClaude Code 这样的应用,通过实现四个关键组件克服了这一局限性:

  1. 规划工具 - 战略性地分解任务
  2. 子智能体 - 专门处理子任务的智能体
  3. 文件系统访问 - 持久化状态与记忆
  4. 详尽的提示词 - 上下文丰富的指令

Deep Agents 是一个 TypeScript 库,以通用方式实现了这些模式,让您能够轻松为自己的应用创建复杂的智能体。

✨ 特性

  • 🎯 任务规划与分解 - 将复杂任务拆解为可管理的步骤
  • 🤖 子智能体架构 - 将专业工作委派给专注的智能体
  • 💾 文件系统集成 - 持久化内存与状态管理
  • 🌊 流式支持 - 实时更新、令牌流传输和进度跟踪
  • 🔄 基于 LangGraph - 构建于强大的 LangGraph 框架之上
  • 📝 TypeScript 优先 - 完整的类型安全与 IntelliSense 支持
  • 🔌 可扩展 - 易于根据您的用例进行自定义和扩展

安装

# npm
npm install deepagents

# yarn
yarn add deepagents

# pnpm
pnpm add deepagents

使用

(要运行下面的示例,您需要 npm install @langchain/tavily)。

请确保在您的环境变量中设置 TAVILY_API_KEY。您可以在 这里 生成一个。

import { tool } from "langchain";
import { TavilySearch } from "@langchain/tavily";
import { createDeepAgent } from "deepagents";
import { z } from "zod";

// 网络搜索工具
const internetSearch = tool(
  async ({
    query,
    maxResults = 5,
    topic = "general",
    includeRawContent = false,
  }: {
    query: string;
    maxResults?: number;
    topic?: "general" | "news" | "finance";
    includeRawContent?: boolean;
  }) => {
    const tavilySearch = new TavilySearch({
      maxResults,
      tavilyApiKey: process.env.TAVILY_API_KEY,
      includeRawContent,
      topic,
    });
    return await tavilySearch._call({ query });
  },
  {
    name: "internet_search",
    description: "执行网络搜索",
    schema: z.object({
      query: z.string().describe("搜索查询"),
      maxResults: z
        .number()
        .optional()
        .default(5)
        .describe("返回的最大结果数"),
      topic: z
        .enum(["general", "news", "finance"])
        .optional()
        .default("general")
        .describe("搜索的主题类别"),
      includeRawContent: z
        .boolean()
        .optional()
        .default(false)
        .describe("是否包含原始内容"),
    }),
  },
);

// 引导智能体成为专家研究员的系统提示
const researchInstructions = `你是一位专家级研究员。你的任务是进行深入研究,并撰写一份精炼的报告。

你可以使用网络搜索工具作为主要的信息收集手段。

> [!提示]
> 如需开发、调试和部署 AI 智能体及 LLM 应用程序,请参阅 [LangSmith](https://docs.langchain.com/langsmith/home)。

## \`internet_search\`

用于针对特定查询执行网络搜索。你可以指定返回的最大结果数量、主题,以及是否包含原始内容。
`;

// 创建深度智能体
const agent = createDeepAgent({
  tools: [internetSearch],
  systemPrompt: researchInstructions,
});

// 调用智能体
const result = await agent.invoke({
  messages: [{ role: "user", content: "什么是 langgraph?" }],
});

更多复杂示例请参见 examples/research/research-agent.ts

使用 createDeepAgent 创建的智能体本质上就是一个 LangGraph 图——因此您可以像操作任何 LangGraph 智能体一样与之交互(流式传输、人机协作、记忆管理、Studio)。

核心能力

规划与任务分解

Deep Agents 内置了一个 write_todos 工具,使智能体能够将复杂任务分解为离散的步骤,跟踪进度,并在新信息出现时调整计划。

上下文管理

文件系统工具(lsread_filewrite_fileedit_fileglobgrep)允许智能体将大量上下文卸载到存储中,防止上下文窗口溢出,并支持处理可变长度的工具输出。

子智能体生成

内置的 task 工具使智能体能够生成专门的子智能体以实现上下文隔离。这有助于保持主智能体的上下文简洁,同时深入处理特定的子任务。

长期记忆

通过 LangGraph 的 Store,可以为智能体扩展跨线程的持久化内存。智能体能够保存和检索之前的对话信息。

自定义 Deep Agents

您可以向 createDeepAgent 传递多个参数来创建您自己的自定义深度智能体。

model

默认情况下,deepagents 使用 "claude-sonnet-4-5-20250929"。您可以通过传递任何 LangChain 模型对象 来自定义此设置。

import { ChatAnthropic } from "@langchain/anthropic";
import { ChatOpenAI } from "@langchain/openai";
import { createDeepAgent } from "deepagents";

// 使用 Anthropic
const agent = createDeepAgent({
  model: new ChatAnthropic({
    model: "claude-sonnet-4-20250514",
    temperature: 0,
  }),
});

// 使用 OpenAI
const agent2 = createDeepAgent({
  model: new ChatOpenAI({
    model: "gpt-5",
    temperature: 0,
  }),
});

systemPrompt

Deep Agents 配备了内置的系统提示词。这是一个相对详细的提示词,其设计深受 尝试复现 Claude Code 系统提示词的影响。相比 Claude Code 的系统提示词,它更具通用性。默认提示词包含了关于如何使用内置规划工具、文件系统工具和子智能体的详细说明。

针对特定用例定制的每个深度智能体都应包含与其用例相关的自定义系统提示词。提示词在构建成功的深度智能体中的重要性怎么强调都不为过。

import { createDeepAgent } from "deepagents";

const researchInstructions = `你是一位专家级研究员。你的工作是进行彻底的研究,然后撰写一份精炼的报告。`;

const agent = createDeepAgent({
  systemPrompt: researchInstructions,
});

tools

与调用工具的智能体一样,您也可以为深度智能体提供一组它可以访问的工具。

import { tool } from "langchain";
import { TavilySearch } from "@langchain/tavily";
import { createDeepAgent } from "deepagents";
import { z } from "zod";

const internetSearch = tool(
  async ({
    query,
    maxResults = 5,
    topic = "general",
    includeRawContent = false,
  }: {
    query: string;
    maxResults?: number;
    topic?: "general" | "news" | "finance";
    includeRawContent?: boolean;
  }) => {
    const tavilySearch = new TavilySearch({
      maxResults,
      tavilyApiKey: process.env.TAVILY_API_KEY,
      includeRawContent,
      topic,
    });
    return await tavilySearch._call({ query });
  },
  {
    name: "internet_search",
    description: "执行网络搜索",
    schema: z.object({
      query: z.string().describe("搜索查询"),
      maxResults: z.number().optional().default(5),
      topic: z
        .enum(["general", "news", "finance"])
        .optional()
        .default("general"),
      includeRawContent: z.boolean().optional().default(false),
    }),
  },
);

const agent = createDeepAgent({
  tools: [internetSearch],
});

middleware

createDeepAgent 是基于中间件实现的,这些中间件可以被自定义。您可以提供额外的中间件来扩展功能、添加工具或实现自定义钩子。

import { tool } from "langchain";
import { createDeepAgent } from "deepagents";
import type { AgentMiddleware } from "langchain";
import { z } from "zod";

const getWeather = tool(
  async ({ city }: { city: string }) => {
    return `${city} 的天气是晴朗的。`;
  },
  {
    name: "get_weather",
    description: "获取某个城市的天气。",
    schema: z.object({
      city: z.string().describe("要查询天气的城市"),
    }),
  },
);

const getTemperature = tool(
  async ({ city }: { city: string }) => {
    return `在 ${city},气温为 70 华氏度。`;
  },
  {
    name: "get_temperature",
    description: "获取某个城市的气温。",
    schema: z.object({
      city: z.string().describe("要查询气温的城市"),
    }),
  },
);

class WeatherMiddleware implements AgentMiddleware {
  tools = [getWeather, getTemperature];
}

const agent = createDeepAgent({
  model: "claude-sonnet-4-20250514",
  middleware: [new WeatherMiddleware()],
});

subagents

Deep Agents 的一项主要特性是能够生成子代理。您可以在 subagents 参数中指定自定义子代理,以便您的主代理可以将任务转交给它们。子代理对于上下文隔离(有助于避免污染主代理的整体上下文)以及自定义指令非常有用。

subagents 应该是一个遵循 SubAgent 接口的对象列表:

interface SubAgent {
  name: string;
  description: string;
  systemPrompt: string;
  tools?: StructuredTool[];
  model?: LanguageModelLike | string;
  middleware?: AgentMiddleware[];
  interruptOn?: Record<string, boolean | InterruptOnConfig>;
  skills?: string[];
}

SubAgent 字段:

  • name:这是子代理的名称,也是主代理调用该子代理时使用的名称。
  • description:这是显示给主代理的子代理描述。
  • systemPrompt:这是用于子代理的提示词。
  • tools:这是子代理可访问的工具列表。
  • model:可选的模型名称或模型实例。
  • middleware:附加到子代理的额外中间件。有关中间件及其与 createAgent 配合使用方式的介绍,请参阅 此处
  • interruptOn:一个自定义中断配置,用于指定针对您工具的人工介入交互。
  • skills:子代理的技能来源路径(例如,["/skills/research/"])。请参阅下面的技能继承部分。

技能继承

当您通过 createDeepAgent 在主代理上配置 skills 时,不同类型的子代理行为会有所不同:

  • 通用型子代理:会自动继承主代理的技能。此子代理可以访问与主代理完全相同的技能。
  • 自定义子代理:默认情况下不会继承主代理的技能。如果您希望自定义子代理也能访问技能,则必须显式地为该子代理定义 skills 属性。
const agent = createDeepAgent({
  model: "claude-sonnet-4-20250514",
  skills: ["/skills/"], // 主代理和通用型子代理都会获得这些技能
  subagents: [
    {
      name: "researcher",
      description: "研究助理",
      systemPrompt: "你是一名研究人员。",
      // 此子代理将无法从主代理继承 /skills/
    },
    {
      name: "coder",
      description: "编码助手",
      systemPrompt: "你是一名编码员。",
      skills: ["/skills/coding/"], // 该子代理拥有自己的技能
    },
  ],
});

这种设计确保了上下文隔离——自定义子代理仅能访问其明确需要的技能,从而防止技能在不同专业代理之间意外泄露。

使用 SubAgent

import { tool } from "langchain";
import { TavilySearch } from "@langchain/tavily";
import { createDeepAgent, type SubAgent } from "deepagents";
import { z } from "zod";

const internetSearch = tool(
  async ({
    query,
    maxResults = 5,
    topic = "general",
    includeRawContent = false,
  }: {
    query: string;
    maxResults?: number;
    topic?: "general" | "news" | "finance";
    includeRawContent?: boolean;
  }) => {
    const tavilySearch = new TavilySearch({
      maxResults,
      tavilyApiKey: process.env.TAVILY_API_KEY,
      includeRawContent,
      topic,
    });
    return await tavilySearch._call({ query });
  },
  {
    name: "internet_search",
    description: "执行网络搜索",
    schema: z.object({
      query: z.string(),
      maxResults: z.number().optional().default(5),
      topic: z
        .enum(["general", "news", "finance"])
        .optional()
        .default("general"),
      includeRawContent: z.boolean().optional().default(false),
    }),
  },
);

const researchSubagent: SubAgent = {
  name: "research-agent",
  description: "用于深入研究问题",
  systemPrompt: "你是一位出色的研究人员",
  tools: [internetSearch],
  model: "gpt-4o", // 可选覆盖,默认为主代理模型
};

const subagents = [researchSubagent];

const agent = createDeepAgent({
  model: "claude-sonnet-4-20250514",
  subagents: subagents,
});

interruptOn

对于代理来说,常见的情况是某些工具操作可能较为敏感,在执行前需要人工批准。Deep Agents 通过 LangGraph 的中断功能支持人机协作工作流。您可以使用检查点程序来配置哪些工具需要审批。

这些工具配置会被传递给我们预构建的 HITL 中间件,从而使代理在执行已配置的工具之前暂停,并等待用户的反馈。

import { tool } from "langchain";
import { createDeepAgent } from "deepagents";
import { z } from "zod";

const getWeather = tool(
  async ({ city }: { city: string }) => {
    return `The weather in ${city} is sunny.`;
  },
  {
    name: "get_weather",
    description: "获取某个城市的天气。",
    schema: z.object({
      city: z.string(),
    }),
  },
);

const agent = createDeepAgent({
  model: "claude-sonnet-4-20250514",
  tools: [getWeather],
  interruptOn: {
    get_weather: {
      allowedDecisions: ["approve", "edit", "reject"],
    },
  },
});

backend

Deep Agents 使用后端来管理文件系统操作和内存存储。您可以根据需求配置不同的后端:

import {
  createDeepAgent,
  StateBackend,
  StoreBackend,
  FilesystemBackend,
  LocalShellBackend,
  CompositeBackend,
} from "deepagents";
import { MemorySaver } from "@langchain/langgraph";
import { InMemoryStore } from "@langchain/langgraph-checkpoint";

// 默认:StateBackend(内存中,临时)
const agent1 = createDeepAgent({
  // 未指定后端 - 默认使用 StateBackend
});

// StoreBackend:使用 LangGraph Store 进行持久化存储
const agent2 = createDeepAgent({
  backend: (config) => new StoreBackend(config),
  store: new InMemoryStore(), // 提供存储
  checkpointer: new MemorySaver(), // 可选:用于对话持久化
});

// FilesystemBackend:将文件存储在实际文件系统中
const agent3 = createDeepAgent({
  backend: (config) => new FilesystemBackend({ rootDir: "./agent-workspace" }),
});

// LocalShellBackend:提供文件系统访问权限及本地 shell 命令执行能力
const agent4 = createDeepAgent({
  backend: new LocalShellBackend({
    rootDir: "./agent-workspace",
    inheritEnv: true,
  }),
});

// CompositeBackend:结合多个后端
const agent5 = createDeepAgent({
  backend: (config) =>
    new CompositeBackend({
      state: new StateBackend(config),
      store: config.store ? new StoreBackend(config) : undefined,
    }),
  store: new InMemoryStore(),
  checkpointer: new MemorySaver(),
});

有关每种后端类型的详细示例,请参阅 examples/backends/

沙箱执行

对于需要运行 Shell 命令的代理,可以通过扩展 BaseSandbox 来创建一个沙箱后端。这将启用 execute 工具,使代理能够在隔离的环境中运行任意 Shell 命令。

import {
  createDeepAgent,
  BaseSandbox,
  type ExecuteResponse,
  type FileUploadResponse,
  type FileDownloadResponse,
} from "deepagents";
import { spawn } from "child_process";

// 通过扩展 BaseSandbox 创建具体的沙箱实现
class LocalShellSandbox extends BaseSandbox {
  readonly id = "local-shell";
  private readonly workingDirectory: string;

  constructor(workingDirectory: string) {
    super();
    this.workingDirectory = workingDirectory;
  }

  // 只需实现 execute() 方法——BaseSandbox 已经实现了所有文件操作
  async execute(command: string): Promise<ExecuteResponse> {
    return new Promise((resolve) => {
      const child = spawn("/bin/bash", ["-c", command], {
        cwd: this.workingDirectory,
      });

      const chunks: string[] = [];
      child.stdout.on("data", (data) => chunks.push(data.toString()));
      child.stderr.on("data", (data) => chunks.push(data.toString()));

      child.on("close", (exitCode) => {
        resolve({
          output: chunks.join(""),
          exitCode,
          truncated: false,
        });
      });
    });
  }

  async uploadFiles(
    files: Array<[string, Uint8Array]>,
  ): Promise<FileUploadResponse[]> {
    // 实现文件上传逻辑
    return files.map(([path]) => ({ path, error: null }));
  }

  async downloadFiles(paths: string[]): Promise<FileDownloadResponse[]> {
    // 实现文件下载逻辑
    return paths.map((path) => ({
      path,
      content: null,
      error: "file_not_found",
    }));
  }
}

// 将沙箱与你的代理一起使用
const sandbox = new LocalShellSandbox("./workspace");

const agent = createDeepAgent({
  backend: sandbox,
  systemPrompt: "你可以使用 execute 工具来运行 Shell 命令。",
});

当使用沙箱后端时,代理将获得一个 execute 工具,可以用来运行 Shell 命令。该工具会自动返回命令的输出、退出码以及输出是否被截断的信息。

完整的实现请参阅 examples/sandbox/local-sandbox.ts

Deep Agents 中间件

Deep Agents 采用模块化的中间件架构构建。提醒一下,Deep Agents 具备以下功能:

  • 计划工具
  • 用于存储上下文和长期记忆的文件系统
  • 派生子代理的能力

这些功能中的每一项都以独立的中间件形式实现。当你使用 createDeepAgent 创建深度代理时,我们会自动为你的代理附加 todoListMiddlewareFilesystemMiddlewareSubAgentMiddleware

中间件是一个可组合的概念,你可以根据具体用例选择为代理添加多少个中间件。这意味着你也可以单独使用上述任何中间件!

TodoListMiddleware

规划是解决复杂问题不可或缺的一部分。如果你最近使用过 Claude Code,就会注意到它在处理复杂的多步骤任务之前会先列出一个待办事项清单,并且随着更多信息的不断涌入,它还能动态地调整和更新这个清单。

todoListMiddleware 为你的代理提供了一个专门用于更新待办事项清单的工具。在执行多步骤任务之前及过程中,代理会被提示使用 write_todos 工具来记录自己正在做什么以及还需要完成哪些工作。

import { createAgent, todoListMiddleware } from "langchain";

// 默认情况下,createDeepAgent 已包含 todoListMiddleware
// 如果你构建自定义代理,也可以对其进行自定义
const agent = createAgent({
  model: "claude-sonnet-4-20250514",
  middleware: [
    todoListMiddleware({
      // 可选:自定义系统提示
      systemPrompt: "使用 write_todos 工具来...",
    }),
  ],
});

FilesystemMiddleware

上下文工程是构建高效代理的主要挑战之一。当使用可能返回不同长度结果的工具(例如网络搜索、RAG)时,这一点尤为困难,因为较长的工具结果会迅速填满你的上下文窗口。

FilesystemMiddleware 为你的代理提供了与短期和长期记忆交互的工具:

  • ls:列出文件系统中的文件
  • read_file:读取整个文件或文件中的指定行数
  • write_file:向文件系统中写入新文件
  • edit_file:编辑文件系统中的现有文件
  • glob:查找匹配特定模式的文件
  • grep:在文件中搜索文本
  • execute:运行 Shell 命令(仅在使用 SandboxBackendProtocol 时可用)
import { createAgent } from "langchain";
import { createFilesystemMiddleware } from "deepagents";

// 默认情况下,createDeepAgent 已包含 FilesystemMiddleware
// 如果你构建自定义代理,也可以对其进行自定义
const agent = createAgent({
  model: "claude-sonnet-4-20250514",
  middleware: [
    createFilesystemMiddleware({
      backend: ..., // 可选:自定义存储后端
      systemPrompt: "在……时写入文件系统", // 可选的自定义系统提示覆盖
      customToolDescriptions: {
        ls: "在……时使用 ls 工具",
        read_file: "使用 read_file 工具来……",
      }, // 可选:自定义文件系统工具描述
    }),
  ],
});

SubAgentMiddleware

将任务交给子代理是一种很好的方式,可以在保持主代理(监督者)上下文窗口整洁的同时,深入处理任务。子代理中间件允许你通过任务工具来分配子代理。

子代理由名称、描述、系统提示和工具定义。你还可以为子代理指定自定义模型或额外的中间件。这在你需要让子代理与主代理共享额外的状态键时特别有用。

import { tool } from "langchain";
import { createAgent } from "langchain";
import { createSubAgentMiddleware, type SubAgent } from "deepagents";
import { z } from "zod";

const getWeather = tool(
  async ({ city }: { city: string }) => {
    return `The weather in ${city} is sunny.`;
  },
  {
    name: "get_weather",
    description: "获取某个城市的天气。",
    schema: z.object({
      city: z.string(),
    }),
  },
);

const weatherSubagent: SubAgent = {
  name: "weather",
  description: "该子代理可以获取城市天气。",
  systemPrompt: "使用 get_weather 工具获取城市天气。",
  tools: [getWeather],
  model: "gpt-4o",
  middleware: [],
};

const agent = createAgent({
  model: "claude-sonnet-4-20250514",
  middleware: [
    createSubAgentMiddleware({
      defaultModel: "claude-sonnet-4-20250514",
      defaultTools: [],
      subagents: [weatherSubagent],
    }),
  ],
});

ACP(代理客户端协议)支持

Deep Agents 可以作为 Agent Client Protocol 服务器暴露出来,通过基于 stdio 的标准化 JSON-RPC 2.0 协议,实现与 Zed、JetBrains 等 IDE 以及其他兼容 ACP 的客户端的集成。

deepagents-acp 包为您的 Deep Agent 提供了 ACP 支持:

npm install deepagents-acp

最快速的入门方式是使用 CLI:

npx deepagents-acp --name my-agent --workspace /path/to/project

或者以编程方式启动:

import { startServer } from "deepagents-acp";

await startServer({
  agents: {
    name: "coding-assistant",
    description: "具有文件系统访问权限的 AI 编程助手",
    skills: ["./skills/"],
  },
  workspaceRoot: process.cwd(),
});

若要与 Zed 集成,请在 Zed 的设置中添加以下配置:

{
  "agent": {
    "profiles": {
      "deepagents": {
        "name": "DeepAgents",
        "command": "npx",
        "args": ["deepagents-acp"]
      }
    }
  }
}

完整的文档和高级配置信息,请参阅 deepagents-acp 的 READMEACP 服务器示例

版本历史

@langchain/sandbox-standard-tests@1.0.02026/04/07
@langchain/quickjs@0.2.52026/04/07
deepagents-acp@0.1.82026/04/07
@langchain/node-vfs@0.1.42026/04/07
deepagents@1.9.02026/04/07
@langchain/modal@0.1.42026/04/07
deepagents@1.9.0-alpha.12026/04/06
deepagents-acp@0.1.8-alpha.02026/04/06
@langchain/node-vfs@0.1.4-alpha.02026/04/06
@langchain/quickjs@0.2.5-alpha.02026/04/06
@langchain/modal@0.1.4-alpha.02026/04/06
@langchain/daytona@0.2.0-alpha.02026/04/06
@langchain/deno@0.2.2-alpha.02026/04/06
@langchain/quickjs@0.2.42026/03/31
deepagents@1.8.82026/03/31
deepagents-acp@0.1.72026/03/31
deepagents-acp@0.1.62026/03/30
@langchain/daytona@0.2.02026/03/30
@langchain/quickjs@0.2.32026/03/30
deepagents@1.8.72026/03/30

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|5天前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|6天前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

150.7k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|昨天
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|昨天
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|5天前
插件开发框架