Перейти к основному содержимому

Как использовать плагин

Это руководство охватывает полный API времени выполнения: создание экземпляра LLM, загрузка моделей, отправка сообщений, загрузка моделей во время выполнения, управление состоянием и вспомогательные функции.

Создайте экземпляр LLM

Начните с создания объекта Runtime Local LLM. Сохраните ссылку на него (например, как переменную в Blueprints или UPROPERTY в C++), чтобы предотвратить преждевременную сборку мусора.

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

Асинхронная загрузка (Blueprint)

Для обработки завершения загрузки и ошибок через выходные пины вместо ручного привязывания делегатов доступны два асинхронных узла.

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, предоставляя полный ответ, длительность, количество токенов и токенов в секунду.

Асинхронная отправка сообщения (Blueprint)

Узел Send LLM Message (Async) предоставляет выделенные выходные контакты для токенов, завершения и ошибок:

Async Send Message

Загрузка моделей во время выполнения

Помимо описанного выше потока загрузки и выгрузки, вы можете скачать модель на диск без её загрузки. Это полезно для предварительного кэширования моделей на экране загрузки или в меню настроек.

Download Model

Доступен также вариант только с URL-адресом:

Download Model From URL

Узел Download LLM Model (Async) и Download LLM Model From URL (Async) предоставляют выходные контакты для отслеживания прогресса, завершения и ошибок:

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

Параметр Preserve Current System Prompt (по умолчанию true) сохраняет текущий системный промпт без изменений при замене на сохранённую историю диалога. Это рекомендуемая настройка для замены памяти NPC.

On Conversation Loaded срабатывает с загруженным снимком.

In-Memory Snapshots (Multi-NPC Workflow)

Для быстрой смены NPC во время игры сохраняйте текущий разговор в памяти, а не записывайте на диск. Этот подход является рекомендуемым способом управления множеством NPC, использующих одну загруженную модель:

Типичный шаблон для нескольких NPC использует Карту Имя → Снимок LLM-диалога в вашем менеджере NPC или состоянии игры:

  1. При переключении с NPC: вызовите Save Conversation To Memory, затем в On Conversation Loaded (который также срабатывает при доставке снимка) сохраните снимок в вашей карте, используя имя NPC в качестве ключа.
  2. При переключении на другого NPC: прочитайте снимок из вашей карты и вызовите Load Conversation From Memory с включенной опцией Preserve Current System Prompt.

Multi NPC Pattern

Поскольку системный промпт остается загруженным при переключении, «личность» каждого NPC может быть либо закодирована в индивидуальном системном промпте (вызовите Send Message With System Prompt один раз после переключения, чтобы обновить его), либо быть общей для всех NPC.

подсказка

Снимки не зависят от модели — они хранят сообщения, а не состояние KV-кэша. Один и тот же снимок можно загрузить в другую модель (хотя стиль разговора может измениться). Поле OriginModelFamilyName в снимке позволяет проверить, какая модель его создала, если вы хотите обеспечить совместимость.

Автоматическое обобщение контекста

Длинные разговоры со временем превышают окно контекста модели, что обычно приводит либо к усечению истории, либо к ошибкам. Функция автоматического суммаризирования плагина отслеживает использование контекста и, когда превышается заданный порог, обобщает старые сообщения в одно «памятное» сообщение перед генерацией следующего ответа. Это позволяет поддерживать стабильные затраты токенов и задержку в разговорах любой продолжительности.

Суммирование выполняется той же загруженной моделью, поэтому второй модели или вызова API не требуется.

Включить авто-суммирование

Enable Auto Summarization

Используйте Get Default Summarization Config для разумных начальных значений по умолчанию, затем настройте по необходимости:

Get Default Summarization Config

После включения суммаризация запускается автоматически перед каждым вызовом SendMessage при необходимости, никаких дополнительных действий не требуется.

подсказка

По умолчанию автосуммирование выполняется перед обработкой нового сообщения, так как ему необходимо перестроить контекст, что нельзя безопасно делать одновременно с генерацией ответа. Если вы предпочитаете, чтобы оно выполнялось после ответа, пока игрок читает и печатает, отключите автосуммирование и управляйте им вручную: привяжитесь к On Generation Complete, проверьте Get Used Context Length на соответствие вашему порогу и вызовите Summarize Now, если он превышен. Поскольку Summarize Now ставится в очередь в том же фоновом потоке задач, он выполнится сразу после завершения ответа и до обработки следующего сообщения.

Справочник по конфигурации

