使用场景
探索 Dynamic Context 的实际用例,并了解它如何提升对话中的角色响应性、相关性和上下文感知能力。
初级
个性化对话
using System.Collections;
using System.Linq;
using Convai.Scripts;
using UnityEngine;
/// <summary>
/// 在会话开始时将玩家身份注入当前 Convai 会话。
/// 角色会在第一次交流前接收此上下文,并且可以
/// 无需在控制台中重新配置即可按名字和职业问候玩家。
/// </summary>
public class PlayerGreeting : MonoBehaviour
{
[SerializeField] private string _playerName = "Aria";
[SerializeField] private string _playerClass = "Ranger";
private ConvaiRoomManager _roomManager;
private IEnumerator Start()
{
while (ConvaiRoomManager.Instance == null)
yield return null;
_roomManager = ConvaiRoomManager.Instance;
while (!_roomManager.IsConnectedToRoom)
yield return null;
// runLlm: "true" 会立即触发角色回复。
// 在发送前必须准备好完整音频管线——等待
// 仅 IsConnectedToRoom 不足够。机器人参与者加入,
// 发布其音轨,并且 AudioStream 会在房间连接后
// 异步初始化。在这三个阶段都完成之前发送
// 会导致 TTS 回复被静默丢弃。
while (_roomManager.NpcToParticipantMap == null ||
!_roomManager.NpcToParticipantMap.Values.Any(d => d.AudioStream != null))
{
yield return null;
}
SendGreeting();
}
private void SendGreeting()
{
string context =
$"你正在与 {_playerName} 交谈,他是一级 {_playerClass}。 " +
"热情地问候他们,并欢迎他们来到这个世界。";
// 替换——确保不会沿用上一次会话中的旧上下文。
// runLlm: true——立即触发问候回复。
bool sent = _roomManager.UpdateDynamicContext(context, mode: "replace", runLlm: "true");
if (!sent)
Debug.LogWarning("[PlayerGreeting] UpdateDynamicContext 返回 false。");
}
}注入学习者资料
模块进阶
语言导师熟练度等级
注入情绪状态
中级
响应式游戏状态
静默事件积累
基于表现的辅导难度
分支式合规场景状态
医疗模拟患者生命体征监测器
高级
跨场景能力缺口追踪器
跨场景使用:
实时程序化评估
具有自主响应阈值的响应式角色
最后更新于
这有帮助吗?