Skip to content

[Feature]【功能建议】SubAgent 支持“静默调用”模式,让子代理结果返回主代理而非直接回复用户 #8181

@NekoTumble

Description

@NekoTumble

Description / 描述

感谢开发团队!目前 SubAgent 在沉浸式角色场景中有个局限,建议增加静默调用模式。

🧩 当前行为

在目前的 SubAgent 机制中,主代理通过 transfer_to_[SubAgent] 工具将对话控制权移交给子代理后,子代理会以独立角色与用户直接对话,其回复直接展示在聊天界面中。用户会看到类似“camera_agent”这样的角色切换提示,体验上像是换了一个人在聊天。

对于多角色轮流对话的场景(如客服转接、专家会诊),这种设计是合适的。但对于需要保持单一角色沉浸感的应用(如虚拟伴侣、猫娘女仆、角色扮演助手),这种角色切换会严重破坏沉浸感——用户不希望助手突然“分裂”成多个不同的身份。

🎯 期望行为

希望增加一种静默调用模式(background / silent mode)。在此模式下:

  1. 主代理可以以类似调用函数的方式发起一个子代理任务,并等待子代理返回处理结果(结果可以包含文本、图片、语音等多种类型)。
  2. 子代理在整个过程中不直接向用户输出任何内容,其回复数据仅返回给主代理
  3. 主代理获得结果后,可以将其整合到自己的回复中,以统一的角色人格和口吻呈现给用户。
  4. 用户完全感知不到子代理的存在,只看到主代理的最终回复。

注:子代理的提示词可以通过现有的**人格设定(Persona)**机制独立配置,无需额外增加输入框。

🔧 调用方式建议

  • 可以在现有 transfer_to_[SubAgent] 的基础上增加一个可选参数(例如 mode="silent"),或新增一个 call_subagent 工具。
  • 当静默模式启用时,主代理会挂起当前回复生成,等待子代理完成任务后再继续。

⏳ 异步与结果处理

  • 主代理需要支持异步等待子代理的完成信号。
  • 子代理返回的结果应包含结构化的数据(如 {text: "...", image: "...", audio: "..."}),方便主代理解析和再组织。

🚫 替代方案(当前)

目前用户只能:

  • 接受角色切换带来的割裂感;或者
  • 放弃使用 SubAgent,将所有工具调用逻辑(如超时重试、prompt 构造等)直接写入主代理的系统提示词,导致提示词极度臃肿、容易出错、难以维护。

这两种方案都不理想,尤其对于需要长期维护的沉浸式角色项目。

Use Case / 使用场景

📸 典型用例

1. 拍照场景
主代理(例如猫娘女仆“小白”)需要拍照给主人看。

  • 主代理输出内部意图(如 [拍照:自拍 情绪:委屈],但不显示给用户) → 静默调用 camera_subagent(该子代理使用独立的“拍照助手”人格) → 子代理生成图片并返回 → 主代理将图片嵌入自己的回复中,并附上角色化的台词:“哼,给你看~才不是特意拍的喵!”
    用户全程只看到“小白”的对话和图片,体验自然统一。

2. 记忆查询场景
主代理想确认主人曾经说过的某个约定。

  • 主代理静默调用 memory_subagent → 子代理查询记忆,处理冲突,返回结果文本 → 主代理以自己的语气说出:“主人上次说喜欢吃提拉米苏喵~”

3. 语音生成场景
主代理想用撒娇的声音说一句话。

  • 主代理静默调用 tts_subagent,传入文本和语气参数 → 子代理合成语音并返回音频 → 主代理发送语音消息,同时可选地发送文字“你听~”。
    用户听到的是角色的声音,而不是突然冒出来的“tts_agent”。

📌 附加信息

  • AstrBot 版本:最新 WebUI 版(2026-05)
  • 使用场景:沉浸式角色扮演(猫娘女仆、虚拟人、动漫角色聊天等)

希望开发者能考虑这个增强功能,让 SubAgent 同时覆盖“对话转移”和“能力模块”两种主流使用模式。再次感谢 AstrBot 团队的辛勤付出!

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:providerThe bug / feature is about AI Provider, Models, LLM Agent, LLM Agent Runner.enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions