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.
GaoFounder
YijunDeveloper
Deja de perder semanas en la autenticación de usuarios
Lanza aplicaciones seguras más rápido con Logto. Integra la autenticación de usuarios en minutos y concéntrate en tu producto principal.
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.
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:
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.
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.
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.
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.
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!
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í.
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: