取自 Cotton 原有标志、去除背景和文字的微笑棉花角色
返回展厅

Cotton

Translation workflow

让生成的翻译成为可审核的结果。

一个游戏对白翻译工作流。

2026.05.06 — 2026.05.26

工作项目 · 翻译处理、判定与审核路径

  • Web 应用已实现 · 开发环境

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

分数、重试与人工审核,各守其边界。

生成与判定共用术语表,评判模型报告的硬性关卡失败无法被平均分抵消。翻译与判定的中间状态都有记录,重试和成本上限与凭据耗尽分开处理,停滞作业依原因退回队列或审核。

这一工作项目将翻译生成、模型报告的质量判定、重试和人工审核连成一个流程。

自仓库启动起,至合作期间确认的工作为止

由翻译编辑与审批界面、API 和作业 worker 组成的 Web 应用,在开发环境中运行。

判定流程结构图 · 依据非公开实现记录
Cotton 翻译判定 · 重试 · 恢复API 将原文和目标语言提交到数据库,然后为每个目标语言将一个作业加入队列。worker 锁定该行、检查尝试次数、创建 draft 和进度状态,使用术语表生成译文,并以同一术语表单独调用评判模型。译文(Tx1)与判定及其依据(Tx2)记录在不同的事务中。代码汇总判定,使硬性关卡失败不被平均分抵消:通过则定稿,失败则进入下一轮次,达到轮次或成本上限则转入人工审核,出现配额或认证信号则停止花费并等待凭据检查。停滞巡检最多查看 200 个超过 10 分钟的 draft:尝试次数尚有剩余但不在队列中的重新入队,尝试次数用尽的依据是否有结果转入审核或凭据检查。原文 · 目标语言已存储的片段人工审核needs_review · 非审批凭据检查needs_credentialAPI · 作业登记提交后入队作业队列BullMQ · 作业 ID作业进入行锁 · 尝试检查术语表 · 上下文工作区术语表翻译轮次生成 · 模型调用评判模型调用 · 解析判定规则硬性关卡 · 加权平均重试 · 花费轮次 · 成本 · 配额翻译状态draft · 进度译文 · 判定行状态 · 调用日志定稿定稿事务队列核对比对队列状态停滞巡检超过 10 分钟的 draft · 最多 200 个输入 · 队列生成 · 判定状态 · 验收恢复 · 人工决定1原文2提交后3投递作业4进度行5允许尝试1术语表2同一术语表3Tx1 · 翻译4Tx2 · 判定5分数 · 关卡6判定7pass8定稿记录1判定2下一轮次3上限 · 中止4配额 · 认证5手动恢复1停滞 draft2低于上限3重新入队4有结果5无结果

登记 → 进入

数据库提交后入队;worker 锁定该行、检查尝试并创建 draft。

  1. 原文 · 目标语言数据: 原文提交后入队API · 作业登记

    原文片段和项目的目标语言存储在数据库中。不展示客户数据。

  2. 提交后入队API · 作业登记数据: 提交后BullMQ · 作业 ID作业队列

    数据库提交后,为每个启用的目标语言加入一个带请求级 ID 的作业。若入队失败,只记录一条警告,提交不会回滚(没有原子 outbox),停滞巡检正因此而存在。

  3. BullMQ · 作业 ID作业队列运行 · 判定: 投递作业行锁 · 尝试检查作业进入

    BullMQ 以异步方式将作业交给 worker。

  4. 行锁 · 尝试检查作业进入数据: 进度行draft · 进度翻译状态

    在事务中锁定进度行并创建 draft 译文。已定稿或因凭据暂停的作业不做自动重试;手动请求另行处理。

  5. 行锁 · 尝试检查作业进入运行 · 判定: 允许尝试生成 · 模型调用翻译轮次

    尝试次数在上限内加一,然后开始翻译轮次。

生成 → 判定 → 定稿

生成与判定使用同一术语表;译文与判定分开记录,由代码汇总判定后定稿。

  1. 工作区术语表术语表 · 上下文数据: 术语表生成 · 模型调用翻译轮次

    查找工作区术语表和上下文,并传给生成步骤。

  2. 工作区术语表术语表 · 上下文数据: 同一术语表评判模型调用 · 解析翻译轮次

    判定也获得同样的术语表约束。

  3. 生成 · 模型调用翻译轮次数据: Tx1 · 翻译译文 · 判定行翻译状态

    直接或经 en-US 中转调用模型,调用、事件和进度写入同一个事务。作业崩溃后再次运行时,翻译调用及其成本可能重复。

  4. 评判模型调用 · 解析翻译轮次数据: Tx2 · 判定译文 · 判定行翻译状态

    评判分数与依据按每个译文和轮次只插入一次;重复时查找已有行,引用只在首次插入时写入。与翻译不在同一事务中。

  5. 评判模型调用 · 解析翻译轮次数据: 分数 · 关卡硬性关卡 · 加权平均判定规则

    评判模型的回答被解析为各维度分数和关卡结果。术语表是否通过,是评判模型报告的结果。

  6. 硬性关卡 · 加权平均判定规则运行 · 判定: 判定轮次 · 成本 · 配额重试 · 花费

    只要报告有任何硬性关卡失败,即为 0 分并判定失败;之后才应用加权平均和各维度阈值。总体阈值 8.0 是配置默认值,而非观测到的翻译质量。

  7. 轮次 · 成本 · 配额重试 · 花费运行 · 判定: pass定稿事务定稿

    通过则定稿为 translated。

  8. 定稿事务定稿数据: 定稿记录状态 · 调用日志翻译状态

    候选、状态、分数和轮次被定稿,进度 finalized 与状态日志写入同一个事务。只有 translated 时才发出翻译完成事件。

