动态上下文
了解 Dynamic Context 如何支持更相关、更自适应且更具上下文感知能力的 AI 角色交互。
简介
Convai 角色有两层上下文:
角色层级 — 背景故事、性格和行为规则。在 Convai 仪表板中配置,且会在所有会话中保留。
会话层级 — 仅与当前交互相关的信息:玩家是谁、刚刚发生了什么、当前游戏状态。
动态上下文是 Convai Unity SDK 的运行时功能,可让你的游戏在对话进行中向 Convai AI 角色推送临时的、会话专属的信息。不同于在 Convai 仪表板中配置的角色固定背景故事,动态上下文是在运行时注入的,且是临时的——它只在当前会话期间存在。
用它来弥合你的游戏世界与 AI 之间的差距:告诉角色刚刚发生了什么、玩家是谁、他们携带了什么、他们在哪里,或任何其他应该影响角色回复但又不想硬编码到提示中的信息。
工作原理
当你调用 UpdateDynamicContext,SDK 会序列化一个 context-update 消息,并通过当前会话的数据通道将其发送到 Convai 后端。后端接收该更新,并在处理下一条用户发言之前,将新信息整合进角色的活动上下文窗口。
流程如下:
你的游戏代码
│
▼
IConvaiRoomConnectionService.UpdateDynamicContext(text, mode, runLlm)
│
▼
已序列化的上下文更新消息通过会话数据通道发送
│
▼
Convai 后端 → LLM 上下文窗口这是一个 一次性发送、仅出站 操作。上下文更新本身不会有直接响应——其效果会体现在角色下一次的口头回复中。
关键概念
在编写任何代码之前,先了解这三个参数,它们控制着每一次 UpdateDynamicContext 调用设置。
text
text你希望角色知晓的内容。这是一个普通字符串——可以是一句话、一个结构化段落,或者按你喜欢的任何方式格式化的键值数据。
text 为 必填 关于 append 和 replace 模式。当使用 reset mode 时,它会被忽略。
mode
mode控制新文本如何应用到角色现有的临时上下文中。
append
添加 text 到任何现有临时上下文中。之前的条目会保留。
渐进式信息——随着会话展开逐步添加事实。
replace
丢弃当前所有临时上下文,并将其完全替换为新的 text.
一个干净的状态切换——进入新场景、开启新章节。
reset
清除所有运行时临时上下文。 text 会被忽略。初始动态信息不受影响——它会在整个会话期间保持固定。
在保留会话级固定上下文的同时重置已累积的运行时上下文。
默认: "append"
runLlm
runLlm在上下文更新后是否触发一次 LLM 推理。
auto
服务器会根据其内部流水线状态决定。推荐用于大多数场景。
true
在上下文更新后始终立即触发 LLM 回复。
false
静默更新上下文——不会触发 LLM 回复。
默认: "auto"
使用 "false" 当你批量进行多个上下文更新,并且只希望 LLM 在最后一次之后才回复时使用。使用 "true" 当上下文更新本身就应该促使角色做出反应时使用。
mode
mode控制新文本如何应用到角色现有的临时上下文中。
append
添加 text 到任何现有临时上下文中。之前的条目会保留。
渐进式信息——随着会话展开逐步添加事实。
replace
丢弃当前所有临时上下文,并将其完全替换为新的 text.
一个干净的状态切换——进入新场景、开启新章节。
reset
清除所有 运行时 临时上下文。 text 会被忽略。 初始动态信息不受影响 ——它会在整个会话期间保持固定。
在保留会话级固定上下文的同时重置已累积的运行时上下文。
默认: "append"
初始动态信息
UpdateDynamicContext 并不是向角色提供会话级上下文的唯一方式。该 ConvaiCharacter 组件还提供了第二层,其在整个会话期间保持固定: 初始动态信息.
这是在 Unity Inspector 中对以下项进行配置的: ConvaiCharacter 组件中的 SESSION 部分:
启用 将初始动态信息保留在上下文中 ——此开关控制下方文本是否会包含在连接请求中,并由服务器在整个会话中固定。
启用后, 动态信息(连接请求) 字段会出现。请在 初始动态信息文本.

