跳到主要内容

AI Prompt 配置指南

概述

沉浸式翻译支持自定义 AI 翻译的 Prompt 配置,让高级用户可以根据自己的需求调整翻译行为。本文档将详细介绍配置方式、支持的变量以及高级用法。

支持的变量

基础变量

  • {{text}} - 需要翻译的文本内容
  • {{from}} - 源语言
  • {{to}} - 目标语言
  • {{content_type}} - 原文本的类型(htmltext

上下文变量

  • {{title_prompt}} - 网页标题(当可用时)
  • {{summary_prompt}} - 网页上下文摘要(当可用时)
  • {{terms_prompt}} - 相关专业术语(当可用时)

配置方式

1. System Prompt(systemPrompt)

以系统身份发送给 AI 的翻译请求。用于设定 AI 的角色和基本规则。

2. Prompt(prompt)

以用户身份发送给 AI 的对话,包含实际需要翻译的内容。

3. System Multiple Prompt(systemMultiplePrompt)

当段落数大于 1 时,以系统身份发送给 AI 的翻译请求。用于处理多段落翻译场景。

4. Multiple Prompt(multiplePrompt)

多段落翻译时,以用户身份发送的请求。支持使用分隔符或 YAML 格式。

5. Subtitle Prompt(subtitlePrompt)

当需要翻译字幕时,以用户身份发送给 AI 的对话,包含实际需要翻译的内容。

默认配置示例

如果只收集到一个段落,那么默认会走单段落的 Prompt, 如果收集到多个段落,那么默认会走多段落的 Prompt,大多数情况会是多段落。多段落的默认分隔符是 %%,我们故意使用这个不太常见的分隔符来减少大模型的幻觉。你可以用此 Prompt 为基础去修改为你需要的 Prompt, 以下是默认的 Prompt 配置:

单段落翻译

systemPrompt: |
你是一位专业的 {{to}} 母语翻译者,需要流畅地将文本翻译成 {{to}}。

## 翻译规则
1. 仅输出翻译内容,不要包含解释或其他额外内容(例如"翻译如下:"或"以下是翻译:"等)
2. 返回的翻译必须保持与原文完全相同的段落数和格式
3. 如果文本包含 HTML 标签,在保持流畅性的同时,请考虑标签在翻译中的位置
4. 对于不应翻译的内容(如专有名词、代码等),请保留原文
5. 直接输出翻译(无分隔符,无额外文本){{title_prompt}}{{summary_prompt}}{{terms_prompt}}
prompt: |
翻译成 {{to}}(仅输出翻译):

{{text}}

多段落翻译

multipleSystemPrompt: |
你是一位专业的 {{to}} 母语翻译者,需要流畅地将文本翻译成 {{to}}。

## 翻译规则
1. 仅输出翻译内容,不要包含解释或其他额外内容(例如"翻译如下:"或"以下是翻译:"等)
2. 返回的翻译必须保持与原文完全相同的段落数和格式
3. 如果文本包含 HTML 标签,在保持流畅性的同时,请考虑标签在翻译中的位置
4. 对于不应翻译的内容(如专有名词、代码等),请保留原文{{title_prompt}}{{summary_prompt}}{{terms_prompt}}

## 输入输出格式示例

### 输入示例:
Paragraph A

%%

Paragraph B

%%

Paragraph C

%%

Paragraph D

### 输出示例:
Translation A

%%

Translation B

%%

Translation C

%%

Translation D

multiplePrompt: |
翻译成 {{to}}:

{{text}}
subtitlePrompt: |
翻译成 {{to}}:

{{text}}

高级用法(YAML 格式)

对于需要更精确控制的场景(比如多步骤输出),可以使用 YAML 格式进行配置:

高级变量

  • {{yaml}} - YAML 格式的输入数据

默认的 'yaml' 变量大概长这样;

- id: 1
text: Hello world
- id: 2
text: How are you?

我们默认期待大模型的输出是这样的:

- id: 1
text: 你好世界
- id: 2
text: 你好吗?

如果你使用默认的 {{yaml}},那么你需要在 prompt 中把这个期望表达清楚。如果你希望修改默认和响应的 yaml 格式,这无法通过沉浸式翻译设置页面中的 UI 来解决,你必须直接编辑沉浸式翻译 JSON 格式的用户配置。

用户配置编辑路径: 设置页->开发者设置->Edit Full User Config (编辑前,请备份你的用户配置)

你可以在用户配置的 JSON 中找到翻译服务的配置(如果没有,直接按照这个结构添加即可):

{
...
"translationServices": {
"openai": {
...
}
},
...

yaml 变量由 env.imt_yaml_item 组成,所以你可以修改 imt_yaml_item 的格式,像下面这样:

  "translationServices": {
"openai": {
"env": {
"imt_yaml_item": "- id: {{id}}\n source: {{text}}"
}
}
}

另一个特殊变量是 imt_subtitle_yaml_item, 和 imt_yaml_item 类似,用于翻译字幕的 YAML item.

其他的 env 变量,你可以添加任何 env变量,直接在 prompt 中按照 {{变量名}} 的格式使用,比如如下默认的env变量:

  • {{imt_source_field}} - 原文字段名(默认:text)
  • {{imt_trans_field}} - 译文字段名(默认:text)
  • {{imt_sub_source_field}} - 字幕原文字段名
  • {{imt_sub_trans_field}} - 字幕译文字段名

包括 title_prompt,summary_prompt,terms_prompt背后也是通过 env来配置的,默认如下:

        "title_prompt": "\n\n## 上下文感知\n文档元数据:\n标题:《{{imt_title}}》",
"summary_prompt": "\n\n## 上下文感知\n文档元数据:\n摘要:{{imt_theme}}...",
"terms_prompt": "\n\n必需术语:翻译时必须使用以下术语,如果 'source':'target' 中 source == target,则保持源术语不变。\n\n 术语 -> \n\n {{imt_terms}}",
"sub_summary_prompt": "\n\n## 上下文感知\n文档元数据:\n类型:字幕\n摘要:{{imt_theme}}...",
"sub_terms_prompt": "\n\n必需术语:翻译时必须使用以下术语,如果 'source':'target' 中 source == target,则保持源术语不变。\n\n 术语 -> \n\n {{imt_terms}}"

其中 imt_title, imt_theme,imt_terms 为特殊变量,由系统注入,imt_title为标题,imt_theme为整个网页的总结,imt_terms为模型提取的关键术语。

注意: imt_theme, imt_terms 是专有服务提取的,目前仅为 Pro 会员提供。

YAML Prompt 示例

systemPrompt: |
你是一个专业、可靠的机器翻译引擎。
{{title_prompt}}{{summary_prompt}}{{terms_prompt}}

multiplePrompt: |
你将收到一个 YAML 格式的输入,包含带有 "id" 和 "{{imt_source_field}}" 字段的条目。输入内容如下:

<yaml>
{{yaml}}
</yaml>

对于 YAML 中的每个条目,将 "{{imt_source_field}}" 字段的内容翻译成 {{to}}{{html_only}} 将翻译结果写回该条目的 "{{imt_source_field}}" 字段。

以下是期望格式的示例:

{{normal_result_yaml_example}}

请直接返回翻译后的 YAML,不要包含 <yaml> 标签或任何额外信息。
subtitlePrompt: |
你将收到一个 YAML 格式的字幕输入,包含带有 "id" 和 "{{imt_sub_source_field}}" 字段的条目。输入内容如下:

<yaml>
{{yaml}}
</yaml>

对于 YAML 中的每个条目,将 "{{imt_sub_source_field}}" 字段的内容翻译成 {{to}}{{html_only}} 将翻译结果写回该条目的 "{{imt_sub_source_field}}" 字段。

以下是期望格式的示例:

{{subtitle_result_yaml_example}}

请直接返回翻译后的 YAML,不要包含 <yaml> 标签或任何额外信息。

其中 html_only 为特殊变量,仅翻译的原文为 HTML 格式时才有,值为: \n\n注意:如果文本包含 HTML 标签,请在翻译后考虑标签在翻译结果中的位置,同时保持结果的流畅性。 , 当用户主动在 AI 翻译服务中设置 开启"富文本翻译"时才会有这个变量存在。否则为空。

normal_result_yaml_exampleenv 中设置,默认为:

<example>
Input:
- id: 1
{{imt_source_field}}: Source
Output:
- id: 1
{{imt_trans_field}}: Translation
</example>

subtitle_result_yaml_exampleenv 中设置,默认值为:

<example>
Input:
- id: 1
{{imt_sub_source_field}}: ...
- id: 2
{{imt_sub_source_field}}: ...
- id: 3
{{imt_sub_source_field}}: ...
Output:
- id: 1
{{imt_sub_source_field}}: ...
- id: 2
{{imt_sub_source_field}}: ...
- id: 3
{{imt_sub_source_field}}: ...
</example>

你可以在 env 中覆盖它。

高级示例:反思式翻译

这个示例展示了如何使用 YAML 格式实现更复杂的翻译流程,包含初步翻译和优化翻译两个步骤:

env:
imt_source_field: source
imt_trans_field: step2 # 最终译文使用 step2 字段
imt_sub_source_field: source
imt_sub_trans_field: step2
imt_yaml_item: |-
- id: {{id}}
{{imt_source_field}}: {{text}}
imt_subtitle_yaml_item: |-
- id: {{id}}
{{imt_sub_source_field}}: {{text}}

systemPrompt: |
你是一个专业、可靠的机器翻译引擎。
{{title_prompt}}{{summary_prompt}}{{terms_prompt}}

multiplePrompt: |
以下是 YAML 输入:
<yaml>
{{yaml}}
</yaml>

请按照以下步骤操作:
1. 从提供的 YAML 对象中提取 "source" 字段的内容。
2. 将提取的内容翻译成 {{to}}。将初步翻译结果放入 step1 字段。
3. 优化 step1 中的初步翻译,使其在 {{to}} 中更加自然和易于理解。
将优化后的翻译放入 step2 字段。
4. 将结果格式化为包含 id、step1 和 step2 字段的 YAML 数组,如下例所示:

- id: 1
step1: 初步翻译
step2: 优化翻译

请直接返回翻译后的 YAML,不要包含任何 <example_output> 标签或额外信息。

工作流程说明

  1. 输入格式

    - id: 1
    source: "Hello world"
    - id: 2
    source: "How are you?"
  2. AI 处理步骤

    • Step 1: 进行初步翻译
    • Step 2: 优化翻译,使其更自然流畅
  3. 输出格式

    - id: 1
    step1: "你好世界"
    step2: "你好,世界"
    - id: 2
    step1: "你怎么样?"
    step2: "你好吗?"