• chatgpt
  • internationalization
  • productivity

Эффективная интернационализация с помощью ChatGPT

В этой статье мы делимся опытом использования API ChatGPT для эффективной поддержки интернационализации (i18n) продуктов, предлагаем советы по интеграции API, улучшению результатов перевода и оптимизации инструкций для достижения лучших результатов.

Gao
Gao
Founder
Yijun
Yijun
Developer

На сегодняшнем глобальном рынке важно обеспечивать интернационализацию (i18n) продуктов. Поддержка нескольких языков позволяет привлекать и обслуживать глобальную аудиторию пользователей, улучшать пользовательский опыт, повышать лояльность и увеличивать долю рынка. Однако поддержка интернационализации часто сопровождается высокими затратами и сложным обслуживанием:

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

В этой статье мы поделимся опытом команды Logto по эффективной поддержке интернационализации наших продуктов с помощью ChatGPT и его API с минимальными затратами.

Наш подход к интернационализации

До интеграции API ChatGPT мы применяли традиционный процесс перевода для поддержки интернационализации наших продуктов. Процесс был следующим:

  1. Для каждого языка мы создавали папку перевода, содержащую несколько файлов TypeScript. Каждый файл состоял из объекта TypeScript с парой ключ-значение, представляющих ключ фразы и ее перевод.
  2. Для добавления новой фразы мы вручную добавляли новую пару ключ-значение в файл перевода для каждого языка.
  3. В корневом каталоге каждого языка мы создавали файл index.ts, который экспортировал все файлы перевода на этом языке.

Вот пример файла index.ts на языке zh-HK:

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

Например, если пользователь использовал браузер на английском языке:

Испытанные трудности

Мы столкнулись с двумя основными трудностями при использовании этого подхода:

  1. С увеличением числа языков и фраз поддержание файлов перевода становилось сложной задачей. Добавление новых фраз на каждый язык вручную было трудоемким и подвержено ошибкам.
  2. Процесс перевода был ненадежным. Без специализированной команды по переводу мы полагались на сообщество пользователей для большинства переводов. Они делали отличную работу, но со временем переводы становились неполными и неконсистентными.

Введение 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 «из коробки». Для получения дополнительной информации, прочтите наш блог:

Implement ChatGPT plugins user authentication with Logto