avatar

命令行小屋

A text-focused Halo theme

  • Ai
  • Linux
  • 游戏
  • 数据库
  • Apache Hadoop
  • Windows
  • 手机
主页 从上下文隔离到任务协作:SubAgent 的概念、创建与应用实践
文章

从上下文隔离到任务协作:SubAgent 的概念、创建与应用实践

发表于 最近 更新于 最近
作者 KennethCheng
310~398 分钟 阅读

从上下文隔离到任务协作:SubAgent 的概念、创建与应用实践

在构建复杂 Agent 应用时,主代理往往需要同时处理任务规划、工具调用、信息检索、数据分析和结果生成等工作。

如果所有任务都由一个 Agent 直接完成,容易出现以下问题:

  • 上下文越来越长,导致上下文膨胀
  • 大量工具调用记录干扰主任务
  • 不同类型的任务彼此混杂
  • 主代理难以专注于整体规划
  • 复杂任务的执行效率和成功率下降

SubAgent 的出现,就是为了解决这些问题。

SubAgent 可以理解为由主 Agent 调用的专用子代理。它在相对独立的上下文中完成某个具体任务,最后只向主 Agent 返回整理后的关键信息。


一、SubAgent 是什么?

SubAgent 是主 Agent 的子代理,主要负责执行某一类具体任务。

主 Agent 不需要亲自完成所有工作,而是可以将复杂问题拆分为多个子任务,然后交给不同的 SubAgent 执行。

分派搜索任务
分派查询任务
分派计算任务
返回关键搜索结果
返回查询结果
返回计算结果
用户请求
主 Agent
网络搜索 SubAgent
数据库 SubAgent
数值计算 SubAgent
整合结果
最终答案

例如,一个“分析 DeepSeek 用户增长情况”的任务,可以被拆分为:

主 Agent:
负责理解问题、拆分任务和生成最终报告

网络搜索 SubAgent:
负责搜索 2024 年和 2025 年的用户数据

数据处理 SubAgent:
负责清洗和整理不同来源的数据

数值计算 SubAgent:
负责计算用户增长率

主 Agent:
负责整合各个 SubAgent 的结果

二、SubAgent 的核心价值

1. 上下文隔离

SubAgent 可以在独立上下文中完成任务。

主 Agent 不需要接收子任务执行过程中的全部信息,只需要接收最终提取出的关键结果。

例如,网络搜索 SubAgent 可能需要:

  1. 搜索多个网页
  2. 打开网页内容
  3. 阅读和筛选信息
  4. 对比多个数据来源
  5. 整理搜索结果

主 Agent 不一定需要看到所有网页和工具调用过程,只需要获得最终整理结果:

2024 年用户数量:A
2025 年用户数量:B
增长比例:C
数据来源:D

这种方式可以有效避免主 Agent 的上下文被大量中间信息污染。


2. 任务专业化

不同的 SubAgent 可以负责不同的专业领域。

SubAgent主要职责常用工具
网络搜索 SubAgent搜索和整理互联网信息Tavily、搜索 API
数据库 SubAgent查询和处理数据库数据SQL、数据库工具
数值计算 SubAgent执行数学和统计计算计算器、Python
代码 SubAgent编写、检查和调试代码代码执行工具
文档 SubAgent读取、分析和生成文档文档处理工具

每个 SubAgent 都可以有独立的:

  • 系统提示词
  • 工具列表
  • 模型配置
  • 输出格式
  • 中间件
  • 状态处理逻辑

3. 提高执行效率和成功率

由于 SubAgent 专注于单一任务,因此能够减少任务之间的相互干扰。

复杂任务
任务拆分
搜索
数据库查询
数值计算
结果总结
主 Agent
最终输出

与让一个 Agent 从头到尾处理所有工作相比,专业化的 SubAgent 更容易:

  • 准确调用工具
  • 遵守专用提示词
  • 输出结构化结果
  • 控制上下文长度
  • 提高任务完成质量

三、Deep Agent 与 SubAgent 的协作逻辑

Deep Agent 通常充当系统中的主 Agent,负责高层次的规划和协调。

用户请求
Deep Agent 主代理
理解总体目标
拆分子任务
选择合适的 SubAgent
SubAgent 独立执行
返回关键结果
主 Agent 整合信息
生成最终答案

主 Agent 的主要职责:

  • 理解用户需求
  • 制定整体计划
  • 拆分复杂任务
  • 选择合适的 SubAgent
  • 分派任务
  • 整合子任务结果
  • 生成最终回答