重试 · 花费上限

未通过则进入下一轮次;达到上限则转人工审核;配额或认证问题则停止花费,等待运维人员恢复。

  1. 硬性关卡 · 加权平均判定规则运行 · 判定: 判定轮次 · 成本 · 配额重试 · 花费

    只要报告有任何硬性关卡失败,即为 0 分并判定失败;之后才应用加权平均和各维度阈值。总体阈值 8.0 是配置默认值,而非观测到的翻译质量。

  2. 轮次 · 成本 · 配额重试 · 花费运行 · 判定: 下一轮次生成 · 模型调用翻译轮次

    未通过的译文会结合上一版译文和评语重新生成。即使是硬性关卡失败,也可以先重试,而不是直接交给人。

  3. 轮次 · 成本 · 配额重试 · 花费运行 · 判定: 上限 · 中止人工审核

    轮次用尽或达到成本上限时,作业定稿为 needs_review。finalized 表示处理结束,并不表示有人已批准。

  4. 轮次 · 成本 · 配额重试 · 花费失败 · 上限: 配额 · 认证凭据检查

    配额或认证信号会停止花费并设为 needs_credential。不会自动切换到其他账户或提供商。没有停止信号的传输错误交回 BullMQ 重试。

  5. 凭据检查运行 · 判定: 手动恢复BullMQ · 作业 ID作业队列

    由核实过凭据的运维人员显式重新启动。

停滞作业恢复

旧 draft 按原因区分:不在队列中则重新入队,尝试用尽则交由人决定。

  1. draft · 进度翻译状态观测 · 报告: 停滞 draft超过 10 分钟的 draft · 最多 200 个停滞巡检

    按从旧到新读取最多 200 个处于 draft 超过 10 分钟的候选。查询不加锁,更新与日志作为独立语句执行,因此不将其描述为无竞态的批处理。

  2. 超过 10 分钟的 draft · 最多 200 个停滞巡检运行 · 判定: 低于上限比对队列状态队列核对

    尝试次数少于上限(3 次)时,将作业与 active、waiting、delayed 和 prioritized 队列状态比对。在代码中,尝试用尽分支位于这一队列检查之前。

  3. 比对队列状态队列核对运行 · 判定: 重新入队BullMQ · 作业 ID作业队列

    作业不在队列中时重新入队。API 使用带请求后缀的 ID,而巡检按片段和语言 ID 查找,因此不将其描述为能匹配所有进行中的请求。

  4. 超过 10 分钟的 draft · 最多 200 个停滞巡检运行 · 判定: 有结果人工审核

    3 次尝试全部用完且存在翻译结果时,作业转入 needs_review。

  5. 超过 10 分钟的 draft · 最多 200 个停滞巡检运行 · 判定: 无结果凭据检查

    3 次尝试全部用完且没有结果时,作业转入 needs_credential。

所有连接以相同粗细显示。选择一个流程,即只突出显示其路径,并标出步骤编号。

  • 实线 · 输入、结果与记录的流向
  • 虚线 · 运行、判定、请求
  • 长点线 · 观测与报告,独立于判定
  • 短虚线 · 失败、停止、上限
  • 粗黑线 · 所选流程;数字表示顺序
  • 方框 · 代码或状态边界,标题栏注明名称
  • 内层小框 · 该边界中的组件
  • 点线框 · 该边界之外
  • 橙色轮廓 · 模型作出判断之处
  • 生成 · 花费 · 定稿
  • 进入 · 判定规则 · 巡检
  • 队列 · 状态 · 记录
  • 登记 · 队列核对

依据非公开的实现与开发记录绘制。不展示客户数据和代码路径。

一次巡检
2026年5月26日,开发环境中的一个巡检周期:检查 200 个,106 次状态转换,2 个重新入队。状态转换不等于翻译成功,106 个按目标状态的细分未记录。
为何不是恰好一次
记录不会重复写入,但作业崩溃后再次运行时,模型调用及其成本可能重复。并发上限按进程计,而非整个集群。
判定的范围
不让平均分掩盖术语表失败,是针对已报告关卡的汇总规则。它不能证明所有禁用词都会被找出,也不能证明质量达到母语水平。