ตัวละครฝ้ายยิ้มแย้มจากโลโก้ Cotton ดั้งเดิม โดยลบพื้นหลังและตัวอักษรออก
กลับไปที่ห้องจัดแสดง

Cotton

Translation workflow

เปลี่ยนคำแปลที่สร้างขึ้นให้เป็นผลลัพธ์ที่รีวิวได้

เวิร์กโฟลว์การแปลบทสนทนาในเกม โปรเจกต์งานนี้เชื่อมการสร้างคำแปล การตัดสินคุณภาพที่โมเดลรายงาน การลองใหม่ และการรีวิวโดยคน ไว้ในโฟลว์เดียว

2026.05.06 — 2026.05.26

โปรเจกต์งาน · เส้นทางการประมวลผลคำแปล การตัดสิน และการรีวิว

  • เว็บแอปพัฒนาแล้ว · การพัฒนา

Cotton vocabulary

Lens
Refinement Loop
Translation
Quality Estimation
Workflow
Job Control
Human Review
  1. prompt layers
  2. glossary
  3. generation
  4. revision
  1. judge
  2. hard gate
  3. score
  1. intake
  2. checkpoint
  3. spend control
  4. stale sweep
  1. approval
  2. correction
  3. audit trail

Prompt Layers: SYSTEM_PROMPT_L0 · buildTranslateUserMessage · L1 CONTRACT · L3 SPEAKER · L6 SOURCE · L7 INSTRUCTION · ICU PLACEHOLDER · INLINE TAG · TARGET TEXT ONLY · FORCED MAPPING · L2 GLOSSARY · speaker_keyGlossary: glossary_term · fetchGlossaryHits · canonical_form · forbidden_translations · SUBSTRING MATCH · FORCED MAPPING · FORBIDDEN ALTERNATIVE · L2 GLOSSARY · glossary_hits · glossary_complianceGeneration: AdapterRegistry · anthropic-sdk · openai-sdk · claude-local · codex-local · llm_plan · PIVOT_VIA · shouldPivot · COTTON_ADAPTER_CONCURRENCY · NODE_OPTIONS · pivot_register_carry · translation.refinedRevision: buildTranslateUserMessage · L7 INSTRUCTION · runRefinementLoop · priorAttempt · priorCritique · REJECTED BY THE JUDGE · maxTurns · willRetry · RefinementHooks · HOOK ABORT · turn_count_to_final · critique_for_retry · failingDimensions · cost_ceiling_usd · needs_reviewJudge: glossary_hits · runJudge · JUDGE_SYSTEM_PROMPT · judgeModel · TEMPERATURE 0 · parseJudgeResponse · FOUR-SECTION XML · VERBATIM CHUNKS · severity · critique_for_retry · judge_citation · missingHardGates · TRIGGER ABSENT = PASS · judge.scoredHard Gate: ICU PLACEHOLDER · INLINE TAG · FORBIDDEN ALTERNATIVE · hard_gate_fail · hardGatePassed · glossary_compliance · cps_budget_compliant · icu_validity · inline_tag_preserved · length_constraint · HARD GATE FIRST · missingHardGates · TRIGGER ABSENT = PASSScore: HARD GATE FIRST · computeVerdict · cottonEvalScore · WEIGHTED AVERAGE · tone_register · personality_consistent · emotional_state_match · cultural_marker_preserved · accuracy · pivot_register_carry · auto_approve_threshold · failingDimensions · approval_gate · judge.scoredIntake: processXlsxBytes · classifySheetName · parseGoogleSheetsUrl · source_file · content_sha256 · extractStageDirection · speaker_key · ingest_session · segment.ingested · github.push.receivedCheckpoint: translation_progress · last_completed_step · turn_translated · turn_judged · finalized · jobEntryGuard · SELECT FOR UPDATE · attempt_count · DEFAULT_MAX_RESUME_ATTEMPTS · TWO-TX SPLIT · ON CONFLICT DO NOTHINGSpend Control: llm_plan · costCap · cost_ceiling_usd · rateLimit · FailoverDispatcher · haltOnQuota · detectQuotaFromStream · quota_daily_exhausted · auth_revoked · NO AUTO-SWAP · needs_credential · POST /:id/resumeStale Sweep: COTTON_ADAPTER_CONCURRENCY · NODE_OPTIONS · attempt_count · runStaleSweep · STALE_THRESHOLD_INTERVAL · DLQ_ATTEMPT_CAP · LIMIT 200 · re_enqueued · dead_lettered · ORPHAN RE-ENQUEUE · IN-FLIGHT SET · /health/queues · maxStalledCount · needs_reviewApproval: auto_approve_threshold · ingest_session · SELECT FOR UPDATE · needs_credential · POST /:id/resume · POST /:id/approve · POST /:id/unapprove · POST /:id/reject · APPROVE_FROM · REJECT_FROM · needs_review · reviewer_id · HITL · approval_gate · translation.approved · EDIT & APPROVE · actor_idCorrection: POST /:id/correct · corrected_text · CORRECT_FROM · EDIT & APPROVE · human_corrected_segments · human-corrected-after-mt · translation.human_corrected · supersedes · NEW REVISION · IMMUTABLE HISTORYAudit Trail: turn_count_to_final · severity · judge_citation · content_sha256 · segment.ingested · github.push.received · translation.approved · human_corrected_segments · translation.human_corrected · IMMUTABLE HISTORY · event_log · appendNextEvent · ULID · AGGREGATE VERSION · translation_state_log · actor_id · llm_call_log · telemetryHook · judge.scored · translation.refined

