Repository navigation
TRANSLATION_GUIDE
本文档基于 src/services/ai/tasks/translation-service.ts 中的 AI 提示词,详细说明了小说翻译的规则、流程和最佳实践。原文不限语言;日语敬语等规则只在对应语言的原文片段中适用。
- 目标语言: 书籍设置的目标语言(简体中文 / 繁体中文 / 英文)
- 翻译风格: 符合原作文体(如轻小说)习惯,自然流畅
- 段落对应: 严格保证 1:1 对应(1个原文段落 = 1个翻译段落)
- 术语一致性: 使用术语表和角色设定表确保翻译一致性
- 准确性: 忠实原文,准确传达原意
- 流畅性: 译文自然,符合目标语言表达习惯
- 一致性: 术语、角色名称、说话风格保持一致
- 完整性: 不遗漏、不添加原文没有的内容
日语敬语在翻译时必须根据上下文和角色关系正确处理:
| 敬语 | 用途 | 翻译建议 | 示例 |
|---|---|---|---|
| さん | 通用敬语 | "先生"、"小姐"、"女士"、"同学",或根据关系省略 | 田中さん → 田中先生 / 田中 |
| くん | 男性(非正式) | "君",或根据语境省略 | 太郎くん → 太郎君 / 太郎 |
| ちゃん | 亲近/年幼 | "~酱",或根据语境处理 | 美咲ちゃん → 美咲酱 / 美咲 |
| 様 | 正式敬语 | "大人"、"阁下",或根据语境处理 | お客様 → 客人 / 尊贵的客人 |
| 殿 | 古风敬语 | "殿"、"阁下" | 将军殿 → 将军殿 |
| 先輩 | 前辈 | "前辈"、"学长/学姐" | 田中先輩 → 田中前辈 |
| 後輩 | 后辈 | "后辈"、"学弟/学妹" | 佐藤後輩 → 佐藤 |
- 在翻译包含敬语的对话时,必须首先检查【相关角色参考】中该角色的
aliases列表 - 如果文本中的角色名称(带敬语)与某个别名完全匹配,且该别名已有翻译(
translation字段),必须直接使用该翻译,不得重新翻译 - 如果别名中包含敬语但翻译为空,应使用
update_character工具补充该别名的翻译
示例:
文本: "田中さん"
别名列表: [{ name: "田中さん", translation: "田中先生" }]
结果: 必须使用 "田中先生",不得翻译为 "田中小姐" 或其他
如果别名中没有找到匹配的翻译:
- 查看【相关角色参考】中角色的
description字段 - 角色描述应包含角色关系信息(如"主角的妹妹"、"同班同学"、"上司"等)
- 如果描述中缺少关系信息,应使用
update_character工具补充
角色关系与敬语的对应:
- 亲密关系(妹妹、青梅竹马、好友): 可考虑省略敬语或使用亲密称呼
- 正式关系(上司、老师、长辈): 必须保留敬语并翻译为相应中文敬语
- 不明确关系: 根据对话场景和上下文判断
在翻译敬语前,必须使用 find_paragraph_by_keywords 工具:
// 搜索该角色在之前段落中的翻译
find_paragraph_by_keywords({
keywords: ["田中さん", "田中"], // 关键词数组(返回包含任一关键词的段落)
only_with_translation: true, // 只返回已翻译的段落
max_paragraphs: 3
// chapter_id: "章节ID" // 可选:如果提供,则仅在指定章节内搜索;否则搜索所有章节
})- 查看之前如何翻译这个敬语组合
- 如果找到之前的翻译,必须保持一致
- 如果是首次出现,根据角色关系和上下文决定
根据角色描述中的关系信息决定翻译方式:
关系类型 → 翻译策略
━━━━━━━━━━━━━━━━━━
妹妹、好友 → 可省略敬语
上司、老师 → 必须保留敬语
同学、同事 → 根据场景判断
初次见面 → 保留正式敬语
- 根据以上步骤确定翻译方式后进行翻译
- 不要自动添加新的别名
- 如果用户希望固定某个敬语翻译为别名,应由用户手动添加
每个翻译块中会自动提供:
- 【相关术语参考】: 当前段落中出现的术语
- 【相关角色参考】: 当前段落中出现的角色
你可以直接使用这些参考,无需调用工具查询。
| 工具名称 | 用途 | 何时使用 |
|---|---|---|
create_term |
创建新术语 | 遇到新的专有名词或特殊概念 |
get_term |
查询术语 | 需要确认术语当前翻译 |
update_term |
更新术语 | 发现术语翻译为空或需要修正 |
delete_term |
删除术语 | 发现无用或错误分类的术语 |
list_terms |
列出所有术语 | 需要查看全部术语表 |
get_occurrences_by_keywords |
查询词频 | 决定是否添加/删除术语前确认使用频率 |
| 工具名称 | 用途 | 何时使用 |
|---|---|---|
create_character |
创建新角色 | |
get_character |
查询角色 | 需要确认角色当前信息 |
update_character |
更新角色 | 补充翻译、添加别名、更新描述/口吻 |
delete_character |
删除角色 | 删除重复角色或错误分类的术语 |
list_characters |
列出所有角色 | 查看全部角色或检查别名冲突 |
| 工具名称 | 用途 | 何时使用 |
|---|---|---|
get_previous_paragraphs |
获取前文段落 | 需要查看上文语境 |
get_next_paragraphs |
获取后文段落 | 需要查看下文语境 |
find_paragraph_by_keywords |
关键词搜索 | chapter_id 参数,则仅在指定章节内搜索;否则搜索所有章节 |
find_paragraph_by_keywords({
keywords: ["田中さん", "田中"], // 关键词数组(返回包含任一关键词的段落)
only_with_translation: true, // 只返回已翻译的段落
max_paragraphs: 3
// chapter_id: "章节ID" // 可选:如果提供,则仅在指定章节内搜索;否则搜索所有章节
})get_occurrences_by_keywords({
keywords: ["魔法陣", "召喚術"]
})绝对规则:
- ✅ 术语表:专有名词、特殊概念、技能、地名、物品等
- ❌ 术语表中绝对不能包含角色名称(人名)
- ✅ 角色表:人物、角色名称、别名
- ❌ 角色表中绝对不能包含术语
如果发现分类错误,必须立即纠正:
- 术语表中有人名 →
delete_term+create_character - 角色表中有术语 →
delete_character+create_term
只在确实需要时才添加新术语:
✅ 应该添加的术语:
- 专有名词(地名、组织名、物品名)
- 特殊概念(魔法体系、技能名称)
- 具有特殊含义的词汇
- 反复出现且翻译固定的词汇
❌ 不应该添加的术语:
- 仅由汉字组成且无特殊含义的普通词汇
- 常见助词、介词(的、了、在等)
- 通用词汇(学校、学生等)
- 出现次数少于 3 次的词汇
创建前必须检查:
// 1. 检查词频
get_occurrences_by_keywords({ keywords: ["新术语"] })
// 2. 检查上下文
find_paragraph_by_keywords({ keywords: ["新术语"] })发现以下情况必须立即更新:
-
翻译为空:
translation字段为空、空白或占位符 -
描述为空:
description缺失但应该补充 - 描述不匹配: 描述与当前上下文不符
更新步骤:
// 1. 查询当前状态
get_term({ name: "术语名" })
// 2. 更新翻译或描述
update_term({
term_id: "xxx",
translation: "新翻译",
description: "新描述"
})发现以下术语必须删除:
- 非固有名词、无特殊含义的普通词汇
- 仅由汉字组成的通用词汇
- 出现次数 < 3 次的词汇(使用
get_occurrences_by_keywords确认) - 误分类的角色名称
- 重复的术语
删除流程:
// 1. 检查词频
get_occurrences_by_keywords({ keywords: ["可疑术语"] })
// 2. 确认删除
delete_term({ term_id: "xxx" })翻译前
↓
检查【相关术语参考】
├─ 确认术语/角色分离
├─ 检查空翻译 → 更新
├─ 检查描述匹配 → 更新
└─ 识别无用术语 → 标记
↓
翻译中
├─ 发现空翻译 → 立即更新
└─ 发现需要新术语 → 检查词频后创建
↓
翻译后
└─ 删除所有标记的无用术语
核心规则:
-
主名称 (
name): 必须是全名(如 "田中太郎") -
别名 (
aliases): 名字或姓氏的单独部分(如 "田中"、"太郎")
示例:
{
"name": "田中太郎",
"translation": "田中太郎",
"aliases": [
{ "name": "田中", "translation": "田中" },
{ "name": "太郎", "translation": "太郎" },
{ "name": "田中さん", "translation": "田中先生" } // 敬语也可作为别名
]
}创建前必须执行的检查:
- 检查是否已存在该角色:
// 使用 list_characters 或 get_character 检查
list_characters()
get_character({ name: "太郎" })-
判断是全名还是别名:
- 如果是全名(如 "田中太郎")且不存在 → 创建新角色
- 如果是单独部分(如 "太郎")→ 检查是否为已存在角色的别名
-
检查重复:
- 如果发现重复角色(相同角色但不同名称)→ 删除重复,添加为别名
创建示例:
// ✅ 正确:全名创建,包含别名
create_character({
name: "田中太郎",
translation: "田中太郎",
sex: "male",
description: "主角的同学",
aliases: [
{ name: "田中", translation: "田中" },
{ name: "太郎", translation: "太郎" }
]
})
// ❌ 错误:只用名字创建
create_character({
name: "太郎", // 应该作为别名添加到全名角色
translation: "太郎"
})发现翻译为空时必须更新:
update_character({
character_id: "xxx",
translation: "新翻译"
})发现新别名时的流程:
// 1. 首先检查该别名是否属于其他角色
list_characters()
// 2. 确认不冲突后添加别名
update_character({
character_id: "xxx",
aliases: [
// 包含所有现有别名 + 新别名
{ name: "田中", translation: "田中" },
{ name: "太郎", translation: "太郎" },
{ name: "小太", translation: "小太" } // 新增
]
})- 更新别名时,数组中只能包含该角色自己的别名
- 不能包含其他角色的名称或别名
- 更新前必须用
list_characters检查每个别名
何时更新描述:
- 描述为空但应该补充
- 现有描述不完整或不准确
- 描述与当前上下文不匹配(如角色关系信息错误)
描述应包含的信息:
- 角色身份(学生、老师、商人等)
- 角色性别(男性、女性、其他)
⚠️ 对代词翻译很重要(优先使用sex字段,也可在描述中补充) - 角色关系(主角的妹妹、同班同学、上司等)
⚠️ 对敬语翻译很重要 - 角色特征(性格、外貌等)
update_character({
character_id: "xxx",
description: "主角的妹妹,性格活泼,擅长魔法"
})何时更新:
- 角色有独特语气、口癖
- 古风、方言等特殊说话风格
update_character({
character_id: "xxx",
speaking_style: "傲娇,经常说'才不是为了你呢'"
})删除场景:
-
误分类的术语 →
delete_character+create_term - 重复角色 → 删除重复,添加为别名
- 主名称不是全名 → 更新为全名,原名称改为别名
合并重复角色示例:
// 假设存在两个角色:"田中太郎"(全名)和 "太郎"(名字)
// 1. 删除重复的 "太郎"
delete_character({ character_id: "太郎的ID" })
// 2. 将 "太郎" 添加为 "田中太郎" 的别名
update_character({
character_id: "田中太郎的ID",
aliases: [
{ name: "田中", translation: "田中" },
{ name: "太郎", translation: "太郎" }
]
})翻译前
↓
检查【相关角色参考】
├─ 确认术语/角色分离
├─ 检查空翻译 → 更新
├─ 检查描述/口吻 → 更新
└─ 检查重复角色 → 合并
↓
翻译中
├─ 遇到新角色 → ⚠️ 先检查是否为别名
├─ 发现别名 → 添加(⚠️ 先检查冲突)
├─ 发现重复 → 删除并合并
└─ 描述需补充 → 更新
↓
翻译后
├─ 检查所有信息完整性
└─ 检查并合并重复角色
每段文本包含:
- 段落 ID(格式:
[ID: xxx] 原文) - 可选:章节标题
- 可选:相关术语参考
- 可选:相关角色参考
必须返回有效的 JSON 对象:
{
"titleTranslation": "章节标题的翻译(如果有)",
"translation": "完整翻译文本(所有段落合并,段落间用\\n\\n分隔)",
"paragraphs": [
{ "id": "段落ID1", "translation": "段落1的翻译" },
{ "id": "段落ID2", "translation": "段落2的翻译" }
]
}- 如果有章节标题,必须包含
titleTranslation字段 -
paragraphs数组中每个对象必须包含id和translation - 段落 ID 必须与原文完全一致
- 段落数量必须1:1 对应(不能合并或拆分段落)
-
translation字段包含所有段落合并文本,段落间用\n\n分隔 - 必须是有效的 JSON(注意转义特殊字符)
A: 只在以下情况添加:
- 专有名词(地名、组织名、物品名)
- 特殊概念(魔法体系、技能)
- 反复出现(≥3次)且翻译固定
添加前必须:
- 使用
get_occurrences_by_keywords检查词频 - 使用
find_paragraph_by_keywords查看上下文
A: 遵循以下流程:
遇到角色名称
↓
判断:是全名还是部分?
├─ 全名(如"田中太郎")
│ ↓
│ 检查:是否已存在?
│ ├─ 不存在 → 创建新角色(包含别名)
│ └─ 已存在 → 检查是否为重复 → 合并
│
└─ 部分(如"太郎"或"田中")
↓
检查:是否为已存在角色的别名?
├─ 是 → 添加为该角色的别名
└─ 否 → 可能是新角色,需更多上下文
A: 别名系统是敬语翻译一致性的核心:
- 用户可能手动添加了敬语别名(如 "田中さん" → "田中先生")
- AI 之前可能已翻译过该敬语组合
- 必须保持一致性,不能同一角色不同段落使用不同敬语翻译
流程:
别名中有匹配的敬语翻译 → 直接使用(最高优先级)
↓ 如果没有
查看角色描述中的关系信息 → 判断敬语处理方式
↓ 同时
使用 find_paragraph_by_keywords 搜索历史翻译 → 保持一致
A: 发现重复角色时:
// 1. 删除重复的角色
delete_character({ character_id: "重复角色ID" })
// 2. 将删除的角色名称添加为保留角色的别名
update_character({
character_id: "保留角色ID",
aliases: [
// 现有别名
...existingAliases,
// 添加删除的角色名称
{ name: "删除的角色名", translation: "翻译" }
]
})A: 严格分离原则:
| 类型 | 应该在术语表 | 应该在角色表 |
|---|---|---|
| 人名 | ❌ | ✅ |
| 角色 | ❌ | ✅ |
| 地名 | ✅ | ❌ |
| 物品 | ✅ | ❌ |
| 技能 | ✅ | ❌ |
| 组织 | ✅ | ❌ |
如果发现错误分类:
// 术语表中有人名 "田中太郎"
delete_term({ term_id: "xxx" })
create_character({ name: "田中太郎", ... })
// 角色表中有技能 "火球术"
delete_character({ character_id: "xxx" })
create_term({ name: "火球術", translation: "火球术", ... })A: 原因:
- 避免别名爆炸: 自动添加会导致大量别名(田中さん、田中くん、田中先輩等)
- 用户意图: 用户可能希望灵活翻译敬语,不固定为别名
- 一致性控制: 只使用已存在的别名,确保翻译一致性由用户或明确的历史翻译控制
正确做法:
- ✅ 使用已存在的别名翻译
- ✅ 使用
find_paragraph_by_keywords查找历史翻译 - ✅ 根据角色关系和上下文翻译
- ❌ 不自动添加新的敬语别名
A: 多层一致性保障:
- 术语表: 专有名词、特殊概念翻译固定
- 角色表: 角色名称翻译固定
- 别名系统: 角色不同称呼(包括敬语)翻译固定
-
历史搜索: 使用
find_paragraph_by_keywords查找之前的翻译 - 上下文: 根据角色关系和场景确保敬语翻译合理
- 敬语翻译: 别名优先 → 角色关系 → 历史一致 → 上下文判断
- 术语管理: 只添加必要术语,定期清理无用术语
- 角色管理: 全名为主,别名为辅,严格检查重复
- 严格分离: 术语和角色绝对不能混淆
- 格式要求: 严格 1:1 段落对应,返回有效 JSON
⚠️ 翻译敬语前检查别名⚠️ 创建角色前检查是否为别名⚠️ 更新别名前检查是否冲突⚠️ 发现空翻译立即更新⚠️ 发现描述不匹配立即更新⚠️ 发现重复角色立即合并⚠️ 发现无用术语翻译后删除
高频必用:
-
find_paragraph_by_keywords- 敬语翻译、术语一致性(支持多个关键词。如果提供chapter_id参数,则仅在指定章节内搜索;否则搜索所有章节) -
update_character- 补充翻译、添加别名、更新描述 -
update_term- 补充术语翻译 -
list_characters- 检查别名冲突、查找重复角色
按需使用:
-
create_character/create_term- 确认需要时创建 -
delete_character/delete_term- 清理无用或重复项 -
get_occurrences_by_keywords- 决定术语添加/删除前确认词频 -
get_previous_paragraphs/get_next_paragraphs- 需要更多上下文时
文档版本: 1.0
最后更新: 2025-11-24
基于: translation-service.ts 系统提示词
使用指南
书籍详情页
开发者文档
使用指南
書籍詳情頁
開發者文件
User guides
- Quick start
- Home page
- Book library
- AI model configuration
- Chat assistant
- AI import workbench
- System bar and navigation
- Application settings
- Local embeddings
Book details
- Book details overview
- Chapter management
- Paragraph editing
- Translation workflow
- Terminology management
- Character settings
- Story memories
Developer docs