SubAgent 的主要职责:

  • 接收具体任务
  • 使用指定工具
  • 在独立上下文中执行任务
  • 整理和筛选结果
  • 将关键结果返回主 Agent

四、SubAgent 的两种创建方式

SubAgent 主要有两种创建方法:

  1. Dictionary-based 基础创建
  2. CompiledSubAgent 自定义创建
SubAgent 创建
Dictionary-based
CompiledSubAgent
适合简单、标准化任务
适合复杂、自定义任务

五、Dictionary-based SubAgent

1. 基本结构

Dictionary-based 方式通过一个字典来描述 SubAgent。

internet_subagent = {
    "name": "internet-agent",
    "description": (
        "Utilize online tools to search for information "
        "on the internet"
    ),
    "system_prompt": "You are a great Internet searcher",
    "tools": [internet_search],
    "model": model,
}

2. 配置字段

必填字段

字段类型说明
namestrSubAgent 的名称
descriptionstrSubAgent 的职责描述
system_promptstrSubAgent 的系统提示词
toolsListSubAgent 可以调用的工具列表

可选字段

字段类型说明
modelstr | BaseChatModelSubAgent 使用的模型
middlewareList[Middleware]SubAgent 使用的中间件
interrupt_onDict[str, bool]配置工具调用是否支持中断

3. 创建工具

以 Tavily 网络搜索为例:

import os

from langchain_core.tools import tool
from tavily import TavilyClient


tavily_client = TavilyClient(
    api_key=os.environ["TAVILY_API_KEY"]
)


@tool
def internet_search(query: str) -> str:
    """
    Search the internet for relevant information.
    """
    response = tavily_client.search(query)
    return str(response)

其中:

  • @tool 用于将函数声明为 LangChain 工具
  • TAVILY_API_KEY 从环境变量中读取 API Key
  • internet_search 是网络搜索 SubAgent 使用的工具

4. 配置 SubAgent

internet_subagent = {
    "name": "internet-agent",
    "description": (
        "Utilize online tools to search for information "
        "on the internet."
    ),
    "system_prompt": (
        "You are an expert internet researcher. "
        "Search for reliable information and summarize "
        "the key findings."
    ),
    "tools": [internet_search],
    "model": model,
}

description 的作用

description 不只是普通的文字说明,还可以帮助主 Agent 判断什么时候应该调用这个 SubAgent。

推荐写法:

"description": (
    "Search the internet for up-to-date information "
    "and summarize the most relevant findings."
)

不推荐写法:

"description": "A useful agent"

描述过于模糊时,主 Agent 可能无法准确判断该 SubAgent 的用途。

system_prompt 的作用

system_prompt 用于定义 SubAgent 的角色和行为方式。

例如:

"system_prompt": """
You are an expert internet researcher.
Search for reliable and up-to-date information.
Summarize the key findings clearly.
"""

一个好的系统提示词通常需要说明:

  • SubAgent 的角色
  • 需要完成的任务
  • 工具的使用方式
  • 结果的整理方式
  • 输出格式和质量要求

5. 将 SubAgent 传入 Deep Agent

from deepagents import create_deep_agent


agent = create_deep_agent(
    model=model,
    subagents=[internet_subagent],
)

subagents 可以传入多个 SubAgent:

agent = create_deep_agent(
    model=model,
    subagents=[
        internet_subagent,
        database_subagent,
        calculation_subagent,
    ],
)

六、CompiledSubAgent 自定义创建

1. 基本思路

CompiledSubAgent 的创建流程是:

使用 create_agent 创建独立代理
        ↓
将独立代理包装为 CompiledSubAgent
        ↓
传入 create_deep_agent
        ↓
由主 Agent 调用

相比字典方式,CompiledSubAgent 可以对代理内部逻辑进行更细致的控制。


2. 使用 create_agent 创建独立代理

from deepagents import create_deep_agent, CompiledSubAgent
from langchain.agents import create_agent


custom_graph = create_agent(
    model=model,
    tools=[internet_search],
    prompt="You are a great Internet searcher.",
)

这里的 custom_graph 是一个已经配置完成的独立代理。

参数说明:

参数说明
model代理使用的模型
tools代理可以调用的工具
prompt代理的系统提示词

3. 包装为 CompiledSubAgent

custom_subagent = CompiledSubAgent(
    name="internet_search",
    description=(
        "A specialised agent for gathering information "
        "via web searches"
    ),
    runnable=custom_graph,
)

CompiledSubAgent 的核心字段:

字段说明
nameSubAgent 的名称
descriptionSubAgent 的功能描述
runnable实际执行任务的代理对象

4. 传入 Deep Agent

agent = create_deep_agent(
    model=model,
    tools=[internet_search],
    subagents=[custom_subagent],
)

完整调用关系:

调用
返回整理后的结果
Deep Agent
CompiledSubAgent
custom_graph
internet_search
网络搜索结果

七、SubAgent 的实际调用

可以使用 HumanMessage 向主 Agent 发送任务:

from langchain.messages import HumanMessage


res = agent.invoke(
    {
        "messages": [
            HumanMessage(
                content=(
                    "进行网络搜索获取数据,比对 DeepSeek 模型的用户使用量,"
                    "2024 到 2025 年增长了百分之多少?"
                )
            )
        ]
    }
)

主 Agent 可能会产生类似的工具调用:

[
    {
        "name": "task",
        "args": {
            "description": (
                "Conduct a comprehensive web search "
                "to gather ..."
            ),
            "subagent_type": "internet-agent",
        },
        "id": "call_...",
        "type": "tool_call",
    }
]

字段含义:

字段含义
name被调用的工具名称
args工具调用参数
description分派给 SubAgent 的任务
subagent_type要调用的 SubAgent 类型
id本次调用的唯一标识
type调用类型

八、SubAgent 的应用场景

1. 适合使用 SubAgent

多步骤任务

数据搜索 → 信息提取 → 数据清洗 → 数值计算 → 报告生成

可以将每个阶段交给对应的 SubAgent,避免主 Agent 上下文变得混乱。

专业领域任务

当任务需要专用说明、工具或领域知识时,可以创建专用 SubAgent。

例如:

  • 网络搜索
  • 数据库查询
  • 财务分析
  • 法律检索
  • 代码审查
  • 文档解析

不同模型能力的任务

可以根据任务特点,为不同 SubAgent 配置不同模型。

search_subagent = {
    "name": "search-agent",
    "description": "负责搜索和整理资料",
    "system_prompt": "你是一名专业的信息检索专家",
    "tools": [internet_search],
    "model": search_model,
}

calculation_subagent = {
    "name": "calculation-agent",
    "description": "负责执行数值计算",
    "system_prompt": "你是一名严谨的数值计算专家",
    "tools": [calculator],
    "model": reasoning_model,
}

主 Agent 需要专注于规划

当主 Agent 只负责高层协调时,系统结构会更加清晰:

主 Agent
规划整体任务
调用搜索 SubAgent
调用数据库 SubAgent
调用计算 SubAgent
关键搜索结果
关键数据库结果
关键计算结果
主 Agent 整合
最终报告

2. 不适合使用 SubAgent

简单的单步任务

例如:

  • 回答简单问题
  • 执行一次简单计算
  • 查询单个数据
  • 总结一小段文本

这些任务直接由主 Agent 完成即可。

后续步骤依赖完整中间信息

如果后续处理必须依赖前面所有中间过程,就不应简单地只返回摘要。

可以采用以下方案:

  • 返回完整的结构化数据
  • 保留关键中间结果
  • 让主 Agent 参与关键步骤
  • 只隔离不影响后续处理的部分

成本敏感的任务

使用 SubAgent 可能增加:

  • 模型调用次数
  • Token 消耗
  • 工具调用次数
  • 执行时间
  • 系统维护成本

因此需要评估 SubAgent 带来的收益是否值得这些额外开销。


九、三种 SubAgent 类型对比

类型创建方式自定义能力适用场景
General-purpose SubAgent系统自动提供一般通用、临时任务
Dictionary-based SubAgent使用字典配置中等简单、标准化任务
CompiledSubAgent独立创建后包装较强复杂、高度定制化任务

十、如何选择 SubAgent 创建方式?

可以按照以下思路进行选择:

否
是
是
否
是
否
是否需要 SubAgent?
由主 Agent 直接处理
任务是否简单、配置是否标准?
使用 Dictionary-based
是否需要自定义内部流程?
使用 CompiledSubAgent

推荐原则

  • 简单任务:直接由主 Agent 执行
  • 简单专用任务:使用 Dictionary-based
  • 复杂专用任务:使用 CompiledSubAgent
  • 通用临时任务:使用 General-purpose SubAgent
  • 强依赖中间信息的任务:谨慎进行上下文隔离
  • 成本敏感任务:先评估调用收益和额外开销

