Использование Lina и локального HY-MT1.5-1.8B для перевода записей локализации

AI-сотрудникиCommunity Edition+

В этом руководстве описан практический сценарий локализации: локально развернуть небольшую специализированную модель перевода, открыть ее как OpenAI-совместимый сервис и настроить Lina для пакетного перевода записей локализации NocoBase.

Подход подходит для множества системных записей, текстов плагинов, меню, названий коллекций и подписей полей. В отличие от онлайн-моделей, локальные модели не зависят от внешних лимитов RPM, TPM и параллельности, а параллельность можно настраивать по возможностям машины и модели.

Обзор

В руководстве используются:

  • Модель: tencent/HY-MT1.5-1.8B-GGUF
  • Сервис инференса: llama-server
  • Интеграция: OpenAI-compatible API
  • AI Employee: Lina
  • Точка входа: страница Localization Management
Примечание

HY-MT1.5-1.8B — небольшая специализированная модель перевода. Она лучше подходит для коротких записей, UI-текстов и пакетного перевода. Общие чат-модели не рекомендуется выбирать первыми для задач локализации.

Предварительные условия

  • Плагин Localization Management включен.
  • Целевой язык включен.
  • Записи локализации синхронизированы.
  • Локальная машина или сервер может запускать llama-server.
  • Сервис NocoBase может обращаться к HTTP-адресу llama-server.

Развертывание HY-MT GGUF

Установка llama.cpp

В macOS можно установить через Homebrew:

brew install llama.cpp

Также можно использовать готовый бинарный файл llama.cpp или собрать его из исходного кода. Главное, чтобы был доступен llama-server.

Запуск OpenAI-совместимого сервиса

Запустите сервис с GGUF-моделью из Hugging Face:

llama-server \
  -hf tencent/HY-MT1.5-1.8B-GGUF:Q4_K_M \
  --host 0.0.0.0 \
  --port 8000 \
  -c 2048 \
  -np 4
ПараметрОписание
-hfЗагружает модель из Hugging Face.
--hostАдрес прослушивания. Для локального теста используйте 127.0.0.1, для контейнера или удаленного доступа — 0.0.0.0.
--portПорт HTTP-сервиса.
-cДлина контекста. Записи локализации обычно короткие, поэтому 2048 обычно достаточно.
-npЧисло параллельных слотов. Настраивайте по производительности машины.
Совет

Если ресурсы сервера ограничены, начните с -np 1 или -np 2, затем постепенно увеличивайте после проверки стабильности.

Проверка сервиса модели

После запуска llama-server проверьте состояние сервиса:

curl http://127.0.0.1:8000/health

Затем проверьте перевод через OpenAI-совместимый API:

curl http://127.0.0.1:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "tencent/HY-MT1.5-1.8B-GGUF:Q4_K_M",
    "messages": [
      {
        "role": "user",
        "content": "Translate the following text into Chinese. Output only the translated result without any additional explanation:\n\nSave"
      }
    ]
  }'

Если используется локальный файл модели, замените model на фактическое имя модели, возвращаемое или настроенное сервисом.

Примечание

Если запрос долго не отвечает, модель может быть слишком медленной, параллельность слишком высокой или контекст слишком большим. Сначала уменьшите -np и параллельность перевода NocoBase, затем наблюдайте время ответа.

Настройка LLM-сервиса в NocoBase

Перейдите в System Settings -> AI Employees -> LLM service и добавьте LLM-сервис.

НастройкаПример
ProviderOpenAI (completions)
TitleHY-MT Local
Base URLhttp://127.0.0.1:8000/v1
API KeyЕсли llama-server не использует аутентификацию, укажите фиктивное значение, например dummy.
Enabled ModelsВыберите tencent/HY-MT1.5-1.8B-GGUF:Q4_K_M или введите фактическое имя модели.

После настройки используйте Test flight, чтобы проверить модель.

Совет

Если NocoBase запущен в Docker, 127.0.0.1 указывает на сам контейнер и может не обращаться к сервису на хосте. Используйте IP хоста, адрес контейнерной сети или host.docker.internal.

Настройка выделенной модели Lina

Перейдите в System Settings -> AI Employees -> AI employees, откройте Lina и перейдите в Model settings.

  1. Включите Enable dedicated model configuration.
  2. Выберите локальную модель HY-MT в Models.
  3. Сохраните конфигурацию.

