流式渲染、物理指标结算与结构化指令消费
sequenceDiagram
participant K as Plugin Kernel
participant GT as Game Thread (UI)
Note over K: Token 碎片产出
K->>GT: OnChunk(FString) [Auto Marshalling]
GT->>GT: 更新 UMG 打字机
Note over K: 推理完整结束
K->>GT: OnDone(Result Object)
GT->>GT: 解析 ToolCalls 驱动业务
GT->>GT: 格式化 Latency/TPS 统计
监听字符碎片,实现 0 等待的视觉反馈。
// 在 WinyunqDialogueWidget 中消费
void OnChunk(const FString& Chunk) {
CurrentText += Chunk;
Text_Block->SetText(FText::FromString(CurrentText));
}
从结算单中提取 AI 的“思考产物”并驱动游戏逻辑。
// 在 OnDone 中解析动作
for (auto Call : Result.ToolCalls) {
if (Call->Name == "OpenDoor") { ExecuteOpenDoor(Call->Params); }
}
向用户展示推理速度与延迟。
// 提取物理结算数据
float TPS = Result.TokensPerSec;
float Latency = Result.TimeMs;
AI 是一粒一粒丢出 Token 的。插件自动将这些碎片从后台线程 Marshalling 到 GameThread,确保 UI 操作的安全性。
如何让 AI 只输出 JSON?通过 Logits 概率强约束,我们将 AI 的“废话”过滤掉,只保留合法的工具调用指令。