不同于 UpdateDynamicContext初始动态信息
关键区别: reset mode 中的 UpdateDynamicContext 不会 上的初始动态信息文本 清除初始动态信息。它只会重置运行时临时层。固定的初始文本在整个会话期间始终保持有效,不受你发送的任何上下文更新影响。
各自何时使用
通过以下方式设置:
Unity Inspector(ConvaiCharacter)
代码(UpdateDynamicContext)
发送时间
在房间连接时,且在会话开始之前
在活跃会话期间的任何时候
可变
否——在整个会话中固定
是——可随时追加、替换或重置
清除方式 reset
否
是
用于
稳定的会话配置:角色职责、场景规则、固定指令
变化中的游戏状态、玩家数据、事件、情绪
对于在会话期间绝不应更改的上下文——角色指令、场景设置、固定规则——请使用初始动态信息。对于 UpdateDynamicContext 会随着会话推进而变化的所有内容,请使用。
访问 API
动态上下文通过以下方式公开: IConvaiRoomConnectionService,通过以下方式获取: ConvaiManager。根据谁负责连接生命周期,存在两种不同模式。
模式 A——自包含
当组件负责自身初始化时使用。通常用于会话开始场景,此时一旦连接就绪就必须立即发送上下文。
模式 B——注入
当会话协调器或上层系统负责提供已连接的服务时使用。组件在调用其公共方法时,默认该服务有效。
UpdateDynamicContext 返回 false 如果会话未连接。务必检查返回值。
API 参考
text
字符串
是(除非重置)
—
要注入的上下文文本。
mode
字符串
否
"append"
如何应用文本: "append", "replace",或 "reset".
runLlm
字符串
否
"auto"
是否触发 LLM 回复: "true", "false", "auto".
返回: true 如果消息已发送到传输层; false 如果会话未连接。
mode
mode控制新文本如何应用到角色现有的临时上下文中。
append
添加 text 到任何现有临时上下文中。之前的条目会保留。
渐进式信息——随着会话展开逐步添加事实。
replace
丢弃当前所有临时上下文,并将其完全替换为新的 text.
一个干净的状态切换——进入新场景、开启新章节。
reset
清除所有 运行时 临时上下文。 text 会被忽略。 初始动态信息不受影响 ——它会在整个会话期间保持固定。
在保留会话级固定上下文的同时重置已累积的运行时上下文。
默认: "append"
动态上下文与相关功能
动态上下文
UpdateDynamicContext
临时(运行时)
否
运行时事实:玩家状态、游戏事件、情境感知。
初始动态信息
ConvaiCharacter 检查器
临时(会话开始时固定)
否
固定会话指令:场景规则、角色职责、稳定设置。不受 reset.
动态信息
SendDynamicInfo
每条消息
否
附加到特定用户发言上的内联上下文。
模板键
UpdateTemplateKeys
会话
否
解析命名占位符({PlayerName})在叙事设计文本中的值。
场景元数据
UpdateSceneMetadata
会话
否
供后端上下文锚定流程使用的场景结构化数据。
仪表板背景故事
Convai 控制台
永久
是
角色性格、世界观设定、固定行为规则。
常见陷阱
在会话连接前调用
UpdateDynamicContext返回false并静默丢弃更新。请使用协程或订阅IConvaiRoomConnectionService.Connected以将上下文注入延迟到会话上线后。使用
append无限期地 每个append会扩展上下文窗口。在长会话中,这会降低回复连贯性并增加延迟。请使用replace定期使用,或者采用DynamicContextManager模式。发送
text与resetmodetext在以下情况下会被忽略:mode为"reset"后,在聊天机器人组件上执行。null显式使用,以使意图更清晰。期待同步效果 动态上下文在端到端上是异步的。在下一次 LLM 推理之前,角色不会知道这次更新。不要设计假定会立即生效的逻辑。
过度使用
runLlm: "true"每次更新都强制立即回复会产生对话噪音。只在确实需要角色反应的时刻使用它。
快速参考
结论
动态上下文是你的游戏或应用的实时状态与 AI 角色对其理解之间的桥梁。角色的永久配置——性格、背景故事、行为规则——会稳定保留在 Convai 仪表板中。所有属于这个会话、这个用户以及这个时刻的内容都会通过 UpdateDynamicContext.
该 API 的设计刻意保持简洁:一个方法,三个参数。真正的巧思在于你如何使用它——无论是在会话开始时个性化对话、在会话中途对阈值变化做出反应、静默累积事件直到它们值得评论,还是在整个训练会话中跟踪能力缺口。
需要牢记的几个原则:
静默更新是默认姿态。 使用
runLlm: "false"用于状态同步。将runLlm: "true"留给真正值得角色回应的时刻。将上下文窗口视为一种资源。 无界的
append会随着时间推移降低质量。请在replace自然边界处使用——如场景切换、模块变更、会话重置。你的应用拥有状态。角色接收状态。 动态上下文就是清晰地实现这种分离的机制。
需要帮助? 如有疑问,请访问 Convai 开发者论坛.
最后更新于
这有帮助吗?