คะแนน การลองใหม่ และการรีวิวโดยคน แต่ละอย่างอยู่ที่ขอบเขตของตนเอง

การสร้างและการตัดสินใช้อภิธานศัพท์ร่วมกัน และความล้มเหลวของ hard gate ที่โมเดลผู้ตัดสินรายงานไม่อาจถูกชดเชยด้วยคะแนนเฉลี่ย สถานะระหว่างทางของคำแปลและการตัดสินถูกบันทึกไว้ ขีดจำกัดการลองใหม่และค่าใช้จ่ายแยกจากข้อมูลรับรองที่หมดสิทธิ์ และงานที่ค้างกลับไปยังคิวหรือการรีวิวตามสาเหตุ

ตั้งแต่เริ่มรีโพซิทอรีจนถึงงานที่ยืนยันในช่วงร่วมงาน

เว็บแอปที่ประกอบด้วยหน้าจอแก้ไขและอนุมัติคำแปล API และ worker งาน ทำงานอยู่ในสภาพแวดล้อมการพัฒนา

แผนที่ขั้นตอนการตัดสิน · จากบันทึกการพัฒนาที่เป็นส่วนตัว
การตัดสินคำแปล · การลองใหม่ · การกู้คืนของ CottonAPI คอมมิตข้อความต้นฉบับและ locale เป้าหมายลงฐานข้อมูล แล้วใส่งานลงคิวต่อหนึ่ง locale เป้าหมาย worker ล็อกแถว ตรวจความพยายาม สร้าง draft และสถานะความคืบหน้า สร้างคำแปลด้วยอภิธานศัพท์ และเรียกโมเดลผู้ตัดสินแยกต่างหากด้วยอภิธานศัพท์ชุดเดียวกัน คำแปล (Tx1) และคำตัดสินพร้อมหลักฐาน (Tx2) ถูกบันทึกในทรานแซกชันที่แยกกัน โค้ดรวมผลการตัดสินเพื่อไม่ให้ความล้มเหลวของ hard gate ถูกชดเชยด้วยค่าเฉลี่ย: ผ่านจะถูกยืนยันขั้นสุดท้าย ล้มเหลวจะได้เทิร์นใหม่ ขีดจำกัดเทิร์นหรือค่าใช้จ่ายส่งไปรีวิวโดยคน และสัญญาณ quota หรือการยืนยันตัวตนจะหยุดค่าใช้จ่ายและรอการตรวจข้อมูลรับรอง การกวาดงานค้างดู draft ที่เก่ากว่า 10 นาทีได้สูงสุด 200 รายการ: รายการที่ยังมีความพยายามเหลือแต่หายจากคิวจะถูกใส่คิวใหม่ และรายการที่ใช้ความพยายามหมดแล้วจะไปที่การรีวิวหรือการตรวจข้อมูลรับรองขึ้นอยู่กับว่ามีผลลัพธ์หรือไม่ต้นฉบับ · locale เป้าหมายเซกเมนต์ที่จัดเก็บการรีวิวโดยคนneeds_review · ไม่ใช่การอนุมัติการตรวจข้อมูลรับรองneeds_credentialAPI · การลงทะเบียนงานใส่คิวหลังคอมมิตคิวงานBullMQ · ID งานการเข้าสู่งานล็อกแถว · ตรวจความพยายามอภิธานศัพท์ · บริบทอภิธานศัพท์ของ workspaceเทิร์นการแปลสร้าง · เรียกโมเดลเรียกโมเดลผู้ตัดสิน · พาร์สกฎการตัดสินhard gate · ค่าเฉลี่ยถ่วงน้ำหนักการลองใหม่ · ค่าใช้จ่ายเทิร์น · ค่าใช้จ่าย · quotaสถานะคำแปลdraft · ความคืบหน้าแถวคำแปล · คำตัดสินสถานะ · ล็อกการเรียกการยืนยันขั้นสุดท้ายทรานแซกชันสุดท้ายตรวจคิวเปรียบเทียบสถานะคิวการกวาดงานค้างdraft ที่เกิน 10 นาที · สูงสุด 200อินพุต · คิวการสร้าง · การตัดสินสถานะ · การยอมรับการกู้คืน · การตัดสินใจของคน1ต้นฉบับ2 หลังคอมมิต · ใส่คิวหลังคอมมิต → BullMQ · ID งาน23ส่งงาน4แถวความคืบหน้า5อนุญาตความพยายาม1 อภิธานศัพท์ · อภิธานศัพท์ของ workspace → สร้าง · เรียกโมเดล12 อภิธานศัพท์เดียวกัน · อภิธานศัพท์ของ workspace → เรียกโมเดลผู้ตัดสิน · พาร์ส23Tx1 · คำแปล4Tx2 · การตัดสิน5 คะแนน · gate · เรียกโมเดลผู้ตัดสิน · พาร์ส → hard gate · ค่าเฉลี่ยถ่วงน้ำหนัก56คำตัดสิน7pass8บันทึกขั้นสุดท้าย1คำตัดสิน2เทิร์นถัดไป3ขีดจำกัด · ยกเลิก4quota · การยืนยันตัวตน5กลับมาทำต่อด้วยมือ1draft ที่ค้าง2 ต่ำกว่าขีดจำกัด · draft ที่เกิน 10 นาที · สูงสุด 200 → เปรียบเทียบสถานะคิว23ใส่คิวใหม่4มีผลลัพธ์5ไม่มีผลลัพธ์

