Эффективная интернационализация с помощью ChatGPT
В этой статье мы делимся опытом использования API ChatGPT для эффективной поддержки интернационализации (i18n) продуктов, предлагаем советы по интеграции API, улучшению результатов перевода и оптимизации инструкций для достижения лучших результатов.
На сегодняшнем глобальном рынке важно обеспечивать интернационализацию (i18n) продуктов. Поддержка нескольких языков позволяет привлекать и обслуживать глобальную аудиторию пользователей, улучшать пользовательский опыт, повышать лояльность и увеличивать долю рынка. Однако поддержка интернационализации часто сопровождается высокими затратами и сложным обслуживанием:
- Настройка поддержки языка требует профессиональных команд и выбора подходящих партнеров, что требует времени и усилий.
- Традиционные процессы перевода медленны и требуют ручного вмешательства, что затрудняет совмещение с продуктовыми итерациями.
В этой статье мы поделимся опытом команды Logto по эффективной поддержке интернационализации наших продуктов с помощью ChatGPT и его API с минимальными затратами.
Наш подход к интернационализации
До интеграции API ChatGPT мы применяли традиционный процесс перевода для поддержки интернациона лизации наших продуктов. Процесс был следующим:
- Для каждого языка мы создавали папку перевода, содержащую несколько файлов TypeScript. Каждый файл состоял из объекта TypeScript с парой ключ-значение, представляющих ключ фразы и ее перевод.
- Для добавления новой фразы мы вручную добавляли новую пару ключ-значение в файл перевода для каждого языка.
- В корневом каталоге каждого языка мы создавали файл index.ts, который экспортировал все файлы перевода на этом языке.
Вот пример файла index.ts на языке zh-HK:
Чтобы отобразить фразу в пользовательском интерфейсе, мы использовали функцию, которая извлекала перевод в зависимости от текущей среды. Мы получали доступ к вложенным объектам или ключам, используя нотацию точек.
Например, если пользователь использовал браузер на английском языке:
Испытанные трудности
Мы столкнулись с двумя основными трудностями при использовании этого подхода:
- С увеличением числа языков и фраз поддержание фай лов перевода становилось сложной задачей. Добавление новых фраз на каждый язык вручную было трудоемким и подвержено ошибкам.
- Процесс перевода был ненадежным. Без специализированной команды по переводу мы полагались на сообщество пользователей для большинства переводов. Они делали отличную работу, но со временем переводы становились неполными и неконсистентными.
Введение ChatGPT
Пока ChatGPT набирал популярность, мы обнаружили интересный сценарий использования. Случайно мы скопировали объект фразы TypeScript в ChatGPT и обнаружили, что он может переводить фрагмент кода, сохраняя структуру кода. Это открытие нас взволновало.
Например:
И результат:
Это было действительно замечательно. В реальных условиях у нас были исторические файлы, которые включали некоторые непереведенные фразы, помеченные // UNTRANSLATED
:
ChatGPT даже смог "частично" перевести фрагмент кода, устраняя последнее препятствие. Однако он все еще был д алек от совершенства. Давайте посмотрим на проблемы, с которыми мы столкнулись.
Инженерия запроса
Проблема случайного ответа
Известный факт о ChatGPT - его непредсказуемость. Иногда результаты точны, а иногда они могут быть странными или не теми, которые мы ожидали. Хотя это приемлемо в контексте чат-бота, это становится проблематичным при генерации переводных фрагментов кода.
Давайте вернемся к примеру на zh-HK
:
Ожидаемый перевод для Nice to meet you.
на zh-HK
- это 很高興見到你。
. Однако бывают случаи, когда фрагмент переводится на zh-CN
:
很高兴见到你。
отличается от 很高興見到你。
.
Иногда переводится и подсказка "Пожалуйста, переведите ...":
Иногда результаты содержат ненужный контент:
Первая строка "This is the translation:" не нужна для наших нужд.
На основании вышеуказанных результатов мы можем выявить несколько разрывов между ChatGPT и нами в разговоре:
- Иногда определяется только язык (zh), не учитывая региональные различия (zh-HK).
- Ему не удается точно определить, какой контент нужно переводить.
- Формат ответа не соответствует нашим ожиданиям.
Пишите ясные и конкретные подсказки
Чтобы решить проблемы, упомянутые выше, мы уточнили нашу подсказку:
Эта новая подсказка оказалась эффективной. Мы дали инструкции ChatGPT:
- Определить региональный язык на основе предоставленного кода языка.
- Перевести фрагмент кода, обозначенный тройными обратными кавычками.
- Убедиться, что вывод сохраняет исходный формат без какого-либо дополнительного контента.
Дайте модели время на раздумье
Как было упомянуто ранее, для существующих фраз нам нужно было переводить те, что были помечены как // UNTRANSLATED. Это внесло еще один уровень сложности в запрос. Например:
Один из результатов, которые мы получили:
Он также переводил (или преобразовывал) фразу success
и добавил два комментария // TRANSLATED
, которые были неожиданными.
Хотя предыдущая подсказка была ясной и конкретной, она была довольно длинной и сложной для понимания, даже для людей. Чтобы улучшить это, мы дали модели больше времени на раздумье. Мы предоставили подсказку шаг за шагом:
Результаты значительно улучшились. Однако иногда ChatGPT показывал "процесс мышления", поскольку мы явно предоставили шаги.
Роли в разговорах
Хотя у нас нет прямого пользовательского интерфейса, мы можем отправить интерактивный и динамический разговор в ChatGPT, присвоив разные "роли" каждому сообщению. Роль может быть одной из следующих:
- "system": Отвечает за направление потока и поведения разговора, обеспечивая его непрерывность и целенаправленность.
- "assistant": Представляет саму модель ChatGPT, обеспечивающую ответы и отклики.
- "user": Представляет пользователя, задающего вопросы и взаимодействующего с моделью.
Используя роли, мы можем создать более интерактивный разговор с ChatGPT. Каждое сообщение играет определенную роль в направлении разговора.
Здесь мы можем использовать роль "system", чтобы руководить ChatGPT по выполнению нашего задания:
Используйте роль "user", чтобы попросить ChatGPT перевести фрагмент кода:
Используйте роль "assistant" для указания на "стандартный ответ":
Наконец, объедините три вышеупомянутых сообщения с фрагментом кода, который мы хотим перевести, и отправьте один запрос к Chat Completion API. Вот пример:
Мы заменили languageCode
на целевой код, а code
на фрагмент кода для перевода, и увидели точный результат, который мы ожидали. Bravo!
Интеграция с нашим CLI
Хотя результаты были верными и стабильными, процесс использования API ChatGPT все еще был не очень удобным. Нам приходилось вручную копировать фрагмент кода, вставлять его в запрос и заменять переменные languageCode
и code
. Учитывая необходимость перевести более 10 языков и 100 фрагментов кода, это был не идеальный опыт.
Чтобы решить эту проблему, мы решили интегрировать API ChatGPT в наш Command-Line Interface (CLI). Мы добавили две команды в наш CLI:
logto translate sync
: Эта команда собирает фрагменты кода на всех языках, которые содержат комментарии// UNTRANSLATED
, переводит их и заменяет оригинальные фрагменты кода переведенными версиями.logto translate create [languageCode]
: Эта команда создает новый язык с указанным[languageCode]
и переводит все фрагменты кода с дефолтного языка (английского) на новый язык.
Хотя перевод может быть не идеальным, это все равно большая улучшение. Теперь мы могли сосредоточиться на проверке и улучшении результатов перевода, а не тратить время на процесс перевода.
Вывод
Интеграция API ChatGPT в наш рабочий процесс по интернационализации продуктов может быть мощным инструментом, но для получения наилучших результатов требуется тщательное планирование и четкие инструкции.
Если вы разрабатываете AI-приложения, аутентификация пользователя является неотъемлемой частью. Logto предлагает простой и безопасный способ аутентификации ваших пользователей и предлагает единую систему учета пользователей по всем приложениям, а также предлагает поддержку плагинов ChatGPT «из коробки». Для получения дополнительной информации, прочтите наш блог: