跳到主要内容

如何使用该插件

本指南涵盖完整的运行时API:创建LLM实例、加载模型、发送消息、运行时下载模型、状态管理以及实用函数。

创建一个LLM实例​

首先创建一个Runtime Local LLM对象。保持对该对象的引用(例如,在蓝图中作为变量,或在C++中作为UPROPERTY),以防止过早的垃圾回收。

Create Runtime Local LLM

加载模型​

在发送消息之前,您必须加载模型。该插件根据您的工作流程提供了多种加载方法。

按名称加载​

如果你通过编辑器设置面板管理模型,请使用Load Model (By Name)。

在 UE 5.4 及更高版本中,Load Model (By Name) 会显示磁盘上所有模型的下拉列表——只需选择要加载的模型即可。

Load Model By Name UE 5.4+

从文件路径加载​

直接从绝对文件路径加载一个 .gguf 模型文件:

Load Model From File

从URL加载(下载并加载)​

从URL下载模型(若本地磁盘尚未存在)并自动加载。若文件已存在于本地,则跳过下载步骤。

最简单的变体仅需一个URL——元数据从文件名中提取:

Load Model From URL Simple

你也可以使用 Load Model From URL 并附带完整的模型元数据,以获取更丰富的模型信息:

Load Model From URL

异步加载(蓝图)​

为了通过输出引脚处理加载完成和错误,而无需手动绑定委托,提供了两个异步节点。

Load Model By Name (Async) 与 Load Model (By Name) 功能一致——在 UE 5.4+ 中,它会显示一个下拉菜单,列出磁盘上的所有模型。

Load Model By Name Async UE 5.4+

Load Model From File (Async) 接受绝对文件路径作为输入:

Load Model From File Async

绑定事件​

绑定到LLM实例的委托以接收回调。所有回调均在游戏线程上触发。

Bind Events

可用的委托:

  • 生成令牌时:每输出一个令牌时触发
  • 生成完成时:完整响应就绪时触发,包含持续时间、令牌数量和每秒令牌数
  • 提示处理完成时:输入提示处理完成后、生成开始前触发
  • 出错时:任何操作发生错误时触发
  • 模型加载完成时:模型加载完毕时触发
  • 模型卸载完成时:模型被卸载时触发
  • 下载进度更新时:模型下载期间周期性触发(进度比例、已接收字节数、总字节数)
  • 模型下载完成时:仅下载操作完成时触发
  • 对话保存完成时:对话已写入JSON文件时触发
  • 对话加载完成时:从文件或内存快照加载对话时触发
  • 历史记录摘要完成时:自动摘要压缩旧消息时触发(报告消息数量、节省的令牌数和摘要内容)

发送消息​

模型加载完成后,发送用户消息以生成响应:

Send Message

要覆盖特定消息的系统提示,请使用 Send Message With System Prompt:

Send Message With System Prompt

当生成令牌时,它们会通过 OnTokenGenerated 事件流式输出。生成完成后,OnGenerationComplete 事件会触发,并返回完整响应、持续时间、令牌数量以及每秒令牌数。

异步发送消息(蓝图)​

Send LLM Message (Async) 节点为令牌、完成状态和错误提供了专用的输出引脚:

Async Send Message

在运行时下载模型​

除了上述的下载并加载流程外,您还可以将模型下载到磁盘而不加载它。这在加载界面或设置菜单中预缓存模型时非常有用。

Download Model

仅提供 URL 的变体也可用:

Download Model From URL

下载LLM模型(异步)和从URL下载LLM模型(异步)节点提供了用于进度、完成和错误的输出引脚:

Async Download Model

OnDownloadProgress 委托在下载过程中报告进度。OnModelDownloaded 在文件保存到磁盘时触发。

要取消正在进行的下载:

Cancel Download

该插件会自动防止重复下载——如果同一模型的下载任务正在进行中,后续的调用请求将被忽略。

停止生成​

要中断正在进行的生成:

