การย้ายตัวละครข้ามแอปกับการดึงข้อมูลของคุณออกจากแอปเป็นคนละปัญหากัน บทสนทนา ความทรงจำ และการตั้งค่าอยู่ในฐานข้อมูลของผู้ให้บริการ แต่ตัวละครมักเป็นชิ้นงานที่แยกออกมาได้และถือไว้ในมือเป็นไฟล์ได้จริง ความต่างตรงนี้เองที่ทำให้การ์ดคุ้มค่าแก่การทำความเข้าใจ — การ์ดที่คุณเป็นเจ้าของคือส่วนเดียวของทั้งระบบที่จะอยู่รอด หากแอปปิดตัว เปลี่ยนราคา หรือกลายเป็นสิ่งที่คุณไม่อยากใช้อีกต่อไป
การ์ดตัวละครในฐานะไฟล์
ตามสเปกของชุมชน การ์ดคือไฟล์ PNG (หรือ APNG) ธรรมดา ที่เขียนนิยามตัวละครลงในบล็อก tEXt — ก้อนข้อความติดป้ายชื่อที่โปรแกรมดูรูปจะข้ามไป แต่แอปที่รู้จักการ์ดจะอ่าน JSON ถูกเก็บเป็น UTF-8 ที่เข้ารหัสแบบ base64 การ์ดรุ่น 1 และ 2 ใช้บล็อกชื่อ chara ส่วนการ์ดรุ่น 3 ใช้บล็อกแยกชื่อ ccv3 บางแอปยังให้ส่งออกวัตถุเดียวกันเป็นไฟล์ .json ล้วน ซึ่งมีข้อมูลเหมือนกันแต่ไม่มีรูปอวาตาร์
สเปก V3 เพิ่มกล่องที่สองเข้ามาคือ CHARX (นามสกุลไฟล์ .charx): ไฟล์บีบอัด ZIP ที่มี card.json อยู่ที่ราก และมีโฟลเดอร์ assets/ อยู่ข้าง ๆ โดยการ์ดอ้างถึงผ่าน URI รูปแบบ embeded:// CHARX เกิดขึ้นเพราะการ์ดสมัยใหม่อาจพ่วงชุดภาพสีหน้า ภาพพื้นหลัง หรือไฟล์เสียงมาด้วย และของพวกนี้ใส่ลงในบล็อกข้อความในขนาดที่สมเหตุสมผลไม่ได้
ผลในทางปฏิบัติของการมีสองบล็อกคือ การ์ดใบเดียวอาจ "ครบ" และ "ว่างเปล่า" ไปพร้อมกัน ขึ้นอยู่กับว่าใครเป็นคนอ่าน แอปที่รู้จักเฉพาะบล็อก chara จะมองไม่เห็นอะไรเลยในไฟล์ที่เป็น V3 ล้วน ในทางปฏิบัติ เครื่องมือที่เขียน V3 มักเขียนทั้งสองบล็อกลงไป เพื่อให้ไฟล์เดียวเปิดได้ทั้งไคลเอนต์เก่าและใหม่ — แต่นั่นเป็นความเอื้อเฟื้อของแอปที่ส่งออก ไม่ใช่สิ่งที่รูปแบบไฟล์รับประกัน
สามรุ่น เทียบกันทีละฟิลด์
การรู้ว่าการ์ดของคุณเป็นรุ่นไหน บอกได้ตั้งแต่ก่อนทดลองว่ามีอะไรบ้างที่มีโอกาสรอดจากการนำเข้า
| รูปแบบ | เก็บไว้ที่ไหน | บรรจุอะไร | ข้อจำกัดหลัก |
|---|---|---|---|
| V1 | บล็อก chara | หกฟิลด์เรียบ ๆ: ชื่อ คำอธิบาย บุคลิก ฉาก ข้อความแรก และตัวอย่างบทสนทนา | ไม่มี lorebook ไม่มี system prompt ไม่มีข้อความทักทายหลายแบบ |
| V2 | บล็อก chara โดยฟิลด์ซ้อนอยู่ใต้ data | ฟิลด์ของ V1 ทั้งหมด บวกโน้ตผู้สร้าง, system prompt, คำสั่งหลังประวัติแชท, ข้อความทักทายสำรอง, character book ฝังใน, แท็ก, ผู้สร้าง, เวอร์ชันตัวละคร และวัตถุอิสระ extensions | ไม่มีรายการไฟล์ประกอบ และ extensions ถูกออกแบบให้ขึ้นกับแต่ละแอป |
| V3 | บล็อก ccv3 | ทุกอย่างใน V2 บวกรายการไฟล์ประกอบ ชื่อเล่น โน้ตผู้สร้างหลายภาษา รายการแหล่งที่มา ข้อความทักทายเฉพาะโหมดกลุ่ม และตัวกำกับ lorebook เช่น ความลึกในการแทรกและเงื่อนไขการเรียกใช้ | มองไม่เห็นสำหรับตัวอ่านที่ดูเฉพาะ chara |
| CHARX | ZIP ที่มี card.json + assets/ | การ์ด V3 พร้อมไฟล์ภาพและเสียงจริงที่การ์ดอ้างถึง | มีประโยชน์เฉพาะเมื่อแอปปลายทางแตกไฟล์เป็น |
มีรายละเอียดสองข้อในสเปกที่สำคัญกว่าที่เห็น ข้อแรก V2 กำหนดว่าเครื่องมือแก้ไข ต้องไม่ทำลายคู่คีย์-ค่าที่ไม่รู้จัก — วัตถุ extensions ถูกออกแบบให้คงอยู่แม้กับแอปที่ไม่เข้าใจมัน โดยตั้งชื่อคีย์แยกตามแอปเพื่อไม่ให้ชนกัน ข้อสอง V3 เป็นซูเปอร์เซ็ตของ V2 อย่างเคร่งครัด จึงมีเส้นทางลดรุ่นอยู่: แอปสามารถเติมวัตถุ V2 ย้อนกลับจากการ์ด V3 ได้ แต่ต้องถอดตัวกำกับออกในกระบวนการนั้น การถอดตรงนี้เองคือจุดที่พฤติกรรมเปลี่ยนไปทั้งที่ไม่มีฟิลด์ไหนหายให้เห็น ส่วนว่าแต่ละฟิลด์มีไว้ทำอะไร อ่านได้ใน กายวิภาคของการ์ดตัวละคร
อะไรรอด อะไรเสื่อม อะไรไม่เคยย้ายไป
การแยกเนื้อหาในการ์ดออกเป็นสามกอง ทำให้เห็นความเสี่ยงชัดขึ้น
| กอง | เนื้อหา | เหตุผล |
|---|---|---|
| ย้ายได้แน่นอน | ชื่อ คำอธิบาย บุคลิก ฉาก ข้อความแรก ตัวอย่างบทสนทนา | เป็นฟิลด์ของ V1 ซึ่งแอปที่รองรับการ์ดแทบทุกตัวอ่านได้ |
| ย้ายได้ถ้าตัวอ่านใหม่พอ | System prompt, คำสั่งหลังประวัติแชท, ข้อความทักทายสำรอง, lorebook ฝังใน, แท็ก, ข้อมูลผู้สร้าง | เป็นของที่ V2 เพิ่มเข้ามา ตัวนำเข้าที่รู้จักแค่ V1 จะข้ามไปเฉย ๆ |
| เสื่อมแบบเงียบ ๆ | ตัวกำกับของ lorebook, ไฟล์ประกอบและภาพสีหน้า, ข้อความทักทายเฉพาะกลุ่ม, extensions ที่ตั้งชื่อแยกตามแอป | ถูกตัดทิ้งหรือยุบรวมเมื่อการ์ด V3 ถูกอ่านเป็น V2 หรือเมื่อไคลเอนต์ที่รองรับเฉพาะ PNG นำเข้า CHARX |
| ไม่เคยย้ายไป | ประวัติแชท ความทรงจำที่แอปสร้างขึ้น การเลือกโมเดล ค่า sampler สถานะการสมัครสมาชิก | ไม่มีสิ่งใดเป็นส่วนหนึ่งของการ์ด ทุกอย่างอยู่ฝั่งผู้ให้บริการ |
แถวสุดท้ายคือสิ่งที่ทำให้คนตกใจกลางคันระหว่างย้ายแอป การส่งออกตัวละครไม่ใช่การสำรองความสัมพันธ์ — บทสนทนาและความทรงจำระยะยาวที่แอปสร้างขึ้นให้คุณเป็นคนละเรื่อง มักดึงออกมายากกว่า และบ่อยครั้งก็ย้ายไปใช้ต่อไม่ได้จริง เรื่องนี้อยู่ใน การส่งออกข้อมูลจากแอปคู่คุย ส่วนเหตุผลที่ความทรงจำทำงานแบบนั้นอยู่ใน ความจำและความต่อเนื่อง
มีสองอย่างที่เปลี่ยนไปเองโดยไม่มีใครแตะ การ์ด V3 เก็บ creation_date และ modification_date ไว้เป็น Unix timestamp และสเปกกำหนดให้แอปเขียนวันที่แก้ไขใหม่ตอนส่งออก ผลคือการ์ดที่คุณแค่ย้ายไปเฉย ๆ จะดูเหมือนถูกแก้ไขแล้ว และหลักฐานที่มาที่เชื่อถือได้ซึ่งยังเหลืออยู่ก็มีแค่วันที่สร้างดั้งเดิม ถ้าคุณเก็บคลังการ์ดที่ทำเองไว้ ให้จดวันที่ไว้ก่อนส่งออก ไม่ใช่หลังส่งออก
การนำเข้าที่ถูกปฏิเสธก็ไม่ได้แปลว่าการ์ดเสียเสมอไป สเปกอนุญาตให้แอปปฏิเสธไฟล์ CHARX ได้ทันทีหากไฟล์ใหญ่เกินไป เสียหาย ถูกเข้ารหัสโดยไม่มีวิธีถอดรหัสที่รองรับ หรือไม่ใช่ไฟล์ zip ที่ถูกต้องตั้งแต่แรก ถ้าแอปหนึ่งไม่ยอมรับไฟล์ที่อีกแอปเปิดได้สบาย ๆ ให้ลองเปิดเป็น zip ดูก่อน อย่าเพิ่งสรุปว่าตัวละครหายไปแล้ว
ทำไมการ์ดที่นำเข้าครบถ้วนถึงยังให้ผลต่างออกไป
สมมติว่าการย้ายไม่สูญเสียอะไรเลย และทุกฟิลด์มาถึงครบ ตัวละครก็ยังอาจให้ความรู้สึกเหมือนคนละคน เพราะการ์ดเป็นเพียงหนึ่งในหลายอินพุต แอปปลายทางใส่ system prompt พื้นฐานของตัวเอง รันโมเดลคนละตัว ใช้ค่า sampler ของตัวเอง และแบ่งสัดส่วนหน้าต่างบริบทให้ lorebook กับบทสนทนาที่กำลังดำเนินอยู่ไม่เท่ากัน การ์ดที่เผื่อรายละเอียดโลกไว้ราวหนึ่งพันโทเคนในแอปหนึ่ง อาจถูกตัดทิ้งไปเกือบหมดในอีกแอปหนึ่ง
เรื่องนี้ควรพูดให้ชัด เพราะปฏิกิริยาแรกมักเป็นการลงมือแก้การ์ด ซึ่งจะทำให้การ์ดพังในแอปต้นทางที่เดิมใช้งานได้ดี ให้ตรวจฝั่งการตั้งค่าก่อน วิธีเปรียบเทียบใน เขียนตัวละครที่จืดแล้วใหม่ ใช้ได้ตรง ๆ: ใช้ข้อความเปิดชุดเดิม และเปลี่ยนทีละตัวแปร ถ้ารายการใน lorebook หยุดทำงาน สาเหตุที่เป็นไปได้มากกว่าคือเงื่อนไขการเรียกใช้หรือโควตาโทเคนต่างกัน ไม่ใช่ข้อความหายไป — ดู การสร้างโลกสำหรับการสวมบทบาท AI
แอปที่ไม่มีประตูให้ออกเลย
ทั้งหมดข้างต้นตั้งอยู่บนสมมติฐานว่าแอปทั้งสองฝั่งพูดภาษาการ์ดเป็น แต่แอปคู่คุยสำหรับผู้ใช้ทั่วไปจำนวนมากไม่เป็น ตัวละครมีสภาพเป็นแถวข้อมูลในฐานข้อมูล หน้าจอแก้ไขมีแค่ช่องคำอธิบายสั้น ๆ และไม่มีปุ่มส่งออก ไม่ใช่เพราะข้อมูลซับซ้อน แต่เพราะการย้ายข้อมูลไม่ใช่เป้าหมายของผลิตภัณฑ์ การตัดสินเรื่องนี้อย่างเป็นธรรมสำคัญ: แอปปิดไม่ได้แปลว่าแย่กว่าโดยอัตโนมัติ และหลายคนก็ไม่เคยคิดจะย้ายอยู่แล้ว แต่มันเปลี่ยนความหมายของสิ่งที่คุณกำลังลงแรง เมื่อคุณใช้เวลาหลายสัปดาห์ขัดเกลาบุคลิกอยู่ในนั้น
ตรวจดูประตูก่อนที่จะต้องใช้ ไม่ใช่หลังจากนั้น ถ้าแอปรองรับการส่งออกการ์ด โดยทั่วไปจะระบุไว้ในหน้าตั้งค่าหรือหน้าช่วยเหลือ และตอนส่งออกจะบอกชื่อรูปแบบไฟล์ ถ้าไม่พบคำว่า "ส่งออก" ที่ไหนเลย ให้ถือว่าตัวละครนำออกมาไม่ได้ และเก็บสำเนาข้อความที่คุณเขียนไว้เอง เอกสารธรรมดาที่มีคำอธิบาย บุคลิก และข้อความทักทาย เป็นการสำรองข้อมูลแบบหยาบแต่ได้ผล และไม่มีการเปลี่ยนรูปแบบไฟล์ใดทำให้มันพังได้ ส่วนแต่ละแอปให้อิสระในการแก้ไขมากแค่ไหนตั้งแต่ต้น ก็เป็นหนึ่งในสิ่งที่เราดูใน อันดับแอป และ รีวิว MusePick ก็พิจารณาแอปสายสวมบทบาทในแง่มุมนี้
เช็กลิสต์ก่อนย้าย
- ส่งออกในรูปแบบที่ครบที่สุดเท่าที่มีให้. ถ้ามีทั้ง PNG และ JSON ให้เอาทั้งคู่ — JSON ตรวจสอบและซ่อมง่ายกว่า ส่วน PNG พกอวาตาร์มาด้วย
- จดรุ่นไว้. หน้าต่างส่งออกมักบอกว่าเป็น V2, V3 หรือ CHARX ถ้าไม่บอก ให้สันนิษฐานอย่างปลอดภัยว่าเป็น V2
- อย่าแตะไฟล์ต้นฉบับ. การส่งออกซ้ำจากแอปปลายทางอาจลดรุ่นการ์ด V3 ลงเป็น V2 แบบเงียบ ๆ และคุณกู้ตัวกำกับคืนจากสำเนาที่ถูกลดรุ่นแล้วไม่ได้
- นำเข้าแล้วอ่านหน้าจอแก้ไขทีละฟิลด์. เทียบกับการ์ดต้นทาง: คำอธิบาย บุคลิก ตัวอย่างบทสนทนา ข้อความทักทาย และจำนวนรายการใน lorebook ของที่หายจะโผล่ตรงนี้ ไม่ใช่ในห้องแชท
- ทดสอบด้วยข้อความเปิดชุดเดิมสามแบบ. แบบเบา ๆ หนึ่ง แบบที่มีน้ำหนักทางอารมณ์หนึ่ง และแบบที่ขอให้ตัวละครเป็นฝ่ายเริ่มก่อนหนึ่ง — ใช้สามแบบเดียวกันในทั้งสองแอป ผลต่างที่ได้จึงจะมีความหมาย
- สร้างสิ่งที่รูปแบบไฟล์พาไปไม่ได้ขึ้นใหม่. อวาตาร์และภาพสีหน้า ข้อความทักทายหลายแบบ และรายการ lorebook ที่ไม่ได้ตามมา ทำเป็นขั้นตอนสุดท้าย หลังจากรู้แล้วว่าอะไรขาดจริง ๆ
ถ้าทำตามลำดับนี้ การย้ายใช้เวลาไม่ถึงชั่วโมง และให้คำตอบที่ใช้ได้ยาว ๆ ว่า ส่วนไหนของตัวละครอยู่ในไฟล์ และส่วนไหนอยู่ในแอป ความแตกต่างข้อนี้คือเนื้อแท้ของคำว่าย้ายข้อมูลได้ และควรรู้ไว้ก่อนถึงเวลาจำเป็น ถ้าคุณกำลังสร้างตัวละครจากศูนย์โดยเผื่อการย้ายในอนาคตไว้ด้วย สร้างตัวละครสวมบทบาทตัวแรกของคุณ และ เครื่องมือสร้างตัวละคร AI ทำงานอย่างไร ครอบคลุมว่าอะไรควรอยู่ในการ์ด ไม่ใช่ในแอป
บทความที่เกี่ยวข้องบน CompanionRank
กายวิภาคของการ์ดตัวละคร การส่งออกข้อมูลจากแอปคู่คุย การสร้างโลกสำหรับการสวมบทบาท AIคำถามที่พบบ่อย
ย้ายการ์ดตัวละครจากแอปหนึ่งไปอีกแอปได้ไหม
ได้ก็ต่อเมื่อแอปทั้งสองใช้รูปแบบการ์ดเดียวกัน แอปที่สร้างบนสเปกการ์ดตัวละครของชุมชนจะอ่านและเขียนไฟล์ PNG ที่ฝัง JSON ของการ์ดไว้ข้างใน การ์ดที่ส่งออกจากแอปหนึ่งจึงมักเปิดในอีกแอปได้ ส่วนแอปคู่คุยสำหรับผู้ใช้ทั่วไปจำนวนมากไม่เปิดให้เข้าถึงไฟล์การ์ดเลย และในกรณีนั้นก็ไม่มีช่องทางที่รองรับให้นำตัวละครออกมาได้
การ์ดตัวละคร V2 กับ V3 ต่างกันอย่างไร
V2 ห่อหกฟิลด์เดิมของ V1 ไว้ในวัตถุ data แล้วเพิ่ม system prompt, คำสั่งหลังประวัติแชท, ข้อความทักทายสำรอง, lorebook ฝังใน, แท็ก, ข้อมูลผู้สร้าง และวัตถุ extensions ส่วน V3 เป็นซูเปอร์เซ็ตของ V2 คือคงทุกฟิลด์ของ V2 ไว้ และเพิ่มรายการไฟล์ประกอบ ชื่อเล่น โน้ตผู้สร้างหลายภาษา รายการแหล่งที่มา ข้อความทักทายเฉพาะโหมดกลุ่ม และตัวกำกับของ lorebook ทั้งนี้ V3 ถูกเก็บไว้คนละบล็อก การ์ดที่เป็น V3 ล้วนจึงอาจดูว่างเปล่าสำหรับตัวอ่านที่รู้จักแค่ V2
ทำไมตัวละครที่นำเข้ามาถึงทำตัวต่างไปในแอปใหม่
การ์ดเป็นเพียงหนึ่งในหลายอินพุต แอปใหม่ใส่ system prompt โมเดล ค่า sampler และโควตาบริบทของตัวเองเข้ามา และอาจตัดทอนหรือเมินฟิลด์ที่ตัวเองไม่รองรับ ตัวละครที่อ่านแล้วเหมือนกันทุกตัวอักษรในหน้าจอแก้ไขของทั้งสองแอป ก็ยังให้คำตอบต่างกันได้ ซึ่งเป็นความต่างของการตั้งค่า ไม่ใช่การนำเข้าที่ผิดพลาด