한국어
  • chatgpt
  • 다국어지원
  • 생산성

ChatGPT를 이용한 효율적인 다국어지원

이 글은 ChatGPT API를 이용해 제품의 다국어지원(i18n)을 효율적으로 지원하는 경험을 공유하며, API를 통합하는 팁, 번역 결과 개선, 그리고 더 나은 결과를 얻기 위한 상세 지침 최적화에 대한 정보를 제공합니다.

Gao
Gao
Founder
Yijun
Yijun
Developer

오늘날의 글로벌 시장에서는 제품을 다국어지원(i18n)하는 것이 필수적입니다. 여러 언어를 지원함으로써 제품은 전 세계 사용자 기반을 유치하고 서비스 할 수 있으며, 사용자 경험을 향상시키고, 충성도를 높이며, 시장 점유율을 늘릴 수 있습니다. 그러나, 다국어지원은 종종 높은 비용과 복잡한 유지 보수 작업을 수반합니다:

  • 언어 지원 설정을 위해서는 전문 팀을 구성하고, 적절한 파트너를 선택하는 데 시간과 노력이 필요합니다.
  • 전통적인 번역 과정은 느리고 수동적인 개입이 필요하여, 제품 반복에 대응하기 어렵습니다.

이 글에서는 Logto 팀이 ChatGPT와 그 API를 사용해 제품의 다국어지원을 효율적으로 지원하는 경험을 공유하면서, 최소한의 비용으로 이를 실현한 방법을 공유하겠습니다.

국제화 접근 방식

ChatGPT API를 통합하기 전에는, 제품을 위한 다국어지원을 지원하려면 전통적인 번역 과정을 따랐습니다. 그 과정은 다음과 같습니다:

  1. 각 언어에 대해, 여러 TypeScript 파일이 포함된 번역 폴더를 생성했습니다. 각 파일은 문구 키와 그 번역을 나타내는 키-값 쌍으로 이루어진 TypeScript 객체로 구성되어 있었습니다.
  2. 새로운 문구를 추가하려면, 각 언어의 번역 파일에 수동으로 새로운 키-값 쌍을 추가했습니다.
  3. 각 언어의 루트 디렉토리에서, 해당 언어의 모든 번역 파일을 내보내는 index.ts 파일을 생성했습니다.

다음은 zh-HK 언어에 대한 index.ts 파일의 예입니다:

UI에서 문구를 표시하려면, 현재 환경에 따른 번역을 검색하는 함수를 사용했습니다. 점 표기법을 사용하여 중첩된 객체나 키에 접근했습니다.

예를 들어, 사용자가 영어 브라우저를 사용하는 경우:

직면한 도전

이런 접근 방식으로 두 가지 주요 문제에 직면했습니다:

  1. 언어와 문구의 수가 늘어나면서, 번역 파일을 유지 관리하는 것이 어려워졌습니다. 각 언어에 새로운 문구를 수동으로 추가하는 작업은 시간이 많이 들고 오류가 발생하기 쉬웠습니다.
  2. 번역 과정이 신뢰성이 떨어졌습니다. 전용 번역 팀이 없었기 때문에 대부분의 번역에는 커뮤니티 사용자에게 의존하였습니다. 그들은 훌륭한 작업을 했지만, 번역들은 시간이 지나며 불완전하고 일관성이 없어졌습니다.

ChatGPT 소개

ChatGPT가 인기를 얻으면서, 우리는 흥미로운 사용 사례를 발견했습니다. 우연히 TypeScript 문구 객체를 ChatGPT에 복사하고 보니, 코드 구조를 유지하면서 코드 스니펫을 번역할 수 있었습니다. 이 발견이 우리를 흥분시켰습니다.

예를 들어:

그리고 결과는:

이는 정말 놀랍습니다. 실제 사례에서는 일부 번역하지 않은 문구가 // UNTRANSLATED로 표시된 이력 파일도 있었습니다:

ChatGPT는 심지어 코드 스니펫을 "부분적으로" 번역할 수 있어, 마지막 장애물이 제거되었습니다. 하지만, 아직 완벽하지 않았습니다. 우리가 직면한 문제를 살펴보겠습니다.

프롬프트 엔지니어링

무작위 응답 문제

ChatGPT에 대한 잘 알려진 사실 중 하나는 그것의 예측 불가능한 성격입니다. 때때로 결과는 정확하며, 다른 때에는 이상하거나 우리가 의도한 것이 아닐 수 있습니다. 이것은 챗봇 상황에서는 수용 가능하지만, 번역 코드 스니펫을 생성할 때는 문제가 될 수 있습니다.

zh-HK 예를 다시 살펴봅시다:

Nice to meet you.zh-HK에 대한 예상 번역은 很高興見到你。입니다. 그러나, 스니펫이 zh-CN으로 번역되는 경우가 있습니다:

很高兴见到你。很高興見到你。와 다릅니다.

때때로, 프롬프트 "Please translate the..."가 번역되기도 합니다:

가끔 결과에는 불필요한 내용이 포함되어 있습니다:

첫 번째 줄 "이게 번역입니다:"는 우리의 요구에 필요하지 않습니다.

위의 결과를 바탕으로, ChatGPT와 우리 간의 대화에서 몇 가지 차이점을 확인할 수 있습니다:

  • 때때로, 언어만 추론(zh)되며, 지역 차이(zh-HK)를 고려하지 않습니다.
  • 번역이 필요한 내용을 정확하게 식별하지 못합니다.
  • 응답 형식이 우리의 기대와 일치하지 않습니다.

