Blame view

docs/翻译模块说明.md 6.24 KB
3cd09b3b   tangwang   翻译接口改为调用qwen-mt-f...
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
  # 翻译模块说明(Qwen / DeepL)
  
  本文档汇总翻译模块的**接口使用说明****Python 模块用法**,对应代码:
  
  - HTTP 服务:`api/translator_app.py`
  - Python 模块:`query/translator.py`
  
  ---
  
  ## 1. 功能概述
  
  当前翻译模块支持两种后端:
  
  - **Qwen(默认)**:通过阿里云百炼 DashScope 的 OpenAI 兼容接口调用 `qwen-mt-flash`
  - **DeepL**:通过 DeepL API 调用翻译(保留原有能力)
  
  两种方式均支持:
  
  - **Redis 缓存**(如启用):同文案同目标语言命中缓存直接返回
  - **`source_lang` 自动检测**:当 `source_lang` 为空或 `"auto"` 时启用自动检测(Qwen 使用 `"auto"`
  
  ---
  
  ## 2. 环境变量与配置
  
  项目会在 `config/env_config.py` 中加载项目根目录的 `.env`,常用变量如下:
  
  ```env
  # Qwen / DashScope
  DASHSCOPE_API_KEY=sk-xxx
  
  # DeepL
  DEEPL_AUTH_KEY=xxx
  
  # 可选:翻译服务默认模型(HTTP 服务启动后若请求不传 model,则使用此默认值)
  TRANSLATION_MODEL=qwen  # 或 deepl
  ```
  
  说明:
  
  - **Qwen** 使用 `DASHSCOPE_API_KEY`
  - **DeepL** 使用 `DEEPL_AUTH_KEY`
  - `.env` 中的 `OPENAI_API_KEY` 不是本翻译模块必须项(当前实现用的是 `DASHSCOPE_API_KEY`
  
  ---
  
  ## 3. HTTP 翻译服务(`api/translator_app.py`)
  
  ### 3.1 启动命令
  
  推荐(热更新):
  
  ```bash
  cd /home/tw/SearchEngine
  uvicorn api.translator_app:app --host 0.0.0.0 --port 6006 --reload
  ```
  
  指定默认模型(不传请求 `model` 时生效):
  
  ```bash
  cd /home/tw/SearchEngine
  export TRANSLATION_MODEL=qwen   # 或 deepl
  uvicorn api.translator_app:app --host 0.0.0.0 --port 6006 --reload
  ```
  
  ### 3.2 接口列表
  
  - **GET** `/health`:健康检查(返回默认模型、已初始化模型列表等)
  - **POST** `/translate`:翻译文本
  - **GET** `/docs`:Swagger UI
  
  ### 3.3 `/translate` 请求参数
  
  请求体(JSON):
  
  ```json
  {
    "text": "要翻译的文本",
    "target_lang": "en",
    "source_lang": "auto",
    "model": "qwen"
  }
  ```
  
  - **text**:必填,待翻译文本
  - **target_lang**:必填,目标语言代码(见“语言支持”)
  - **source_lang**:可选,源语言代码;不传或传 `"auto"` 时自动检测
  - **model**:可选,`"qwen"` 或 `"deepl"`;默认 `"qwen"`
  
  ### 3.4 `/translate` 返回参数
  
  响应体(JSON,成功时):
  
  ```json
  {
    "text": "商品名称",
    "target_lang": "en",
    "source_lang": "zh",
    "translated_text": "Product name",
    "status": "success",
    "model": "qwen"
  }
  ```
  
  ### 3.5 请求示例(curl)
  
  健康检查:
  
  ```bash
  curl http://localhost:6006/health
  ```
  
  默认(qwen)中文 → 英文:
  
  ```bash
  curl -X POST http://localhost:6006/translate \
    -H "Content-Type: application/json" \
    -d '{"text":"我看到这个视频后没有笑","target_lang":"en","source_lang":"auto"}'
  ```
  
  显式指定 qwen,英文 → 简体中文:
  
  ```bash
  curl -X POST http://localhost:6006/translate \
    -H "Content-Type: application/json" \
    -d '{"text":"Product name","target_lang":"zh","source_lang":"en","model":"qwen"}'
  ```
  
  繁体中文(`zh_tw`)测试:
  
  ```bash
  curl -X POST http://localhost:6006/translate \
    -H "Content-Type: application/json" \
    -d '{"text":"商品名稱","target_lang":"zh_tw","source_lang":"auto","model":"qwen"}'
  ```
  
  切换 DeepL:
  
  ```bash
  curl -X POST http://localhost:6006/translate \
    -H "Content-Type: application/json" \
    -d '{"text":"商品名称","target_lang":"en","source_lang":"zh","model":"deepl"}'
  ```
  
  ### 3.6 关于提示词(Prompt)
  
  HTTP 服务内部使用了固定提示词 `TRANSLATION_PROMPT`(适用于“商品 SKU 英文名”场景),并通过 `prompt` 参数传入 `Translator.translate()`
  
  - **DeepL**`prompt` 会作为 DeepL 的 `context` 使用(影响翻译但不被翻译)
  - **Qwen**:当前实现未将 `prompt/context` 传给 Qwen 的 `translation_options`(即对 Qwen 不生效)
  
  ---
  
  ## 4. Python 翻译模块(`query/translator.py`)
  
  ### 4.1 基本用法
  
  ```python
  from query.translator import Translator
  
  # 默认使用 qwen
  translator = Translator()
  
  result = translator.translate(
      text="我看到这个视频后没有笑",
      target_lang="en",
      source_lang="auto",
  )
  print(result)
  ```
  
  显式选择模型:
  
  ```python
  translator_qwen = Translator(model="qwen")
  translator_deepl = Translator(model="deepl")
  ```
  
  ### 4.2 关键参数
  
  - `Translator(model="qwen" | "deepl")`:选择翻译模型,默认 `"qwen"`
  - `translate(text, target_lang, source_lang=None, context=None, prompt=None)`
    - `target_lang` / `source_lang`:语言代码(见“语言支持”)
    - `source_lang` 为空或 `"auto"`:自动检测
    - `prompt`
      - DeepL:作为 `context` 使用
      - Qwen:当前未使用
  
  ### 4.3 缓存(Redis)
  
  `Translator(use_cache=True)` 时会连接 Redis 并缓存翻译结果。
  
  - Redis 连接配置来自 `config/env_config.py` 的 `REDIS_CONFIG`
  - 缓存 key 前缀默认 `trans`(可用 `REDIS_TRANSLATION_CACHE_PREFIX` 覆盖)
  
  ---
  
  ## 5. Qwen 语言支持(按 qwen-mt-plus/flash/turbo 标准)
  
  > 以下为 Qwen 翻译模型支持的语言(**代码 → 英文名**),并已用于 `query/translator.py` 的映射。
  
  | 代码 | 英文名 |
  |------|--------|
  | en | English |
  | zh | Chinese |
  | zh_tw | Traditional Chinese |
  | ru | Russian |
  | ja | Japanese |
  | ko | Korean |
  | es | Spanish |
  | fr | French |
  | pt | Portuguese |
  | de | German |
  | it | Italian |
  | th | Thai |
  | vi | Vietnamese |
  | id | Indonesian |
  | ms | Malay |
  | ar | Arabic |
  | hi | Hindi |
  | he | Hebrew |
  | my | Burmese |
  | ta | Tamil |
  | ur | Urdu |
  | bn | Bengali |
  | pl | Polish |
  | nl | Dutch |
  | ro | Romanian |
  | tr | Turkish |
  | km | Khmer |
  | lo | Lao |
  | yue | Cantonese |
  | cs | Czech |
  | el | Greek |
  | sv | Swedish |
  | hu | Hungarian |
  | da | Danish |
  | fi | Finnish |
  | uk | Ukrainian |
  | bg | Bulgarian |
  
  ---
  
  ## 6. 常见问题(FAQ)
  
  ### 6.1 Qwen 调用报错 / 无法初始化
  
  - 确认 `.env` 中已配置 `DASHSCOPE_API_KEY`
  - 确认安装依赖:`openai`(Python 包)
  - 如在海外地域使用模型,将 `base_url` 切换为 `https://dashscope-intl.aliyuncs.com/compatible-mode/v1`
  
  ### 6.2 DeepL 返回 403 / 翻译失败
  
  - 确认 `.env` 中已配置 `DEEPL_AUTH_KEY`
  - 若使用的是 Pro key,请使用 `https://api.deepl.com/v2/translate`(当前代码即为该地址)