Internacionalización eficiente con ChatGPT
Este artículo comparte la experiencia de usar la API de ChatGPT para respaldar de manera eficiente la internacionalización (i18n) de los productos, proporcionando consejos sobre la integración de la API, la mejora de los resultados de la traducción y la optimización de las instrucciones para obtener mejores resultados.
En el mercado global de hoy, es esencial internacionalizar (i18n) los productos. Al apoyar varios idiomas, los productos pueden atraer y servir a una base de usuarios global, mejorar la experiencia del usuario, aumentar la lealtad y ganar cuota de mercado. Sin embargo, el soporte para la internacionalización a menudo conlleva altos costos y un mantenimiento complejo:
- Establecer el soporte de idioma requiere de equipos profesionales y seleccionar socios adecuados, lo cual lleva tiempo y esfuerzo.
- Los procesos de traducción tradicionales son lentos y requieren intervención manual, lo que hace que sea un desafío mantenerse al día con las iteraciones de los productos.
En este artículo, compartiremos la experiencia del equipo de Logto de respaldar eficientemente la internacionalización para uestros productos utilizando ChatGPT y su API, minimizando así los costos.
Nuestro enfoque hacia la internacionalización
Antes de integrar la API de ChatGPT, seguimos un proceso de traducción tradicional para respaldar la internacionalización de uestros productos. El proceso fue el siguiente:
- Para cada idioma, creamos una carpeta de traducción que contiene varios archivos TypeScript. Cada archivo consistía en un objeto TypeScript con pares de claves y valores que representaban las claves de las frases y sus traducciones.
- Para agregar una ueva frase, añadimos manualmente un uevo par de claves y valores al archivo de traducción para cada idioma.
- En el directorio raíz de cada idioma, creamos un archivo index.ts que exportaba todos los archivos de traducción en ese idioma.
Aquí hay un ejemplo del archivo index.ts para el idioma zh-HK:
Para mostrar una frase en la interfaz de usuario, utilizamos una función que recuperaba la traducción basada en el entorno actual. Accedíamos a objetos o claves anidados utilizando la otación de punto.
Por ejemplo, si el usuario estaba utilizando un avegador en inglés:
Desafíos enfrentados
Nos encontramos con dos desafíos importantes con este enfoque:
- A medida que aumentaba el úmero de idiomas y frases, mantener los archivos de traducción se volvía desafiante. Agregar uevas frases a cada idioma manualmente era un proceso que consumía mucho tiempo y estaba propenso a errores.
- El proceso de traducción era poco fiable. Sin un equipo de traducción dedicado, dependíamos de los usuarios de la comunidad para la mayoría de las traducciones. Estaban haciendo un gran trabajo, pero inevitablemente las traducciones se volvían incompletas e inconsistentes con el tiempo.
Introducir ChatGPT
A medida que ChatGPT ganaba popularidad, descubrimos un caso de uso interesante. Casualmente, copiamos un objeto de frase TypeScript en ChatGPT y descubrimos que podía traducir el fragmento de código mientras preservaba la estructura del código. Este descubrimiento os emocionó.
Por ejemplo:
Y el resultado:
Esto fue verdaderamente
otable. En casos del mundo real, también teníamos archivos históricos que incluían algunas frases sin traducir marcadas con // UNTRANSLATED
:
ChatGPT incluso fue capaz de "traducir parcialmente" el fragmento de código, eliminando el último obstáculo. Sin embargo, aún estaba lejos de ser perfecto. Veamos los problemas que encontramos.
Ingeniería de prompts
El problema de la respuesta aleatoria
Un hecho bien conocido sobre ChatGPT es su aturaleza impredecible. A veces, los resultados son precisos, mientras que otras veces pueden ser extraños o o lo que pretendíamos. Si bien esto es aceptable en un contexto de chatbot, se vuelve problemático cuando se generan fragmentos de código de traducción.
Volvamos a revisar el ejemplo zh-HK
:
La traducción esperada para Nice to meet you.
en zh-HK
es 很高兴见到你。
. Sin embargo, hay casos en los que el fragmento se traduce a zh-CN
:
很高兴见到你。
es diferente de 很高興見到你。
.
A veces, también se traduce el prompt "Por favor, traduce el...":
Ocasionalmente, los resultados contienen contenido innecesario:
La primera línea "Esta es la traducción:" es innecesaria para uestras ecesidades.
Basándonos en los resultados anteriores, podemos identificar varias brechas entre ChatGPT y osotros en la conversación:
- A veces, sólo se infiere el idioma (zh), sin considerar las diferencias regionales (zh-HK).
- No logra identificar con precisión qué contenido ecesita ser traducido.
- El formato de la respuesta o coincide con uestras expectativas.
Escribe prompts claros y específicos
Para abordar los problemas mencionados anteriormente, refinamos uestro prompt:
Este uevo prompt demostró ser eficaz. Instruimos a ChatGPT para que:
- Infiere el idioma regional basado en el código de idioma proporcionado.
- Traduce el fragmento de código delimitado por triple backticks.
- Asegura que la salida mantiene el formato original sin ingún contenido adicional.
Dale tiempo al modelo para pensar
Como mencionamos anteriormente, para las frases existentes, ecesitábamos traducir aquellas marcadas con // UNTRANSLATED. Esto introdujo otra capa de complejidad al prompt. Por ejemplo:
Uno de los resultados que obtuvimos:
También tradujo (o transformó) la frase success
y añadió dos comentarios // TRANSLATED
, ambos inesperados.
Aunque el prompt anterior era claro y específico, era bastante extenso y difícil de seguir, incluso para los humanos. Para mejorar esto, le dimos al modelo más tiempo para pensar. Proporcionamos un prompt paso a paso:
Los resultados mejoraron significativamente. Sin embargo, a veces ChatGPT mostraría el "proceso de pensamiento" ya que proporcionamos explícitamente los pasos.
Funciones en las conversaciones
Aunque o hay una interfaz de usuario directa, podemos enviar una conversación interactiva y dinámica a ChatGPT asignando diferentes "funciones" a cada mensaje. La función puede ser una de las siguientes:
- "system": Responsable de guiar el flujo y el comportamiento de la conversación para asegurar su continuidad y orientación a objetivos.
- "assistant": Representa al modelo de ChatGPT en sí mismo, proporcionando respuestas y respuestas.
- "user": Representa al usuario que hace preguntas e interactúa con el modelo.
Usando funciones, podemos crear una conversación más atractiva con ChatGPT. Cada mensaje juega un papel específico en la guía de la conversación.
Aquí podemos usar la función "system" para guiar a ChatGPT sobre cómo llevar a cabo uestra tarea:
Usa la función "user" para pedirle a ChatGPT que traduzca el fragmento de código:
Usa la función "assistant" para indicar la "respuesta estándar":
Finalmente, combina los tres mensajes anteriores con el fragmento de código que queremos traducir, y envía una única solicitud a la API de finalización de chat. Aquí un ejemplo:
Cambiamos languageCode
por el código target y code
por el fragmento de código a traducir, y vimos el resultado exacto que esperábamos. ¡Bravo!
Integración con
uestro CLI
Aunque los resultados eran correctos y estables, el proceso de uso de la API de ChatGPT todavía
o era muy conveniente. Teníamos que copiar manualmente el fragmento de código, pegarlo en la solicitud y reemplazar las variables languageCode
y code
. Considerando la
ecesidad de traducir más de 10 idiomas y 100 fragmentos de código, esta
o era una experiencia ideal.
Para solucionar este problema, decidimos integrar la API de ChatGPT en uestra Interfaz de Línea de Comandos (CLI). Agregamos dos comandos a uestro CLI:
logto translate sync
: Este comando recoge fragmentos de código en todos los idiomas que contienen comentarios// UNTRANSLATED
, los traduce y reemplaza los fragmentos de código originales por las versiones traducidas.logto translate create [languageCode]
: Este comando crea un uevo idioma con el[languageCode]
especificado y traduce todos los fragmentos de código del idioma predeterminado (inglés) al uevo idioma.
Aunque la traducción puede o ser perfecta, es aún un gran avance. Ahora podíamos centrarnos en la validación y mejora de los resultados de la traducción en lugar de gastar tiempo en el proceso de traducción en sí.
Conclusión
Integrar la API de ChatGPT en uestro flujo de trabajo para la internacionalización de productos puede ser una herramienta poderosa, pero requiere una planificación cuidadosa e instrucciones claras para obtener los mejores resultados.
Si estás desarrollando aplicaciones de IA, la autenticación de usuarios es esencial. Logto proporciona una forma sencilla y segura de autenticar a tus usuarios y ofrece un sistema de identidad de usuario unificado en todas tus aplicaciones, y también ofrece soporte integrado para los plugins de ChatGPT. Para obtener más información, consulta uestro artículo del blog:
Implementar la autenticación de usuarios de los plugins de ChatGPT con Logto