การลงทะเบียน → การเข้า

ใส่คิวหลังคอมมิตฐานข้อมูล worker ล็อกแถว ตรวจความพยายาม และสร้าง draft

  1. ต้นฉบับ · locale เป้าหมายข้อมูล: ต้นฉบับใส่คิวหลังคอมมิตAPI · การลงทะเบียนงาน

    เซกเมนต์ต้นฉบับและ locale เป้าหมายของโปรเจกต์ถูกจัดเก็บในฐานข้อมูล ไม่แสดงข้อมูลลูกค้า

  2. ใส่คิวหลังคอมมิตAPI · การลงทะเบียนงานข้อมูล: หลังคอมมิตBullMQ · ID งานคิวงาน

    หลังคอมมิตฐานข้อมูล งานที่มี ID ตามขอบเขตของคำขอจะถูกใส่คิวต่อหนึ่ง locale เป้าหมายที่ใช้งานอยู่ หากใส่คิวล้มเหลว จะบันทึกเพียงคำเตือนและไม่ย้อนคอมมิต (ไม่มี outbox แบบ atomic) จึงต้องมีการกวาดงานค้าง

  3. BullMQ · ID งานคิวงานรัน · การตัดสิน: ส่งงานล็อกแถว · ตรวจความพยายามการเข้าสู่งาน

    BullMQ ส่งงานให้ worker แบบอะซิงโครนัส

  4. ล็อกแถว · ตรวจความพยายามการเข้าสู่งานข้อมูล: แถวความคืบหน้าdraft · ความคืบหน้าสถานะคำแปล

    ภายในทรานแซกชัน แถวความคืบหน้าถูกล็อกและสร้างคำแปล draft การลองใหม่อัตโนมัติของงานที่ยืนยันขั้นสุดท้ายแล้วหรือหยุดเพราะข้อมูลรับรองจะถูกข้าม ส่วนคำขอด้วยมือจัดการแยกต่างหาก

  5. ล็อกแถว · ตรวจความพยายามการเข้าสู่งานรัน · การตัดสิน: อนุญาตความพยายามสร้าง · เรียกโมเดลเทิร์นการแปล

    จำนวนความพยายามเพิ่มหนึ่งภายในขีดจำกัด แล้วเทิร์นการแปลจึงเริ่ม

สร้าง → ตัดสิน → ยืนยันขั้นสุดท้าย

การสร้างและการตัดสินใช้อภิธานศัพท์เดียวกัน คำแปลและคำตัดสินถูกบันทึกแยกกัน และโค้ดรวมผลการตัดสินก่อนยืนยันขั้นสุดท้าย

  1. อภิธานศัพท์ของ workspaceอภิธานศัพท์ · บริบทข้อมูล: อภิธานศัพท์สร้าง · เรียกโมเดลเทิร์นการแปล

    ค้นหาอภิธานศัพท์และบริบทของ workspace แล้วส่งให้การสร้างคำแปล

  2. อภิธานศัพท์ของ workspaceอภิธานศัพท์ · บริบทข้อมูล: อภิธานศัพท์เดียวกันเรียกโมเดลผู้ตัดสิน · พาร์สเทิร์นการแปล

    การตัดสินได้รับข้อจำกัดของอภิธานศัพท์ชุดเดียวกัน

  3. สร้าง · เรียกโมเดลเทิร์นการแปลข้อมูล: Tx1 · คำแปลแถวคำแปล · คำตัดสินสถานะคำแปล

    เรียกโมเดลโดยตรงหรือผ่าน pivot en-US และเขียนการเรียก อีเวนต์ และความคืบหน้าในทรานแซกชันเดียว หากงานรันอีกครั้งหลังการล่ม การเรียกแปลและค่าใช้จ่ายอาจเกิดซ้ำ

  4. เรียกโมเดลผู้ตัดสิน · พาร์สเทิร์นการแปลข้อมูล: Tx2 · การตัดสินแถวคำแปล · คำตัดสินสถานะคำแปล

    คะแนนและหลักฐานของผู้ตัดสินถูกเพิ่มเพียงครั้งเดียวต่อคำแปลและเทิร์น รายการซ้ำจะค้นหาแถวที่มีอยู่ และการอ้างอิงจะเขียนเฉพาะการเพิ่มครั้งแรก ไม่ใช่ทรานแซกชันเดียวกับคำแปล

  5. เรียกโมเดลผู้ตัดสิน · พาร์สเทิร์นการแปลข้อมูล: คะแนน · gatehard gate · ค่าเฉลี่ยถ่วงน้ำหนักกฎการตัดสิน

    คำตอบของโมเดลผู้ตัดสินถูกพาร์สเป็นคะแนนรายมิติและผลของ gate การที่อภิธานศัพท์ผ่านหรือไม่เป็นสิ่งที่โมเดลผู้ตัดสินรายงาน

  6. hard gate · ค่าเฉลี่ยถ่วงน้ำหนักกฎการตัดสินรัน · การตัดสิน: คำตัดสินเทิร์น · ค่าใช้จ่าย · quotaการลองใหม่ · ค่าใช้จ่าย

    ความล้มเหลวของ hard gate ที่ถูกรายงานใด ๆ หมายถึงศูนย์และไม่ผ่าน หลังจากนั้นจึงใช้ค่าเฉลี่ยถ่วงน้ำหนักและเกณฑ์รายมิติ เกณฑ์รวม 8.0 เป็นค่าเริ่มต้นของการตั้งค่า ไม่ใช่คุณภาพคำแปลที่สังเกตได้

  7. เทิร์น · ค่าใช้จ่าย · quotaการลองใหม่ · ค่าใช้จ่ายรัน · การตัดสิน: passทรานแซกชันสุดท้ายการยืนยันขั้นสุดท้าย

    ผลผ่านถูกยืนยันขั้นสุดท้ายเป็น translated

  8. ทรานแซกชันสุดท้ายการยืนยันขั้นสุดท้ายข้อมูล: บันทึกขั้นสุดท้ายสถานะ · ล็อกการเรียกสถานะคำแปล

    แคนดิเดต สถานะ คะแนน และเทิร์นถูกยืนยันขั้นสุดท้าย และ progress finalized กับบันทึกสถานะถูกเขียนในทรานแซกชันเดียว อีเวนต์แปลเสร็จจะส่งออกเฉพาะเมื่อเป็น translated