명확하고 구체적인 프롬프트 작성

앞서 언급된 문제를 해결하기 위해, 우리는 프롬프트를 개선했습니다:

이 새로운 프롬프트는 효과적이었습니다. 우리는 ChatGPT에게 다음의 것들을 지시했습니다 :

  • 제공된 언어 코드에 따라 지역 언어를 추론하라.
  • 세 개의 역따옴표로 구분된 코드 스니펫을 번역하라.
  • 출력 결과가 이전에 몸에 배지 않阳 첞엇밌은 첗엁아젖 아아.

모델에게 사고 시간을 제공

앞서 언급된 바와 같이, 기존 문구의 경우, 우리는 // UNTRANSLATED로 표시된 것들만 번역해야 했습니다. 이것은 프롬프트에 복잡성의 또 다른 층을 추가했습니다. 예를 들어:

우리가 얻은 결과 중 하나는:

동시에 success 문구를 번역(혹은 변형)하고, 두 개의 // TRANSLATED 주석을 추가하는데, 둘 다 예상치 못했습니다.

이전 프롬프트는 분명하고 명확했지만, 그 길이가 꽤 길고, 사람들에게도 이해하기 어려웠습니다. 이를 개선하기 위해 우리는 모델에게 더 많은 시간을 주었습니다. 우리는 단계별 프롬프트를 제공했습니다:

결과는 대폭 개선되었습니다. 그러나, 때때로 ChatGPT는 "사고 과정"을 보여주곤 했습니다. 왜냐하면 우리가 명시적으로 단계를 제공했기 때문입니다.

대화에서의 역할

직접적인 사용자 인터페이스는 없지만, 우리는 각 메시지에 서로 다른 "역할"을 할당함으로써 ChatGPT에게 상호 작용적이고 동적인 대화를 보낼 수 있습니다. 역할은 다음 중 하나가 될 수 있습니다:

  • "시스템": 대화의 흐름과 행동을 안내하여 연속성과 목표 지향성을 보장합니다.
  • "조수": ChatGPT 모델 자체를 나타내며, 답변과 응답을 제공합니다.
  • "사용자": 사용자를 대표하여 모델과 질문을 하고 상호 작용을 합니다.

역할을 사용하면, ChatGPT와 더 참여적인 대화를 만들 수 있습니다. 각 메시지는 대화를 이끌어 나가는 특정 역할을 합니다.

여기서는 "시스템" 역할을 사용하여 ChatGPT에게 우리의 작업을 어떻게 수행해야 하는지 안내할 수 있습니다:

"사용자" 역할을 사용하여 ChatGPT에게 코드 스니펫을 번역하라고 요청할 수 있습니다:

"조수" 역할은 "기준답"을 나타내는 것입니다:

마지막으로, 위의 세 개 메시지를 번역하고자 하는 코드 스니펫과 결합하고, 하나의 요청을 Chat Completion API에 전송하십시오. 예시는 다음과 같습니다:

languageCode를 목표 코드로, code를 번역할 코드 스니펫으로 교체하고, 우리가 기대한 정확한 결과를 보았습니다. 야호!

CLI 에서의 통합

결과는 올바르고 안정적이었지만, ChatGPT API를 사용하는 과정은 그리 편리하지 않았습니다. 코드 스니펫을 수동으로 복사하고, 요청에 붙여넣어야 하며, 이때 languageCodecode 변수를 교체해야 합니다. 10개 이상의 언어와 100개의 코드 스니펫을 번역해야 한다는 생각을하면, 이는 이상적인 경험이 아닙니다.

이 문제를 해결하기 위해, 우리는 ChatGPT API를 우리의 커맨드 라인 인터페이스(CLI)에 통합하기로 결정했습니다. 우리는 CLI에 두 개의 명령을 추가했습니다 :

  • logto translate sync: 이 명령은 모든 언어의 // UNTRANSLATED 주석이 포함된 코드 스니펫을 수집하고, 이를 번역하며, 번역된 버전으로 원래의 코드 스니펫을 대체합니다.
  • logto translate create [languageCode]: 이 명령은 지정된 [languageCode] 로 새로운 언어를 만들고, 기본 언어(영어)에서 모든 코드 스니펫을 새로운 언어로 번역합니다.

번역이 완벽하지 않더라도, 이것은 여전히 큰 향상입니다. 이제 우리는 번역 과정에 시간을 투자하는 대신, 번역 결과의 검증과 개선에 집중할 수 있습니다.

결론

제품의 다국어지원을 위해 작업 흐름에 ChatGPT API를 통합하는 것은 강력한 도구가 될 수 있지만, 최상의 결과를 얻기 위해서는 신중한 계획과 명확한 지침이 필요합니다.

AI 어플리케이션을 개발 중이라면, 사용자 인증은 필수적입니다. Logto는 사용자를 본인 인증하는 간단하고 안전한 방법을 제공하고, 모든 어플리케이션에 대한 통합된 사용자 식별 체계를 제공하며, ChatGPT 플러그인에 대한 박스에서 나온 지원을 제공합니다. 더 많은 정보를 얻으려면, 우리의 블로그 포스트를 확인하세요 :

Logto를 사용하여 ChatGPT 플러그인 사용자 인증 구현