Skip to content

[Feature] 增强版的SubAgent功能 #6954

@elecvoid243

Description

@elecvoid243

Description / 描述

为现有的SubAgent能力进行扩充,使得SubAgent可以在会话过程中由主Agent动态创建和销毁(类似Kimi的Agent蜂群形式),而不是读取用户预定义的人格。该功能与现有的SubAgent功能不冲突。

核心特性

特性 说明
动态创建和销毁 运行时动态创建SubAgent,无需预定义;一轮会话结束(返回给用户最终结果时)自动销毁
上下文记忆 可以为SubAgent开启保护模式,使其能够存活于多轮对话,并具备独立的跨轮对话上下文
Skills和Tool隔离 每个SubAgent拥有独立的Tool和Skill配置,由主Agent分配
公共上下文 受保护的子代理间可通过公共上下文池进行信息共享和协调工作
数量限制 可配置的子代理最大数量限制

基本工作流程

1. 用户发送消息
2. 主Agent被自动注入Prompt “你拥有自我派生的能力”
3. 主Agent根据任务识别到需要派生SubAgent
4. 调用 create_dynamic_subagent 工具
5. 系统创建子代理和 transfer_to_xxx 工具,并注入回主Agent
6. 主Agent使用 transfer_to_xxx 委派任务
7. SubAgent执行任务并返回结果
8. 主Agent整合结果回复用户
9. SubAgent被自动释放

带保护的连续对话流程

第1轮:
  用户 -> 主Agent: 创建分析师,帮我分析数据
  主Agent -> create_dynamic_subagent(analyst)
  主Agent -> protect_subagent(analyst)
  主Agent -> transfer_to_analyst(分析这份数据)
  分析师 -> 返回分析结果
  用户 <- 主Agent <- 分析结果

第2轮:
  用户 -> 主Agent: 继续分析另外一份数据
  主Agent -> transfer_to_analyst(分析新数据)
  分析师(带历史上下文) -> 返回结果
  用户 <- 主Agent <- 新结果

公共上下文协作流程

1. 启用 shared_context_enabled=true
2. 主Agent创建多个SubAgent并加上保护
3. 子代理A: send_public_context(status, "已完成数据清洗")
4. 子代理B: send_public_context(status, "开始数据可视化")
5. 子代理C: 可看到A和B的状态更新
6. 主Agent: 可以手动调用view_public_context() 检视整体进度
7. 除了状态消息外,shared_context还可以传递SubAgent之间的消息,例如Agent A向Agent B发送消息,或者主Agent向所有SubAgent发送System消息

Use Case / 使用场景

  1. 动态处理可以并行化的复杂任务
  2. 可处理超长上下文(例如阅读一个大型代码库中的所有代码,由主Agent自适应建立多个SubAgent进行分块阅读)

Willing to Submit PR? / 是否愿意提交PR?

  • Yes, I am willing to submit a PR. / 是的,我愿意提交 PR。

Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:coreThe bug / feature is about astrbot's core, backendenhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions