For the complete documentation index, see llms.txt. This page is also available as Markdown.

场景元数据使用示例

为训练模拟、工业演练、军事基地和 Unreal Engine 中的运行时环境更新完成场景元数据设置。

下面的示例涵盖了用于训练模拟和交互式体验的真实设置。每个示例都描述了场景、所需的 Details 面板或 Blueprint 配置,以及预期的运行时结果。请从与你当前复杂度级别相匹配的示例开始。

示例 1:医学训练模拟 — 解剖实验室

场景: 一个外科训练模拟,医务讲师 NPC 引导学员完成解剖实验室的学习。角色必须识别并描述房间中的实体模型和设备——学员会提出诸如以下问题 “这是什么器官?”“主动脉在哪里?”

设置

此示例无需 Blueprint 脚本。向 UConvaiObjectComponent 添加到每个解剖模型和设备 Actor 在关卡中。在 Details 面板中,将 名称 是位于 说明 字段设置到 ObjectEntry:

名称
说明

HeartModel

“位于中央检查台上的真人大小解剖心脏模型。显示四个心腔和主要血管。”

LiverModel

“安装在展示架左侧的成人肝脏模型。肝静脉采用颜色编码。”

SurgicalScalpel

“放在器械托盘上的标准外科手术刀。手柄为蓝色。”

Stethoscope

“挂在检查台旁边挂钩上的听诊器。”

讲师角色会在会话开始时接收所有描述,因此关于房间的问题可以使用实际场景条目作为上下文。

示例 2:工业安全演练 — 基于阶段的对象感知

场景: 一个包含多个演练阶段的安全培训模块。每个阶段都会引入不同的危险和设备。当阶段道具在会话开始后才加入时,运行时对象更新会很有用。

设置

使用 ClearObjects 是位于 AddObject 在每个阶段加载时对 chatbot 组件调用。传入 bFlushImmediately = true 作为最后一次调用,以将所有待处理更新合并为一条消息。

// C++ — 切换到新的演练阶段时,在 chatbot 组件上调用
void ASafetyDrillManager::LoadPhase(int32 PhaseIndex)
{
    // 移除上一阶段的所有对象
    ChatbotComponent->ClearObjects(false);

    // 仅添加当前阶段的道具
    const TArray<FConvaiObjectEntry>& PhaseEntries = PhaseProps[PhaseIndex];
    for (int32 i = 0; i < PhaseEntries.Num(); ++i)
    {
        bool bFlush = (i == PhaseEntries.Num() - 1); // 在最后一项时刷新
        ChatbotComponent->AddObject(PhaseEntries[i], bFlush);
    }
}

在 Blueprint 中,连接 Clear Objects (立即刷新: false)然后接一个或多个 Add Object 节点,并将 Flush Immediately 设置为 true 最后一个节点上的值。

这种模式会通过运行时环境更新路径发送新的阶段道具。如果某个阶段对象已经包含在 action_config 位于 /connect中,请在阶段开始前重新连接,以便下一次会话以正确的对象集开始。

示例 3:军事模拟 — 具有实时门状态的前线作战基地

场景: 一个军事训练模拟,战术军官了解前线作战基地的布局。安保门具有实时访问状态,门状态变化应作为被跟踪状态发送给 Convai。

设置

添加一个 UConvaiObjectComponent 添加到每个结构和安保门 Actor。对于静态结构,只需要 名称 是位于 说明 。对于安保门,还要添加一个跟踪属性:

  1. 展开 Tracked Properties 并点击 +.

  2. 单击 Bind 旁边的 Property Path 并选择 bIsOpen 来自门的 Actor.

  3. 设置 说明“安保门当前是否打开。”.

  4. 设置 ShouldRespond始终.

名称
说明

CommandPost

“位于 Alpha-7 网格坐标的主要指挥所。容纳任务简报室和通信设备。”

Armoury

“东侧外围的军械库建筑。仅限授权人员进入。”

NorthGate

“北侧安保门。控制前线作战基地的车辆和人员进出。”

bIsOpen 上的 NorthGate Actor 属性在运行时发生变化时,插件会在跟踪属性轮询中检测到该变化,并调度一次带有 ShouldRespond 设置为 始终.

示例 4:跟踪带有按值描述的枚举

场景: 一个企业入职模拟包含服务器机房终端,其 ETerminalState UPROPERTY 会在以下状态间循环 Offline, Standby,以及 Active。引导者应为每个枚举值的含义提供通俗语言的上下文。

设置

  1. Bind TerminalState 作为一个跟踪属性。

  2. 设置 说明“服务器终端当前的运行状态。”.

  3. 展开 State Value Descriptions (显示在 Details 面板中的 高级 下方)并添加三行:

说明

“Offline”

“终端没有电源。”

“Standby”

“终端有电但处于空闲状态。”

“Active”

“终端正在处理请求。”

状态值描述会合并进对象的会话开始描述中,而运行时变化会发送当前原始枚举值。这样 Convai 同时拥有来自 action_config 的值上下文以及来自动态上下文更新的当前状态。

示例 5:在会话开始时动态填充环境

场景: 一个程序生成的训练设施,每次会话房间布局都会变化。AI 讲师的对象感知必须基于运行时世界查询构建,而不是来自 Details 面板中的固定列表。

设置

重写 GatherEnvironmentExtrasUConvaiChatbotComponent的 Blueprint 子类中。此事件会在 StartSession() 内部运行一次,在 /connect 握手之前,因此在这里添加的每个条目都会包含在冻结的 action_config 快照中。

OutExtraObjects 会与已配置的 EnvironmentData.Objects 列表合并,然后再 action_config 发送。名称相同的条目会替换合并后环境中的较早条目。

示例 6:为背景道具禁用接近状态

场景: 一个博物馆导览模拟使用一幅大型彩绘壁画,横跨每个展厅的整面后墙。这幅壁画对对话具有上下文价值,但为固定背景生成每个 chatbot 的接近值会产生不必要的网络流量。

设置

添加一个 UConvaiObjectComponent 向壁画 Actor 并设置:

  • 名称: “HistoryMural”

  • 说明: “描绘机构历史的大型彩绘壁画,覆盖每个展厅的整面后墙。”

  • Auto Generate Proximity State (bAutoGenerateProximityState):已禁用。

引导者可以接收壁画的对象描述,但插件不会为其计算或广播接近数据。对于任何与 chatbot 空间关系无关的大型固定道具,都可以使用此模式。

下一步

场景元数据故障排查场景元数据组件参考场景元数据如何工作运行时管理环境

最后更新于

这有帮助吗?