Stop Generation

重置对话上下文​

清除对话历史以开始新对话:

Reset Context

保存和加载对话​

该插件可将对话历史以JSON格式持久化到磁盘,或作为快照保留在内存中。默认情况下,系统提示词不包含在保存内容中,因此同一段对话历史可加载到具有不同系统规则的不同LLM实例中。这对于多NPC场景非常实用——每个角色拥有独立记忆,但系统指令可以共享或差异化。

保存到文件​

将当前对话保存到磁盘上的 JSON 文件中:

Save Conversation To File

Include System Prompt 参数控制系统消息(如果存在)是否写入文件。默认值为 false,以确保在不同 NPC 之间具有可移植性。

On Conversation Saved 在文件写入时触发。

从文件加载​

从 JSON 文件加载对话记录:

Load Conversation From File

保留当前系统提示参数(默认值为true)可在替换已保存对话历史的同时,保持当前加载的系统提示不变。这是NPC记忆交换的推荐设置。

On Conversation Loaded 在加载快照时触发。

内存快照(多NPC工作流)​

为了在游戏过程中快速切换NPC,请将当前对话快照保存到内存中,而非写入磁盘。这种模式是管理多个NPC共享单个已加载模型的推荐方式:

典型的多NPC模式会在NPC管理器或游戏状态中使用一个名称 → LLM对话快照的映射表:

  1. 切换离开NPC时:调用 Save Conversation To Memory,然后在 On Conversation Loaded(该事件也会在快照传递时触发)中,将快照以NPC名称为键存储到你的映射中。
  2. 切换至另一个NPC时:从你的映射中读取快照,并调用 Load Conversation From Memory,同时启用 Preserve Current System Prompt。

Multi NPC Pattern

由于系统提示在切换过程中保持加载状态,每个NPC的“个性”既可以通过每个NPC独立的系统提示进行编码(在切换后调用一次Send Message With System Prompt来更新),也可以在所有NPC之间共享。

提示

快照与模型无关——它们存储的是消息,而非KV缓存状态。同一份快照可以加载到不同的模型中(尽管对话风格可能会发生变化)。快照中的OriginModelFamilyName字段可让您查看生成该快照的模型,以便在需要时强制兼容性。

自动上下文摘要​

长对话最终会超出模型的上下文窗口,通常会导致历史记录被截断或引发错误。该插件的自动摘要功能会监控上下文使用情况,当超过预设阈值时,会在生成下一条回复前将较早的消息总结为一条"记忆"消息。这使得令牌成本和延迟在无限长的对话中保持稳定。

摘要由同一加载的模型执行,因此无需第二个模型或API调用。

启用自动摘要​

Enable Auto Summarization

使用 获取默认摘要配置 获取合理的初始默认值,然后根据需要进行调整:

Get Default Summarization Config

启用后,摘要功能会在每次 SendMessage 调用前自动运行(如有需要),无需额外操作。

提示

默认情况下,自动摘要会在处理新消息前运行,因为它需要重建上下文,而这一过程无法与生成回复同时安全进行。若希望改为在回复生成后、玩家阅读和输入时执行,可禁用自动摘要并手动触发:绑定到On Generation Complete,将Get Used Context Length与阈值对比,若超出则调用Summarize Now。由于Summarize Now会加入同一后台任务队列,它将在回复完成后、下一条消息处理前立即执行。

配置参考​

参数Type默认描述
触发令牌阈值int321500当使用的上下文令牌超过此值时,将运行摘要功能。请根据您的上下文大小设置此值,通常建议设为上下文大小的60-75%左右。
保留最近消息数量int324最近的 N 条消息不会被总结,以保持即时对话的连贯性。
最少消息数以进行总结int326如果符合条件的旧消息数量少于这个值,则跳过摘要生成(避免生成无意义的小摘要)。
最大摘要令牌数int32256生成的摘要最大长度(以令牌计)
保留系统提示booltrue始终保留系统消息(索引0)不变
摘要说明FString(see default)用于生成摘要的模型指令
摘要消息前缀FString"[先前对话的长期记忆摘要]:"当生成的摘要作为助手角色的记忆消息插入对话时,会在其前面添加以下内容:

