OpenAI Prompt Engineering-6. 文本翻译

OpenAI的Prompt Engineering 课程

6. 文本翻译

大模型擅长在不同的语言之间进行翻译转换,包括但是不限于翻译、识别当前语言的类型、语气转换、文本格式转换、文本纠错、文本比较等等一系列的能力。课程中的例子也是围绕着这这些能力来演示,本节我们自己来构造一些案例来演示吧。

先来看看翻译能力,我们以宫廷玉液酒,一百八一杯。为文本,让DeepSeek翻译成其他 5 种不同国家的语言,并且注明语言名称,以 json 的格式输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
text = "宫廷玉液酒,一百八一杯。"

prompt_1 = f"""
请将下面三引号框出的文本翻译成其他5种不同国家的语言,并注明语言种类(如英语、法语、日语等)。
请将结果以标准 JSON 格式输出,其中 key 为语言名称,value 为翻译结果。

文本如下:
'''{text}'''

输出示例:
```json
{{
"汉语": "宫廷玉液酒,一百八一杯。",
"英语": "Imperial jade liquor, 180 yuan per cup.",
"法语": "...",
"日语": "...",
"德语": "...",
"西班牙语": "..."
}}
'''
"""

大模型输出:

1
2
3
4
5
6
7
8
9
10
```json
{
"汉语": "宫廷玉液酒,一百八一杯。",
"英语": "Imperial jade liquor, one hundred and eighty yuan per cup.",
"法语": "Liqueur de jade impériale, cent quatre-vingts yuans par verre.",
"日语": "宮廷の玉液酒、一杯180元。",
"德语": "Kaiserlicher Jade-Likör, hundertachtzig Yuan pro Tasse.",
"西班牙语": "Licor de jade imperial, ciento ochenta yuanes por copa."
}
```

看起来是翻译过来了,也不知道翻译的对不对,我们将这个结果直接放到 GPT 客户端里让他它翻译一下。

1
2
3
4
5
6
7
8
{
"汉语": "宫廷玉液酒,一百八一杯。",
"英语": "宫廷玉液酒,一杯一百八十元。",
"法语": "宫廷玉液酒,一杯一百八十元。",
"日语": "宫廷玉液酒,一杯一百八十元。",
"德语": "宫廷玉液酒,一杯一百八十元。",
"西班牙语": "宫廷玉液酒,一杯一百八十元。"
}

整体看起来没问题。😄

下面一个例子,我们还是以宫廷玉液酒,一百八一杯 为文本,让大模型根据不同的场合输出不同格式和语气的文本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
prompt_2 = f"""
请将下面三引号框出的文本翻译成其他5种不同国家的语言,并注明语言种类(如英语、法语、日语等)。
请将结果以标准 JSON 格式输出,其中 key 为语言名称,value 为翻译结果。

文本如下:
'''{text}'''

输出示例:
```json
{{
"汉语": "宫廷玉液酒,一百八一杯。",
"英语": "Imperial jade liquor, 180 yuan per cup.",
"法语": "...",
"日语": "...",
"德语": "...",
"西班牙语": "..."
}}
'''
然后再将翻译之后的 json内容,改变其语气,区分正式场合和非正式场合输出,整体的格式还是 json 不变。
"""

大模型输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
```json
{
"original": {
"汉语": "宫廷玉液酒,一百八一杯。",
"英语": "Imperial jade liquor, 180 yuan per cup.",
"法语": "Liqueur de jade impériale, 180 yuans la coupe.",
"日语": "宮廷の玉液酒、一杯180元。",
"德语": "Kaiserlicher Jade-Likör, 180 Yuan pro Tasse.",
"西班牙语": "Licor de jade imperial, 180 yuan por copa."
},
"formal": {
"汉语": "宫廷御制玉液酒,每杯售价一百八十元整。",
"英语": "The imperial jade nectar wine is priced at 180 yuan per glass.",
"法语": "La liqueur de jade impériale est proposée au prix de 180 yuans par verre.",
"日语": "宮廷謹製の玉液酒は、一杯180元でございます。",
"德语": "Der kaiserliche Jade-Nektar-Likör wird zum Preis von 180 Yuan pro Glas angeboten.",
"西班牙语": "El licor de néctar de jade imperial tiene un precio de 180 yuan por copa."
},
"informal": {
"汉语": "宫廷特酿玉液酒,一杯只要180!",
"英语": "Imperial booze, just 180 bucks a cup!",
"法语": "P'tit liquide de jade royal, 180 balles le verre !",
"日语": "宮廷の超うまい酒、1杯たったの180円!",
"德语": "Kaiserlicher Jade-Schnaps, nur 180 Tacken pro Glas!",
"西班牙语": "¡Licor de jade imperial, solo 180 pavos por copa!"
}
}
```

😄 还挺有意思的,确实正式场合的措辞区别于非正式场合。