十一、最佳实践

1. 清晰描述 SubAgent 职责

"description": (
    "Search the internet for reliable information "
    "and summarize the key findings."
)

不要使用过于模糊的描述:

"description": "A useful agent"

2. 让 SubAgent 返回结构化结果

推荐让 SubAgent 返回清晰、紧凑的结果:

{
    "topic": "DeepSeek 用户增长",
    "data_2024": "...",
    "data_2025": "...",
    "growth_rate": "...",
    "sources": [...]
}

这样主 Agent 更容易继续处理。


3. 控制返回内容

SubAgent 的目标不是返回所有过程信息,而是返回对主任务有用的结果。

原始工具结果
    ↓
SubAgent 筛选和整理
    ↓
结构化关键信息
    ↓
主 Agent

4. 为不同任务选择合适模型

如果某个 SubAgent 负责复杂推理、专业分析或精确计算,可以为它单独指定更适合的模型。


5. 避免过度拆分

不是所有任务都需要 SubAgent。

如果一个任务只有一步操作,强行创建 SubAgent 可能会导致:

  • 调用链变长
  • 系统复杂度增加
  • Token 消耗上升
  • 执行时间增加
  • 调试难度提高

十二、总结

SubAgent 的核心思想是:

将复杂任务中的局部工作交给专门的子代理,在独立上下文中完成任务,并将关键结果返回给主 Agent。

它主要带来三方面价值:

  1. 上下文隔离:避免主 Agent 被大量中间信息污染
  2. 任务专业化:让不同 SubAgent 负责不同领域和工具
  3. 高层协调:让主 Agent 专注于任务规划、协调和结果整合

SubAgent 的创建方式主要有两种:

Dictionary-based
    → 简单、标准化、配置方便

CompiledSubAgent
    → 灵活、自定义、适合复杂代理逻辑

最终,一个合理的 Agent 系统应该根据任务复杂度、上下文依赖、专业化需求和运行成本,决定是否使用 SubAgent,以及选择哪种创建方式。

Ai, LangChain
LangChain Python Ai
许可协议:  CC BY 4.0
分享

相关文章

8月 3, 2026

一文搞懂 LangSmith:从可观测到 Studio 调试,让 LLM Agent 告别黑盒

作为 LangChain 团队三大核心产品之一,LangSmith 提供观察、调试和部署 LLM 应用的统一平台。本文带你从入门到 Studio 实战,彻底搞懂 LangSmith 的使用方式。 一、初识 LangSmith 当我们成功构建一个 Agent 后,常常会被这些问题困扰: 这个请求到底经

8月 2, 2026

LangChain V1.1 & V1.2 双版本深度解读:看 Profile 抽象如何重塑中间件生态

📅 2025 年 11 月 25 日 V1.1 发布,2025 年 12 月 15 日 V1.2 紧随其后。两个月两次发版,LangChain 团队究竟在下怎样一盘棋? LangChain 在 V1.0 正式版发布后的短短两个月内,密集推出了 V1.1 和 V1.2 两个版本。与其说是"功能更新"

8月 2, 2026

从上下文隔离到任务协作:SubAgent 的概念、创建与应用实践

从上下文隔离到任务协作:SubAgent 的概念、创建与应用实践 在构建复杂 Agent 应用时,主代理往往需要同时处理任务规划、工具调用、信息检索、数据分析和结果生成等工作。 如果所有任务都由一个 Agent 直接完成,容易出现以下问题: 上下文越来越长,导致上下文膨胀 大量工具调用记录干扰主任务

下一篇

LangChain V1.1 & V1.2 双版本深度解读:看 Profile 抽象如何重塑中间件生态

上一篇

从浅到深:Deep Agents 核心能力与架构全解析

最近更新

  • 一文搞懂 LangSmith:从可观测到 Studio 调试,让 LLM Agent 告别黑盒
  • LangChain V1.1 & V1.2 双版本深度解读:看 Profile 抽象如何重塑中间件生态
  • 从上下文隔离到任务协作:SubAgent 的概念、创建与应用实践
  • 从浅到深:Deep Agents 核心能力与架构全解析
  • File System 中间件完全指南:四种后端让你的 Agent 学会“读写文件”

热门标签

samsung WireGuard Chevereto docker 破解 llama LangChain Ai Python Gemma

目录

©2026 命令行小屋. 保留部分权利。

使用 Halo 主题 Chirpy