ในตลาดโลกทุกวันนี้ เป็นสิ่งสำคัญที่จะทำให้ผลิตภัณฑ์เป็นสากล (i18n) การรองรับหลายภาษา ผลิตภัณฑ์สามารถดึงดูดและให้บริการฐานผู้ใช้ทั่วโลก เพิ่มประสบการณ์ของผู้ใช้ เพิ่มความภักดี และเพิ่มส่วนแบ่งการตลาด อย่างไรก็ตาม การสนับสนุนการทำให้เป็นสากลมักมาพร้อมกับต้นทุนที่สูงและการบำรุงรักษาที่ซับซ้อน:
การตั้งค่าการสนับสนุนภาษาต้องใช้ทีมงานมืออาชีพและการเลือกพันธมิตรที่เหมาะสม ซึ่งต้องใช้เวลาและความพยายาม
กระบวนการแปลแบบดั้งเดิมช้าและต้องการการแทรกแซงจากมนุษย์ ทำให้ยากต่อการติดตามการทำซ้ำของผลิตภัณฑ์
ในบทความนี้ เราจะแบ่งปันประสบการณ์ของทีม Logto ในการสนับสนุนการทำให้เป็นสากลสำหรับผลิตภัณฑ์ของเราอย่างมีประสิทธิภาพโดยใช้ ChatGPT และ API ในขณะที่ลดต้นทุน
วิธีที่เราจัดการกับการทำให้เป็นสากล#
ก่อนที่จะรวม ChatGPT API เราใช้กระบวนการแปลแบบดั้งเดิมเพื่อสนับสนุนการทำให้ผลิตภัณฑ์ของเราเป็นสากล กระบวนการมีดังนี้:
สำหรับแต่ละภาษา เราได้สร้างโฟลเดอร์การแปลที่ประกอบด้วยไฟล์ TypeScript หลายไฟล์ ไฟล์แต่ละไฟล์ประกอบด้วยวัตถุ TypeScript ที่มีคู่คีย์-ค่า ซึ่งแสดงคีย์วลีและการแปลของพวกมัน
ในการเพิ่มวลีใหม่ เราได้เพิ่มคู่คีย์-ค่าใหม่ลงในไฟล์การแปลสำหรับแต่ละภาษาด้วยตนเอง
ในไดเรกทอรีรูทของแต่ละภาษา เราได้สร้างไฟล์ index.ts ที่ส่งออกไฟล์การแปลทั้งหมดในภาษานั้น
นี่คือตัวอย่างของไฟล์ index.ts สำหรับภาษาจีนฮ่องกง:
ในการแสดงวลีใน UI เราใช้ฟังก์ชันที่ดึงการแปลตามสภาพแวดล้อมปัจจุบัน เราเข้าถึงวัตถุหรือคีย์ที่ซ้อนกันโดยใช้สัญกรณ์จุด
ตัวอย่างเช่น ถ้าผู้ใช้ใช้เบราว์เซอร์ภาษาอังกฤษ:
ความท้าทายที่พบ#
เราเผชิญกับความท้าทายหลักสองประการในแนวทางนี้:
เมื่อจำนวนภาษาและวลีเพิ่มขึ้น การบำรุงรักษาไฟล์การแปลจึงกลายเป็นเรื่องท้าทาย การเพิ่มวลีใหม่ให้แต่ละภาษาด้วยตนเองเป็นเรื่องที่ใช้เวลานานและจุดเสี่ยงต่อข้อผิดพลาด
กระบวนการแปลไม่น่าเชื่อถือ โดยไม่มีทีมแปลที่อุทิศให้ เราพึ่งพาผู้ใช้จากชุมชนในการแปลส่วนใหญ่ พวกเขาทำงานได้ยอดเยี่ยม แต่การแปลก็ยังไม่ครบถ้วนและไม่สอดคล้องกันตามเวลา
แนะนำ ChatGPT#
ในขณะที่ ChatGPT ได้รับความนิยม เราพบกรณีการใช้งานที่น่าสนใจ บังเอิญเราได้คัดลอกวัตถุวลี TypeScript ไปยัง ChatGPT และพบว่ามันสามารถแปลโค้ดสแนปช็อตได้ โดยรักษาโครงสร้างโค้ดไว้ การค้นพบนี้ทำให้เราตื่นเต้น
ตัวอย่างเช่น:
และผลลัพธ์:
เป็นสิ่งที่น่าทึ่งมาก ในกรณีโลกจริง เรายังมีไฟล์ประวัติที่มีบางวลีที่ไม่ได้แปลถูกทำเครื่องหมายด้วย // UNTRANSLATED:
ChatGPT สามารถ "แปลบางส่วน" ของโค้ดสแนปช็อตได้ด้วยการกำจัดอุปสรรคสุดท้าย อย่างไรก็ตาม มันยังไกลจากความสมบูรณ์แบบ มาดูปัญหาที่เราได้พบกัน
การสร้างคำแนะนำ#
ปัญหาตอบสนองแบบสุ่ม#
ข้อเท็จจริงที่เป็นที่รู้กันดีเกี่ยวกับ ChatGPT คือธรรมชาติที่ไม่สามารถทำนายได้ บางครั้งผลลัพธ์จะถูกต้อง ในขณะเดียวกันก็อาจเป็นเรื่องแปลกหรือไม่ตรงตามที่เราต้องการ แม้ว่านี่จะยอมรับได้ในบริบทของแชทบอท แต่มันกลายเป็นปัญหาเมื่อสร้างโค้ดสแนปช็อตการแปล
ลองย้อนดูตัวอย่าง zh-HK กัน:
การแปลที่คาดหวังอสำหรับ Nice to meet you. ใน zh-HK คือ 很高興見到你。 อย่างไรก็ตามมีบางกรณีที่สแนปช็อตถูกแปลเป็น zh-CN:
很高兴见到你。 แตกต่างจาก 很高興見到你。.
บางครั้ง คำแนะนำ "Please translate the..." ก็ถูกแปลด้วย:
บางครั้งผลลัพธ์มีเนื้อหาที่ไม่จำเป็น:
บรรทัดแรก "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 Chat Completion API นี่คือตัวอย่าง:
เราทดแทน languageCode ด้วยรหัสเป้าหมายและ code ด้วยโค้ดสแนปช็อตที่ต้องการแปล และได้ผลที่เราคาดหวังอย่างแม่นยำ ยอดเยี่ยม!
การบูรณาการกับ CLI ของเรา#
ในขณะที่ผลลัพธ์ถูกต้องและเสถียร กระบวนการใช้ ChatGPT API ยังไม่สะดวกมากนัก เราต้องคัดลอกโค้ดสแนปช็อตด้วยตนเอง วางลงในคำขอ แลกเปลี่ยนตัวแปร languageCode และ code เมื่อพิจารณาจากความจำเป็นในการแปลมากกว่า 10 ภาษาและโค้ดสแนปช็อต 100 รายการ นี่ไม่ใช่ประสบการณ์ที่เหมาะสม
เพื่อแก้ไขปัญหานี้ เราจัดการบูรณาการ ChatGPT API เข้ากับ Command-Line Interface (CLI) ของเรา เราได้เพิ่มสองคำสั่งใน CLI ของเรา:
logto translate sync: คำสั่งนี้รวบรวมโค้ดสแนปช็อตทั้งหมดที่มีคำถาม // UNTRANSLATED ในทุกภาษา แปลและแทนที่โค้ดสแนปช็อตเดิมด้วยฉบับที่แปลแล้ว
logto translate create [languageCode]: คำสั่งนี้สร้างภาษใหม่ด้วย [languageCode] ที่ระบุไว้และแปลโค้ดสแนปช็อตทั้งหมดจากภาษาต้นแบบ (ภาษาอังกฤษ) ไปเป็นภาษาหมายนาย
แม้ว่าการแปลอาจไม่สมบูรณ์แบบ แต่ก็ยังเป็นการปรับปรุงครั้งใหญ่ เราสามารถมุ่งเน้นไปที่การยืนยันและปรับปรุงผลการแปล แทนที่จะใช้เวลาในกระบวนการแปลจริง
สรุป#
การบูรณาการ ChatGPT API เข้ากับเวิร์กโฟลว์ของเราเพื่อการทำให้ผลิตภัณฑ์เป็นสากลสามารถเป็นเครื่องมือที่มีพลังได้ แต่ต้องการการวางแผนอย่างรอบคอบและคำแนะนำที่ชัดเจนเพื่อให้ได้ผลลัพธ์ที่ดีที่สุด
หากคุณกำลังพัฒนาแอปพลิเคชัน AI การยืนยันตัวตนของผู้ใช้เป็นสิ่งจำเป็น Logto ให้การยืนยันตัวตนของผู้ใช้ที่ง่ายและปลอดภัย และให้ระบบเอกลักษณ์ผู้ใช้รวมสุดทั้งในแอปพลิเคชันของคุณ และยังมีการสนับสนุน ChatGPT plugins ในตัวอีกด้วย สำหรับข้อมูลเพิ่มเติมดูบทความของเราได้ที่นี่:
Implement ChatGPT plugins user authentication with Logto