最后我们再试一下文本格式转换的能力,还是在上述提示词的基础上,我们将 json 的格式输出转换成 HTML 输出,来看看效果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
json_text = f"""
{{
"正式场合": {{
"汉语": "宫廷玉液酒,售价为每杯一百八十元。",
"英语": "The imperial jade liquor is priced at 180 yuan per cup.",
"法语": "La liqueur de jade impériale est proposée au prix de 180 yuans par verre.",
"日语": "宮廷の玉液酒は、一杯180元で販売されています。",
"德语": "Der kaiserliche Jade-Likör wird zum Preis von 180 Yuan pro Tasse angeboten.",
"西班牙语": "El licor de jade imperial tiene un precio de 180 yuan por copa."
}},
"非正式场合": {{
"汉语": "宫廷玉液酒,一杯一百八!",
"英语": "Imperial jade liquor, just 180 a cup!",
"法语": "Liqueur de jade impériale, seulement 180 yuans le verre !",
"日语": "宮廷の玉液酒、一杯180元だよ!",
"德语": "Kaiserlicher Jade-Likör, nur 180 Yuan die Tasse!",
"西班牙语": "¡Licor de jade imperial, solo 180 yuan por copa!"
}}
"""

prompt_2 = f"""
将界定符括起来的 json 数据内容,转换成 HTML 表格的形式输出,并且设置表格内容全部居中,表格边框宽度为 1。其他不需要多余的输出。
```{json_text}```
"""

输出内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<table border="1" style="margin: auto; text-align: center;">
<tr>
<th>场合</th>
<th>语言</th>
<th>内容</th>
</tr>
<tr>
<td rowspan="6">正式场合</td>
<td>汉语</td>
<td>宫廷玉液酒,售价为每杯一百八十元。</td>
</tr>
<tr>
<td>英语</td>
<td>The imperial jade liquor is priced at 180 yuan per cup.</td>
</tr>
<tr>
<td>法语</td>
<td>La liqueur de jade impériale est proposée au prix de 180 yuans par verre.</td>
</tr>
<tr>
<td>日语</td>
<td>宮廷の玉液酒は、一杯180元で販売されています。</td>
</tr>
<tr>
<td>德语</td>
<td>Der kaiserliche Jade-Likör wird zum Preis von 180 Yuan pro Tasse angeboten.</td>
</tr>
<tr>
<td>西班牙语</td>
<td>El licor de jade imperial tiene un precio de 180 yuan por copa.</td>
</tr>
<tr>
<td rowspan="6">非正式场合</td>
<td>汉语</td>
<td>宫廷玉液酒,一杯一百八!</td>
</tr>
<tr>
<td>英语</td>
<td>Imperial jade liquor, just 180 a cup!</td>
</tr>
<tr>
<td>法语</td>
<td>Liqueur de jade impériale, seulement 180 yuans le verre !</td>
</tr>
<tr>
<td>日语</td>
<td>宮廷の玉液酒、一杯180元だよ!</td>
</tr>
<tr>
<td>德语</td>
<td>Kaiserlicher Jade-Likör, nur 180 Yuan die Tasse!</td>
</tr>
<tr>
<td>西班牙语</td>
<td>¡Licor de jade imperial, solo 180 yuan por copa!</td>
</tr>
</table>

我们预览一下 HTML 的效果:

最后我们来通过一个案例来展示一下大模型的文本纠错和文本比对能力,我们从维基百科节选一段空客飞机的描述文本,然后在这个基础上改动一些数据,让大模型检查文本的正确性和拼写错误,然后直接输出纠正后的文本。

1
2
3
4
5
6
7
8
9
10
text_1 = f"""
自推出A300棋,空中客车提出后续机型的开发与播音及道格拉斯竞争。\
在A300投入运营前,空中客车的工程师曾提出九种可能的机型:A300B1~A300B8。\
2005年,空中客车提出第十个机型A300B10,这个缩短机身的型号后来演变成A310。\
推出A310后,空中客车将目光投向当时由播音737和道格拉斯DC-8主导的单通道飞机市场。\
"""
prompt_3 = f"""
检查界定符括起来的内容和数据的真实性,同时检查文本本身如果有书写错误也直接更正。然后直接输出更正错误之后的文本内容。其他多余的内容不需要。
```{text_1}```
"""

接着我们引入一个新的Python库,redlines用来显示的展示修改前后文本的不同:

1
2
from redlines import Redlines
diff = Redlines(text_1, response)

结果如下:

自推出 A300 ,空中客车提出后续机型的开发与 音及道格拉斯竞争。在 A300 投入运营前,空中客车的工程师曾提出九种可能的机型:A300B1~A300B 9。2005 年,空中客车提出第十个机型 A300B10,这个缩短机身的型号后来演变成 A310。推出 A310 后,空中客车将目光投向当时由 音 737 和道格拉斯 DC-8 主导的单通道飞机市场。