การลองใหม่ · ขีดจำกัดค่าใช้จ่าย

ไม่ผ่านหมายถึงเทิร์นใหม่ ถึงขีดจำกัดหมายถึงการรีวิวโดยคน quota หรือการยืนยันตัวตนจะหยุดค่าใช้จ่ายและรอผู้ดูแลระบบสั่งทำต่อ

  1. hard gate · ค่าเฉลี่ยถ่วงน้ำหนักกฎการตัดสินรัน · การตัดสิน: คำตัดสินเทิร์น · ค่าใช้จ่าย · quotaการลองใหม่ · ค่าใช้จ่าย

    ความล้มเหลวของ hard gate ที่ถูกรายงานใด ๆ หมายถึงศูนย์และไม่ผ่าน หลังจากนั้นจึงใช้ค่าเฉลี่ยถ่วงน้ำหนักและเกณฑ์รายมิติ เกณฑ์รวม 8.0 เป็นค่าเริ่มต้นของการตั้งค่า ไม่ใช่คุณภาพคำแปลที่สังเกตได้

  2. เทิร์น · ค่าใช้จ่าย · quotaการลองใหม่ · ค่าใช้จ่ายรัน · การตัดสิน: เทิร์นถัดไปสร้าง · เรียกโมเดลเทิร์นการแปล

    คำแปลที่ไม่ผ่านจะถูกสร้างใหม่พร้อมคำแปลก่อนหน้าและคำวิจารณ์ แม้ความล้มเหลวของ hard gate ก็ลองใหม่ก่อนได้ แทนที่จะส่งตรงไปให้คน

  3. เทิร์น · ค่าใช้จ่าย · quotaการลองใหม่ · ค่าใช้จ่ายรัน · การตัดสิน: ขีดจำกัด · ยกเลิกการรีวิวโดยคน

    เมื่อเทิร์นหมดหรือถึงเพดานค่าใช้จ่าย งานจะถูกยืนยันขั้นสุดท้ายเป็น needs_review คำว่า finalized หมายถึงการประมวลผลจบแล้ว ไม่ใช่ว่าคนอนุมัติแล้ว

  4. เทิร์น · ค่าใช้จ่าย · quotaการลองใหม่ · ค่าใช้จ่ายความล้มเหลว · ขีดจำกัด: quota · การยืนยันตัวตนการตรวจข้อมูลรับรอง

    สัญญาณ quota หรือการยืนยันตัวตนจะหยุดค่าใช้จ่ายและตั้งเป็น needs_credential ไม่มีการสลับไปบัญชีหรือผู้ให้บริการอื่นโดยอัตโนมัติ ข้อผิดพลาดด้านการส่งที่ไม่มีสัญญาณหยุดจะกลับไปที่การลองใหม่ของ BullMQ

  5. การตรวจข้อมูลรับรองรัน · การตัดสิน: กลับมาทำต่อด้วยมือBullMQ · ID งานคิวงาน

    ผู้ดูแลระบบที่ตรวจข้อมูลรับรองแล้วเป็นผู้เริ่มใหม่อย่างชัดแจ้ง

การกู้คืนงานค้าง

draft เก่าถูกแยกตามเหตุผล: หายจากคิวหมายถึงใส่คิวใหม่ ความพยายามหมดแล้วหมายถึงการตัดสินใจของคน

  1. draft · ความคืบหน้าสถานะคำแปลการสังเกต · รายงาน: draft ที่ค้างdraft ที่เกิน 10 นาที · สูงสุด 200การกวาดงานค้าง

    อ่านแคนดิเดตที่เป็น draft มานานกว่า 10 นาทีได้สูงสุด 200 รายการ เริ่มจากเก่าสุด คิวรีไม่ล็อก และการอัปเดตกับการบันทึกรันเป็นคำสั่งแยกกัน จึงไม่ได้อธิบายว่าเป็นชุดงานที่ไม่มี race

  2. draft ที่เกิน 10 นาที · สูงสุด 200การกวาดงานค้างรัน · การตัดสิน: ต่ำกว่าขีดจำกัดเปรียบเทียบสถานะคิวตรวจคิว

    เมื่อความพยายามยังน้อยกว่าขีดจำกัด (3) งานจะถูกเทียบกับสถานะคิว active, waiting, delayed และ prioritized ในโค้ด แขนงความพยายามหมดแล้วมาก่อนการตรวจคิวนี้

  3. เปรียบเทียบสถานะคิวตรวจคิวรัน · การตัดสิน: ใส่คิวใหม่BullMQ · ID งานคิวงาน

    หากงานไม่อยู่ในคิว จะถูกใส่คิวอีกครั้ง API ใช้ ID ที่มีส่วนต่อท้ายของคำขอ ขณะที่การกวาดค้นหาด้วย ID ของเซกเมนต์และ locale จึงไม่ได้อธิบายว่าตรงกับทุกคำขอที่กำลังดำเนินอยู่

  4. draft ที่เกิน 10 นาที · สูงสุด 200การกวาดงานค้างรัน · การตัดสิน: มีผลลัพธ์การรีวิวโดยคน

    เมื่อใช้ความพยายามครบ 3 ครั้งและมีผลคำแปล งานจะไปที่ needs_review

  5. draft ที่เกิน 10 นาที · สูงสุด 200การกวาดงานค้างรัน · การตัดสิน: ไม่มีผลลัพธ์การตรวจข้อมูลรับรอง

    เมื่อใช้ความพยายามครบ 3 ครั้งและไม่มีผลลัพธ์ งานจะไปที่ needs_credential

ทุกการเชื่อมต่อมีน้ำหนักเท่ากัน เลือกโฟลว์เพื่อไฮไลต์เฉพาะเส้นทางของโฟลว์นั้นพร้อมขั้นตอนที่มีหมายเลข

  • เส้นทึบ · ทิศทางของอินพุต ผลลัพธ์ และบันทึก
  • เส้นประ · รัน การตัดสิน คำขอ
  • จุดยาว · การสังเกตและการรายงาน แยกจากการตัดสิน
  • เส้นประสั้น · ความล้มเหลว การหยุด ขีดจำกัด
  • เส้นดำหนา · โฟลว์ที่เลือก ตัวเลขบอกลำดับ
  • กล่อง · ขอบเขตของโค้ดหรือสถานะ ระบุชื่อในส่วนหัว
  • ชิปด้านใน · องค์ประกอบของขอบเขตนั้น
  • กล่องจุด · อยู่นอกขอบเขตนั้น
  • เส้นขอบสีส้ม · จุดที่โมเดลตัดสินใจ
  • การสร้าง · ค่าใช้จ่าย · การยืนยันขั้นสุดท้าย
  • การเข้า · กฎการตัดสิน · การกวาด
  • คิว · สถานะ · บันทึก
  • การลงทะเบียน · ตรวจคิว

วาดจากบันทึกการพัฒนาและงานที่เป็นส่วนตัว ไม่แสดงข้อมูลลูกค้าและพาธโค้ด

การกวาดหนึ่งครั้ง
May 26, 2026 การกวาดหนึ่งรอบในสภาพแวดล้อมการพัฒนา: ตรวจ 200 เปลี่ยนสถานะ 106 ใส่คิวใหม่ 2 การเปลี่ยนสถานะไม่ใช่คำแปลที่สำเร็จ และไม่ได้บันทึกการแบ่ง 106 ตามสถานะปลายทาง
ทำไมจึงไม่ใช่ exactly once
บันทึกถูกเขียนโดยไม่ซ้ำ แต่หากงานรันอีกครั้งหลังการล่ม การเรียกโมเดลและค่าใช้จ่ายอาจเกิดซ้ำ ขีดจำกัดการทำงานพร้อมกันเป็นแบบต่อโปรเซส ไม่ใช่ทั่วทั้งคลัสเตอร์
ขอบเขตของคำตัดสิน
การกันไม่ให้ค่าเฉลี่ยกลบความล้มเหลวของอภิธานศัพท์เป็นกฎการรวมผลบน gate ที่ถูกรายงาน ไม่ได้พิสูจน์ว่าพบคำต้องห้ามทุกคำหรือคุณภาพอยู่ในระดับเจ้าของภาษา