手动触发与监听摘要​

您可以随时手动触发摘要生成,不受阈值限制:

Summarize Now

绑定到 On History Summarized,以便在摘要处理完成时收到通知。该事件会报告已移除的消息数量、节省的令牌数以及生成的摘要文本,可用于在聊天界面中显示微妙的提示指示器。

On History Summarized

查询已使用的上下文长度​

使用 获取已用上下文长度 来检查模型上下文窗口中当前占用了多少令牌。该值与内置自动摘要触发器检查的 触发令牌阈值 相同。

Get Used Context Length

禁用自动摘要​

Disable Auto Summarization

禁用不会撤销已应用于对话的摘要。

备注

摘要生成会在后台线程上运行一段时间(模型正在生成摘要)。在此内部生成过程中,令牌流回调会被抑制,因此不会出现在您的聊天界面中。On History Summarized 会在拼接完成后触发。

卸载模型​

当模型不再需要时释放资源:

Unload Model

查询状态​

检查 LLM 实例的当前状态:

Query State

  • 模型已加载:如果模型已准备好进行推理,则为真
  • 正在生成:如果生成正在进行中,则为真
  • 忙碌中:如果任何操作(加载、生成、下载)处于活动状态,则为真
  • 正在下载:如果模型下载正在进行中,则为真
  • 获取已加载模型元数据:返回当前模型的元数据
  • 获取已应用的推理参数:返回加载时应用的参数

模型库功能​

提供了一组静态工具函数,用于管理磁盘上的模型文件。这些函数有助于构建模型选择界面或在运行时检查模型可用性。

获取已下载的模型名称/元数据​

Get Downloaded Model Names

Get All Downloaded Model Metadata

检查模型是否在磁盘上​

Is Model On Disk

获取模型文件路径​

Get Model File Path

删除模型文件​

Delete Model Files

获取预定义和可用模型​

Get Predefined Models

Get All Available Models

从URL构建元数据​

从原始URL构建模型元数据(字段从文件名中提取):

Make Metadata From URL

工具函数​

提供了一组辅助函数,用于格式化和错误显示。

字节转换为可读字符串​

将字节数转换为人类可读的字符串(例如 "4.07 GB")。适用于在 UI 中显示模型大小。

Bytes to Readable String

格式下载进度​

格式化下载进度字符串,例如"1.23 GB / 4.07 GB (30.2%)"。如果总大小未知,则仅返回已接收的数据量。

Format Download Progress

获取错误描述 / 错误代码字符串​

Get LLM Error Description 返回错误代码的人类可读文本描述。Get LLM Error Code String 返回枚举值名称的字符串形式(适用于日志记录)。

Get Error Description

错误代码参考​

Code价值描述
未知0未指定的错误
模型加载失败10GGUF 文件加载失败(文件损坏、格式不兼容等)。
上下文创建失败11创建推理上下文失败
模型未加载20尝试推理时未加载任何模型。
聊天模板失败21模型的聊天模板应用失败。
TokenizationFailed22无法对输入文本进行分词处理。
上下文溢出23提示词加上上下文超出了配置的上下文大小。
提示解码失败24提示词令牌解码失败。
上下文过长无法生成25剩余上下文空间不足,无法生成输出。
生成解码失败30生成过程中,一个令牌解码失败。
生成截断31生成已停止,因为已达到最大令牌限制。
LLMInstanceNull40LLM 实例为空或无效。
ModelNotFoundOnDisk41模型文件在预期路径下不存在。
模型URL为空42请求下载时提供了空的URL。
模型下载已取消43下载已取消。
模型下载空数据44下载已完成,但响应内容为空。
模型下载保存失败45下载已完成,但文件无法保存到磁盘。