После этого Lina будет использовать эту модель для задач перевода локализации и не будет переключаться на общие чат-модели.

Подробнее см. Настройка моделей AI Employee.

Настройка параллельности перевода

Параллельность задач перевода локализации управляется AI_LOCALIZATION_CONCURRENCY:

AI_LOCALIZATION_CONCURRENCY=10

Правила:

  • По умолчанию: 10
  • Минимум: 1
  • Максимум: 20
  • Значения вне диапазона используют значение по умолчанию

Оптимальная параллельность зависит от CPU, GPU, памяти, квантования модели и llama-server -np. Если значение по умолчанию вызывает проблемы:

  1. Начните с AI_LOCALIZATION_CONCURRENCY=1 и проверьте перевод одной записи.
  2. Установите llama-server -np и AI_LOCALIZATION_CONCURRENCY в 2 или 4.
  3. Наблюдайте время ответа, загрузку CPU/GPU и прогресс задачи.
  4. Увеличивайте постепенно только при стабильной работе.
Примечание

Не задавайте слишком высокую параллельность сразу. Если она превышает реальную емкость модели, задачи могут замедлиться из-за очередей, таймаутов или зависания сервиса.

Запуск перевода локализации

Перейдите в System Management -> Localization Management.

  1. Переключитесь на целевой язык.
  2. Нажмите Synchronize, чтобы убедиться, что записи синхронизированы.
  3. Нажмите аватар Lina.
  4. Выберите область задачи:
    • Incremental translation: переводит записи без перевода.
    • Selected translation: переводит выбранные записи в таблице.
    • Full translation: переводит все записи текущего языка.
  5. Проверьте число записей, провайдера и модель в диалоге подтверждения.
  6. Подтвердите создание асинхронной задачи.
  7. Дождитесь завершения, проверьте переводы и опубликуйте.

Сначала используйте Selected translation для нескольких записей, чтобы проверить стиль вывода и скорость, затем запускайте инкрементальный или полный перевод.

Как Lina формирует запросы перевода

Lina формирует запросы из записей и эталонных переводов. Для коротких записей существующие ссылки помогают повысить согласованность:

  • Для встроенных записей предпочтительно используются китайские переводы как справочные.
  • Для невстроенных записей предпочтительно используется язык системы по умолчанию.
  • Если есть английская справка, английский используется как исходный текст.
  • Результаты записываются в целевой язык, но не публикуются автоматически.

Семантика prompt примерно следующая:

Refer to the following translation:
{source_term} is translated as {target_term}

Translate the following text into {target_language}. Output only the translated result without any additional explanation:

{source_text}

Устранение неполадок

Нет прогресса после создания задачи

Проверьте, получал ли llama-server запросы. Посмотрите логи сервиса или вызовите /v1/chat/completions через curl.

Если модель получает запросы, но не отвечает, уменьшите:

  • AI_LOCALIZATION_CONCURRENCY
  • llama-server -np
  • llama-server -c

Модель возвращает объяснения вместо переводов

Локальные модели перевода обычно стабильнее общих чат-моделей. Если объяснения все еще появляются, сначала проверьте тот же prompt через curl, чтобы понять стиль вывода модели. Также можно начать с более коротких записей или снизить параметры sampling, например temperature.

NocoBase не может подключиться к сервису модели

Проверьте:

  • Содержит ли Base URL /v1.
  • Может ли среда выполнения NocoBase обратиться к адресу.
  • Не блокирует ли порт firewall или контейнерная сеть.
  • Продолжает ли работать llama-server.

Проверка перед публикацией

После завершения AI-перевода проверьте результат перед публикацией:

  • Отфильтруйте по модулю и проверьте короткие записи: меню, кнопки, имена полей и статусы.
  • Проверьте переменные, placeholders, HTML-теги и символы форматирования.
  • Проверьте согласованность ключевых бизнес-терминов.
  • Если переводы встроенных записей были перезаписаны, повторно синхронизируйте в Localization Management и выберите Reset system built-in entry translations, чтобы восстановить значения по умолчанию. Чтобы внести переводы по умолчанию для системы и официальных плагинов, см. Translation Contribution.
  • Сначала публикуйте в тестовой среде, затем синхронизируйте в production.

Ссылки