ПараметрTypeПо умолчаниюОписание
Порог триггерного токенаint321500Суммирование запускается, когда количество используемых токенов контекста превышает это значение. Установите его относительно вашего Context Size; хорошим эмпирическим правилом является значение около 60–75%.
Количество последних сообщений для сохраненияint324Последние N сообщений никогда не суммируются, сохраняя непосредственную связность диалога.
Минимальное количество сообщений для суммаризацииint326Пропускать суммаризацию, если доступно меньше этого количества старых сообщений (чтобы избежать бессмысленных крошечных суммаризаций).
Максимальное количество токенов в сводкеint32256Максимальная длина сгенерированного резюме в токенах
Сохранить системную подсказкуbooltrueВсегда сохраняйте системное сообщение (индекс 0) без изменений
Инструкция по суммаризацииFString(see default)Инструкция, отправленная модели для создания сводки
Префикс сообщения сводкиFString"[Краткое содержание долговременной памяти предыдущего разговора]: "Добавляется к сгенерированной сводке при её вставке в диалог в качестве сообщения памяти с ролью ассистента.

Ручной триггер и прослушивание для получения сводок

Вы можете вручную запустить суммаризацию в любой момент, независимо от порога.

Summarize Now

Привяжитесь к On History Summarized, чтобы получать уведомление о завершении прохода суммаризации. Событие сообщает, сколько сообщений было удалено, сколько токенов сохранено и сгенерированный текст сводки, что полезно для отображения ненавязчивого индикатора в интерфейсе чата.

On History Summarized

Запрос используемой длины контекста

Используйте Get Used Context Length, чтобы проверить, сколько токенов в данный момент занято в контекстном окне модели. Это то же значение, с которым сверяется встроенный триггер автоматического суммаризирования по параметру Trigger Token Threshold.

Get Used Context Length

Отключить автоматическое обобщение

Disable Auto Summarization

Отключение не отменяет уже примененные к беседе сводки.

примечание

Суммирование выполняется в фоновом потоке (модель генерирует краткое содержание). Обратные вызовы токенового потока подавляются во время этой внутренней генерации, поэтому они не будут отображаться в вашем интерфейсе чата. On History Summarized срабатывает после завершения сращивания.

Выгрузить модель

Освобождение ресурсов, когда модель больше не нужна:

Unload Model

Состояние запроса

Проверьте текущее состояние экземпляра LLM:

Query State

  • Модель загружена: True, если модель готова к инференсу
  • Идет генерация: True, если генерация выполняется
  • Занято: True, если выполняется любая операция (загрузка, генерация, скачивание)
  • Идет скачивание: True, если выполняется скачивание модели
  • Получить метаданные загруженной модели: Возвращает метаданные текущей модели
  • Получить примененные параметры инференса: Возвращает параметры, примененные при загрузке

Функции библиотеки моделей

Предоставляется набор статических служебных функций для управления файлами моделей на диске. Они полезны для создания пользовательского интерфейса выбора модели или проверки доступности модели во время выполнения.

Получить названия загруженных моделей / метаданные

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 ГБ"). Полезно для отображения размеров моделей в интерфейсе.

Bytes to Readable String

Формат загрузки прогресса

Форматирует строку прогресса загрузки, например "1.23 ГБ / 4.07 ГБ (30.2%)". Если общий размер неизвестен, возвращает только полученный объём.

Format Download Progress

Получить описание ошибки / строку кода ошибки

Get LLM Error Description возвращает читаемое текстовое описание для кода ошибки. Get LLM Error Code String возвращает имя значения перечисления в виде строки (полезно для логирования).

Get Error Description

Справочник кодов ошибок

CodeЦенностьОписание
Неизвестно0Неопределенная ошибка
ModelLoadFailed10Файл GGUF не удалось загрузить (повреждённый файл, несовместимый формат и т. д.).
ContextCreateFailed11Не удалось создать контекст вывода
ModelNotLoaded20Попытка вывода была предпринята без загруженной модели.
ChatTemplateFailed21Не удалось применить шаблон чата модели.
TokenizationFailed22Текст не удалось токенизировать.
ContextOverflow23Подсказка + контекст превышает настроенный размер контекста.
PromptDecodeFailed24Не удалось декодировать токены подсказки.
ContextTooFullToGenerate25Недостаточно оставшегося контекстного пространства для генерации вывода
GenerationDecodeFailed30Во время генерации не удалось декодировать токен
GenerationTruncated31Генерация остановлена, так как был достигнут лимит максимального количества токенов.
LLMInstanceNull40Экземпляр LLM равен null или недействителен.
ModelNotFoundOnDisk41Модельный файл не существует по ожидаемому пути
ModelURLEmpty42Был запрошен загрузка с пустым URL.
ModelDownloadCancelled43Загрузка была отменена.
ModelDownloadEmptyData44Загрузка завершена, но тело ответа было пустым.
ModelDownloadSaveFailed45Загрузка завершена, но файл не удалось сохранить на диск.