Настройка пайплайна

Max PrilutskiyГенеральный директор и соучредительUpdated 15 дней назад · 4 min read

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

Вы уже решили, какие этапы нужны вокруг основного шага перевода. Теперь остаются два вопроса: где зафиксировать это решение и что делать, если одной задаче нужен другой сценарий? Ответ — два слоя. Движок хранит конфигурацию по умолчанию, которую наследует каждая асинхронная задача. Объект pipelineConfig в отдельной отправке переопределяет эту конфигурацию только для неё. Этапы, которые вы не включаете в переопределение, наследуются от движка, поэтому в запросе указываются только отличия.

Впервые работаете с пайплайном? Начните с раздела Обзор пайплайна, чтобы понять, что делает каждый этап. Эта страница посвящена тому, как включать этапы и переопределять их, а не тому, что именно происходит после включения.

Только для асинхронных задач

Конфигурация пайплайна применяется к задачам, созданным через Async Localization API. Синхронный эндпоинт /localize выполняет только основной шаг перевода и полностью игнорирует настройки пайплайна — на любом из двух уровней.

Настройки по умолчанию на уровне движка#

Откройте вкладку Pipeline у движка в панели управления и включайте или отключайте каждый этап независимо. Эта конфигурация становится значением по умолчанию для движка: каждая асинхронная задача, отправленная в него, будет выполняться с этими этапами, если только запрос не переопределит их. Настройте один раз — и не придётся заново задавать пайплайн в каждом вызове.

У каждого этапа свой переключатель. Можно включить любую комбинацию — ни одного, все сразу или что угодно между ними:

Основная локализация — не переключатель: она выполняется всегда. Остальные этапы лишь выстраиваются вокруг неё.

Именно эти настройки по умолчанию наследует каждая задача, поэтому конфигурация движка — это основа, поверх которой применяется переопределение pipelineConfig. Каждый этап соответствует отдельному ключу:

json
{
  "preEdit": { "enabled": true },
  "humanEdit": {
    "enabled": true,
    "provider": "internal",
    "tier": "standard",
    "timeoutHours": 48
  },
  "postEdit": { "enabled": false },
  "rephrase": { "enabled": false },
  "backTranslation": { "enabled": true }
}
КлючПоляНастраивается на странице этапа
preEditenabledAI-редактирование до локализации
humanEditenabled, provider (internal | external), tier (standard | pro), timeoutHoursПроверка человеком
postEditenabledAI-оценка
rephraseenabledПерефразирование для естественного звучания
backTranslationenabledПроверка обратным переводом

Что именно контролирует каждое поле — какого провайдера проверки использовать, какой уровень выбрать, сколько ждать, — описано на отдельной странице соответствующего этапа. Здесь мы разбираем, где живёт конфигурация и как сочетаются её два слоя.

Переопределение на уровне запроса#

Большинство задач должны выполняться с настройками движка по умолчанию. Исключение — отдельная отправка, которой нужен другой пайплайн: например, разовая партия маркетинговых текстов, где нужен этап перефразирования, обычно отключённый в вашем движке, или юридический контент, для которого этот этап лучше пропустить. Если менять движок ради одной партии, это затронет и все остальные задачи.

Поэтому отличия передаются прямо в запросе. Добавьте объект pipelineConfig в тело POST /jobs/localization, и он переопределит конфигурацию движка по умолчанию только для этой отправки. На самом движке ничего не изменится; следующая задача без переопределения снова пойдёт с настройками по умолчанию.

json
{
  "sourceLocale": "en",
  "targetLocales": ["de", "fr"],
  "data": { "headline": "Ship in every language." },
  "pipelineConfig": {
    "rephrase": { "enabled": true },
    "backTranslation": { "enabled": false }
  }
}

Вот правило наследования, благодаря которому переопределение остаётся компактным: этап, который вы указали, переопределяется; этап, который вы пропустили, наследует конфигурацию движка по умолчанию. В приведённом выше запросе для этой конкретной задачи rephrase включён, а backTranslation выключен. preEdit, humanEdit и postEdit не указаны, поэтому они выполняются ровно так, как настроены в движке. Вы задаёте только отличия.

Указали этап — задайте его целиком

Переопределение работает на уровне этапа, а не отдельного поля. Каждый этап, который вы включаете, должен передаваться как полный объект этого этапа — нельзя отправить humanEdit: { "tier": "pro" }, чтобы изменить только уровень и унаследовать всё остальное. Либо указывайте этап целиком, чтобы переопределить его, либо не указывайте вовсе, чтобы унаследовать конфигурацию движка по умолчанию. Частичного слияния внутри объекта одного этапа здесь нет.

И ещё две вещи, которые переопределение не делает. Скажем об этом прямо, потому что именно здесь легко решить, будто оно умеет всё:

  • Оно меняет только эту отправку. Оно не записывает изменения обратно в движок, так что это не способ внести постоянные изменения в конфигурацию — для этого нужна вкладка Pipeline. Используйте переопределение для разового случая, а вкладку — для новой стандартной конфигурации.
  • Оно не отменяет собственные правила выполнения этапа. AI-оценка после локализации запускается только тогда, когда проверка человеком дала результат, поэтому включение postEdit ничего не изменит в задаче, где нет этапа человеческой проверки для согласования — независимо от того, на каком уровне он был включён.

Проверьте, что действительно выполнилось#

Конфигурация задаёт, какие этапы должны выполняться; запись самой задачи показывает, какие из них действительно отработали. У задачи есть массив steps[], и именно по нему вы подтверждаете, что переопределение на уровне запроса действительно сработало, а не просто было отправлено.

Как читать эти записи — stepId для каждого этапа, что означает шаг skipped, где отображаются некритичные сбои, — описано на отдельной странице.

Следующие шаги#

Теперь вы можете задать конфигурацию по умолчанию на движке и переопределить её в запросе. Дальше — отправьте задачу с переопределением или проверьте шаги выполнения, чтобы увидеть, какие этапы действительно были запущены.