当前 Agent 模式活跃
C++ Subsystem 直连
第二章:怎么对话(4 种内置 Agent 模式)
在虚幻编辑器右侧内置的 UMG MCP 对话面板中,AI 的对话并不是单一死板的。基于不同的场景与开发阶段,本插件在 C++ 底层划分了 chat, develop, learning, task 四种精密的 Agent 对话状态。
1. 四大 Agent 运作机理与 C++ 机制
Chat 模式 (默认会话 Agent - FUmgMcpDefaultChatAgent)
Chat
定位: 通用的上下文感知对话,适合基础的技术交流、方案推演与概念澄清。
C++ 运转机理: 每次开始提问互动时,调用 RestoreConversationContext(),从当前的本地会话持久化存储中,完整拉取上一轮互动的 Substance(历史 JSON 消息快照),作为本轮提问的历史前缀提交至 LLM 供应商,保证上下文不丢失。
Develop 模式 (动态开发 Agent - FUmgMcpDevelopAgent)
Develop
定位: 高情境感知的 UI 编写与修改模式,专注于高精度的 UI 操纵与控件生成。
C++ 运转机理: 在触发互动时,会调用独有的 DynamicallyUpdatePromptAndTools()。它检测虚幻编辑器当前正在编辑的活跃 UI 资产,动态重构当前会话的 System Instruction(系统提示词),并根据当前被激活选中的控件类型,动态过滤允许调用的 MCP 工具列表。例如,只选中 CanvasPanel 时才暴露出 Canvas Slot 相关的偏置调整工具,极大收窄了 AI 的生成边界,提高了工具调用的成功率。
Learning 模式 (只读感知 Agent - FUmgMcpLearningAgent)
Learning
定位: 对复杂的已有 UMG 控件树进行只读式深度剖析、结构感知与教学引导。
C++ 运转机理: 插件会自动在后台加载内置的 learning.json 工具配置。在每次接收提问时,它调用 ResolveTargetAndTreeContext() 进行无冗余优化设计:实时计算并对比当前编辑器视口中控件树的 Hash 值。**只有**当您手动修改了 UI 导致 Hash 发生物理改变时,它才会将最新的树结构重新打包成上下文发送;若无修改,则继续复用之前的只读缓存,从物理上杜绝了对同一个 UMG 树进行重复网络查询带来的巨大 Token 开销与响应卡顿。
Task 模式 (任务接管 Agent - FUmgMcpTaskAgent)
Task
定位: 执行有始有终的、具备强一致性与完整保护的安全独立开发任务包。
C++ 运转机理: 任务接管流的逻辑具备极高的工程严密性。当 AI 从会话中接收到特殊的 task_begin 工具调用时,触发 AcceptTask(),它会将您编辑器当前的活跃编辑资产路径(如 `PreviousWidget`)强制暂存至私有变量 CapturedPreviousTarget 中,并把当前任务专属的 UMG 资产强行推上舞台供 AI 独立编辑,在此期间物理屏蔽任何其他杂乱输入。直到接收到对应的终止命令 task_end 工具调用时,触发 TaskEnd(),释放资产锁定并完美的把您编辑器的编辑目标物归原主,物还原貌。
🎨 内置 Chat UI 审批工作流 (Sslate/Slate 交互)
当内置 Agent 在对话中试图发起任何可能会修改您 UMG 资产的动作时(例如“创建一个按钮”或“删除一个布局”),插件底层的 SUmgMcpMcpApprovalQueue (审批队列) 控件就会立即在消息气泡中以高亮卡片的形式挂载。
💡 对话交互体验流程:
- 发出提问:您在底栏输入:
“在 Canvas 下帮我新建一个名为 WinyunqButton 的按钮”。 - AI 析出动作:内置 Agent 回复,并将工具执行动作(如
create_widget)以卡片形式静默投递到您的聊天时间轴中。 - 呈现 Accept / Reject 按钮:气泡卡片底部呈现蓝色的
Accept (接受)和灰色的Reject (拒绝)按钮。 - 内存直连执行:当您点击
Accept后,动作会绕过任何网络接口直接被投向FFabServerHttpClient::ExecuteTool并以极速内存直连的方式在虚幻主线程瞬间生成完毕,并在右侧视口立即刷新,给您极致丝滑的“手势化智造”开发体验!
📸 物理截图占位
[IMAGE_PLACEHOLDER: Unreal UMG MCP Built-in Chat Panel Window Layout]
请截图虚幻编辑器右侧停靠的 UMG MCP 对话面板窗口(包含底栏 Selector),以展示 chat/develop/learning/task 选择状态。