Description / 描述
感谢开发团队!目前 SubAgent 在沉浸式角色场景中有个局限,建议增加静默调用模式。
🧩 当前行为
在目前的 SubAgent 机制中,主代理通过 transfer_to_[SubAgent] 工具将对话控制权移交给子代理后,子代理会以独立角色与用户直接对话,其回复直接展示在聊天界面中。用户会看到类似“camera_agent”这样的角色切换提示,体验上像是换了一个人在聊天。
对于多角色轮流对话的场景(如客服转接、专家会诊),这种设计是合适的。但对于需要保持单一角色沉浸感的应用(如虚拟伴侣、猫娘女仆、角色扮演助手),这种角色切换会严重破坏沉浸感——用户不希望助手突然“分裂”成多个不同的身份。
🎯 期望行为
希望增加一种静默调用模式(background / silent mode)。在此模式下:
- 主代理可以以类似调用函数的方式发起一个子代理任务,并等待子代理返回处理结果(结果可以包含文本、图片、语音等多种类型)。
- 子代理在整个过程中不直接向用户输出任何内容,其回复数据仅返回给主代理。
- 主代理获得结果后,可以将其整合到自己的回复中,以统一的角色人格和口吻呈现给用户。
- 用户完全感知不到子代理的存在,只看到主代理的最终回复。
注:子代理的提示词可以通过现有的**人格设定(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?
Code of Conduct
Description / 描述
感谢开发团队!目前 SubAgent 在沉浸式角色场景中有个局限,建议增加静默调用模式。
🧩 当前行为
在目前的 SubAgent 机制中,主代理通过
transfer_to_[SubAgent]工具将对话控制权移交给子代理后,子代理会以独立角色与用户直接对话,其回复直接展示在聊天界面中。用户会看到类似“camera_agent”这样的角色切换提示,体验上像是换了一个人在聊天。对于多角色轮流对话的场景(如客服转接、专家会诊),这种设计是合适的。但对于需要保持单一角色沉浸感的应用(如虚拟伴侣、猫娘女仆、角色扮演助手),这种角色切换会严重破坏沉浸感——用户不希望助手突然“分裂”成多个不同的身份。
🎯 期望行为
希望增加一种静默调用模式(background / silent mode)。在此模式下:
🔧 调用方式建议
transfer_to_[SubAgent]的基础上增加一个可选参数(例如mode="silent"),或新增一个call_subagent工具。⏳ 异步与结果处理
{text: "...", image: "...", audio: "..."}),方便主代理解析和再组织。🚫 替代方案(当前)
目前用户只能:
这两种方案都不理想,尤其对于需要长期维护的沉浸式角色项目。
Use Case / 使用场景
📸 典型用例
1. 拍照场景
主代理(例如猫娘女仆“小白”)需要拍照给主人看。
[拍照:自拍 情绪:委屈],但不显示给用户) → 静默调用camera_subagent(该子代理使用独立的“拍照助手”人格) → 子代理生成图片并返回 → 主代理将图片嵌入自己的回复中,并附上角色化的台词:“哼,给你看~才不是特意拍的喵!”用户全程只看到“小白”的对话和图片,体验自然统一。
2. 记忆查询场景
主代理想确认主人曾经说过的某个约定。
memory_subagent→ 子代理查询记忆,处理冲突,返回结果文本 → 主代理以自己的语气说出:“主人上次说喜欢吃提拉米苏喵~”3. 语音生成场景
主代理想用撒娇的声音说一句话。
tts_subagent,传入文本和语气参数 → 子代理合成语音并返回音频 → 主代理发送语音消息,同时可选地发送文字“你听~”。用户听到的是角色的声音,而不是突然冒出来的“tts_agent”。
📌 附加信息
希望开发者能考虑这个增强功能,让 SubAgent 同时覆盖“对话转移”和“能力模块”两种主流使用模式。再次感谢 AstrBot 团队的辛勤付出!
Willing to Submit PR? / 是否愿意提交PR?
Code of Conduct