
业务专业翻译 Skill
核心原则
- 严格按步骤编号顺序执行(1→2→3→4),绝对禁止跳步、合并步骤或提前执行后续步骤
- 每个步骤必须独立完成并输出明确的完成确认,才能进入下一步骤
- 禁止修改任何文本样式属性 — 这是最高优先级强制规则:
batch_edit的U()更新操作只能包含content字段,绝对禁止修改或携带以下任何样式属性:字体(fontName、fontFamily)、字体大小(fontSize)、字重(fontWeight)、颜色(fill、fills)、行高(lineHeight)、字间距(letterSpacing)、对齐方式(textAlignHorizontal、textAlignVertical)、文本自动调整大小(textAutoResize)等。 - 知识库翻译必须原样使用,禁止自行修改或"优化"
- 不在知识库中的词条必须使用地道英文翻译,不得跳过或遗漏
- 所有中文文本都必须被翻译,翻译完成后需逐一核对确认无遗漏
工作流程
步骤 1 询问知识库+翻译模式 → 步骤 2 加载知识库+提取节点 → 步骤 3 匹配翻译 → 步骤 4 批量替换+核对
绝对禁止:
- 在步骤 1 用户回复选择之前,禁止自行假设知识库选择并继续执行
- 禁止在一条消息中同时执行多个步骤
- 每个步骤结束后必须停下来,输出该步骤的完成确认,等待进入下一步骤
步骤 1:询问业务知识库 + 翻译模式
必须等待用户选择后才能继续,禁止自行假设选择并跳过等待。
使用 ask_followup_question 工具向用户提问:
请选择翻译配置:
1. Desk(智能客服)
2. TCCC(云联络中心)
3. 不使用业务知识库,直接翻译
翻译模式:
1. 在原稿翻译 — 直接在当前设计稿上替换文本
2. 新建设计稿翻译 — 复制当前选中设计稿节点,在复制的节点中翻译
| 业务 | 知识库文件 |
|---|---|
| Desk | references/Desk_国际站词条.json |
| TCCC | references/TCCC_国际站词条.json |
步骤 2:加载知识库 + 提取中文文本节点
关键:根据步骤 1 的翻译模式选择不同的执行流程。
- 在原稿翻译:直接对原节点执行
--extract --kb,提取结果即为待翻译节点- 新建设计稿翻译:先获取原节点位置尺寸,再通过
batch_edit复制原节点创建副本(显式传入x/y坐标,放置在原节点右侧 +100px,防止覆盖原稿),获取副本新节点 ID 后,直接对副本执行--extract --kb。这样提取结果中的 nodeId 就是副本的新 ID,可直接用于步骤 4 的替换操作,无需额外做 nodeId 映射
在原稿翻译
node scripts/extract-and-match.js --extract \
--fileId <fileId> \
--nodeIds <原节点ID> \
--kb references/TCCC_国际站词条.json \
[--readDepth 15] \
[--output /tmp/extract-result.json]
新建设计稿翻译
副本定位策略(防止覆盖原稿):
- 禁止仅依赖
positionDirection: "right"自动定位 — 在复杂画布或小助手环境下,自动定位可能失效导致副本覆盖原稿- 必须先通过
fetch_editor_state或batch_read获取原节点的x、y、width,然后显式计算副本坐标(原节点右侧 + padding),在 Copy 操作中同时传入x、y锁定位置
第 1 步:获取原节点位置和尺寸 + 页面 ID
通过 fetch_editor_state 获取:
- 选中节点的
x、y、width(若 selection 中未包含坐标信息,用batch_read补充获取)。记为:origX、origY、origWidth - 当前页面 ID(
pageId)— 副本的父节点,用于将副本独立放置在画布上,而非嵌套进原节点内部
第 2 步:通过 batch_edit 复制原节点,显式指定副本坐标
Copy 操作参数语义:
- 第 1 个参数(path):复制源 — 被复制的原节点 ID
- 第 2 个参数(parent):父节点 — 副本的挂载位置,必须是页面 ID(
pageId),不能是原节点自身
// batch_edit 操作
// 计算副本 x 坐标 = 原节点 x + 原节点 width + 间距(100)
// 副本 y 坐标 = 原节点 y(水平排列,与原稿顶部对齐)
copyNode=C("<原节点ID>", "<pageId>", {
name: "Translated Copy",
x: <origX + origWidth + 100>,
y: <origY>,
positionDirection: "right",
positionPadding: 100
})
// 从返回值获取副本新节点 ID,例如 "103:8757"
关键:
x、y为显式数值(非字符串),直接锁定副本位置。positionDirection+positionPadding作为兜底,但以x、y显式坐标为准。若 Copy 后副本位置仍不正确,立即追加一次U(copyNode, {x: <计算值>, y: <origY>})强制修正。
第 3 步:对副本执行 --extract --kb(注意:--nodeIds 传副本的新节点 ID,--kb 必须传入以完成知识库匹配):
node scripts/extract-and-match.js --extract \
--fileId <fileId> \
--nodeIds <副本新节点ID> \
--kb references/TCCC_国际站词条.json \
[--readDepth 15] \
[--output /tmp/extract-result.json]
脚本自动完成:
- 两步探活获取节点数据(通过
ardot-client.js,resolveInstances: true,readDepth: 15) - 加载知识库 JSON 为
Map<中文, 英文>(--kb可选,不传则仅提取不匹配) - 递归提取所有含中文的可见 TEXT 节点(过滤
visible: false) - 三级匹配(精确 → 包含 → 组合),输出
matched+unmatched+summary
AI 需先通过
fetch_editor_state获取fileId和选中节点 ID(selection[0].id),传入脚本的--fileId和--nodeIds参数。 若无选中节点,从 URL 的node_id参数解析节点 ID,fileId从 URL 路径获取。
节点过滤规则(由 extractChineseTextNodes() 自动完成):
- 无文本内容的帧(纯图片/截图)→ 跳过
- 节点自身或任一祖先
visible: false→ 跳过(隐藏节点不翻译) - TEXT 节点的
characters不含中文 → 跳过
步骤 3:匹配翻译
步骤 2 的 --extract 已自动完成三级匹配,AI 仅需处理输出中的 unmatched 列表。禁止输出翻译映射表,直接进入步骤 4 执行替换。
匹配策略优先级(脚本自动执行 1-2,AI 执行 3)
- 精确匹配:中文文本与知识库词条完全一致 → 直接使用知识库翻译
- 组合匹配:中文文本可拆分为多个连续知识库词条,完全覆盖整个文本 → 贪心匹配组合翻译
- 自行翻译:知识库中无匹配(文本不能通过精确匹配或组合匹配被知识库完全覆盖)→ AI 按以下规范翻译
自行翻译规范(仅适用于 unmatched 列表)
原则:地道自然、简洁准确、语境适配、同页一致
步骤 4:批量替换 + 核对
第 1 步:生成 AI 翻译文件
AI 将步骤 3 的 unmatched 翻译结果写入 JSON 文件:
# 创建 /tmp/ai-translate.json,格式为 [{nodeId, translation}, ...]
第 2 步:用脚本生成 batch_edit 操作
node scripts/extract-and-match.js --apply \
--extract /tmp/extract-result.json \
--translate /tmp/ai-translate.json \
[--batchSize 25]
脚本自动合并 matched(知识库匹配)和 AI 翻译结果,生成每批最多 25 个 batch_edit 操作字符串。输出格式:
Total: 70 | Batches: 3
===BATCH_1===
U("node1", {content: "..."})
U("node2", {content: "..."})
...
===BATCH_2===
...
AI 读取脚本输出,将每个 ===BATCH_N=== 下的操作字符串依次传入 batch_edit 的 operations 参数执行替换。
样式保护铁律(最高优先级):
- 脚本生成的
U()操作格式为U("nodeId", {content: "翻译文本"}),仅含content字段- 绝对禁止在
batch_edit的 operations 中添加任何样式属性(如fontSize、fill、fontWeight、fontName等)- 绝对禁止因为翻译后文本变长而手动缩小字体或调整文本框大小
注意:若用户在步骤 1 选择了"新建设计稿翻译",步骤 2 已完成副本创建(显式坐标定位,位于原稿右侧)和对副本的
--extract --kb提取,此处直接使用步骤 2 的提取结果(matched+ AI 翻译的unmatched)生成batch_edit操作,在副本上执行替换即可。无需额外的 nodeId 映射。
第 3 步:核对残留中文
node scripts/extract-and-match.js --check --fileId <fileId> --nodeIds <根节点ID> [--readDepth 15]
- 脚本自动两步探活获取节点数据(通过
ardot-client.js) - 输出
OK→ 核对通过;输出残留节点列表 → 补充翻译并替换后再次核对
第 4 步:输出翻译总结
使用 generateSummary() 自动生成统计数据:
- 翻译节点数量、知识库匹配率
- 翻译模式(原稿/新建副本)