0342d897
tangwang
搜索API对接指南 拆分
|
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
- `GET /health` 会返回各自的 `limits`、`stats`、`cache_enabled` 等状态;`GET /ready` 用于就绪探针。
#### 7.1.1 `POST /embed/text` — 文本向量化
将文本列表转为 1024 维向量,用于语义搜索、文档索引等。
**请求体**(JSON 数组):
```json
["文本1", "文本2", "文本3"]
```
**响应**(JSON 数组,与输入一一对应):
```json
[[0.01, -0.02, ...], [0.03, 0.01, ...], ...]
```
**完整 curl 示例**:
```bash
|
0342d897
tangwang
搜索API对接指南 拆分
|
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
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
|
#### 7.1.6 TEI 统一调优建议(主服务)
使用单套主服务即可同时兼顾:
- 在线 query 向量化(低延迟,常见 `batch=1~4`)
- 索引构建向量化(高吞吐,常见 `batch=15~20`)
统一启动(主链路):
```bash
./scripts/start_tei_service.sh
./scripts/service_ctl.sh restart embedding
```
默认端口:
- TEI: `http://127.0.0.1:8080`
- 文本向量服务(`/embed/text`): `http://127.0.0.1:6005`
- 图片向量服务(`/embed/image`): `http://127.0.0.1:6008`
当前主 TEI 启动默认值(已按 T4/短文本场景调优):
- `TEI_MAX_BATCH_TOKENS=4096`
- `TEI_MAX_CLIENT_BATCH_SIZE=24`
- `TEI_DTYPE=float16`
### 7.2 重排服务(Reranker)
- **Base URL**: `http://localhost:6007`(可通过 `RERANKER_SERVICE_URL` 覆盖)
- **启动**: `./scripts/start_reranker.sh`
说明:默认后端为 `qwen3_vllm`(`Qwen/Qwen3-Reranker-0.6B`),需要可用 GPU 显存。
补充:`docs` 的请求大小与模型推理 `batch size` 解耦。即使一次传入 1000 条文档,服务端也会按 `services.rerank.backends.qwen3_vllm.infer_batch_size` 自动拆分;若 `sort_by_doc_length=true`,会先按文档长度排序后分批,减少 padding,再按原输入顺序返回分数。`length_sort_mode` 可选 `char`(更快)或 `token`(更精确)。
#### 7.2.1 `POST /rerank` — 结果重排
根据 query 与 doc 的相关性对文档列表重新打分排序。
**请求体**:
```json
{
"query": "玩具 芭比",
"docs": [
"12PCS 6 Types of Dolls with Bottles",
"纯棉T恤 短袖 夏季"
],
"normalize": true
}
```
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `query` | string | Y | 搜索查询 |
| `docs` | array[string] | Y | 待重排的文档列表(单次最多由服务端配置限制) |
| `normalize` | boolean | N | 是否对分数做 sigmoid 归一化,默认 true |
**响应**:
```json
{
"scores": [0.92, 0.15],
"meta": {
"service_elapsed_ms": 45.2,
"input_docs": 2,
"unique_docs": 2
}
}
```
**完整 curl 示例**:
```bash
curl -X POST "http://localhost:6007/rerank" \
-H "Content-Type: application/json" \
-d '{
"query": "玩具 芭比",
"docs": ["12PCS 6 Types of Dolls with Bottles", "纯棉T恤 短袖"],
"top_n":386,
"normalize": true
}'
```
#### 7.2.2 `GET /health` — 健康检查
```bash
curl "http://localhost:6007/health"
```
### 7.3 翻译服务(Translation)
- **Base URL**: `http://localhost:6006`(以 `config/config.yaml -> services.translation.service_url` 为准)
- **启动**: `./scripts/start_translator.sh`
#### 7.3.1 `POST /translate` — 文本翻译
支持 translator service 内所有已启用 capability,适用于商品名称、描述、query 等电商场景。当前可配置能力包括 `qwen-mt`、`llm`、`deepl` 以及本地模型 `nllb-200-distilled-600m`、`opus-mt-zh-en`、`opus-mt-en-zh`。
**请求体**(支持单条字符串或字符串列表):
```json
{
"text": "商品名称",
"target_lang": "en",
"source_lang": "zh",
"model": "qwen-mt",
"scene": "sku_name"
}
```
也支持批量列表形式:
```json
{
"text": ["商品名称1", "商品名称2"],
"target_lang": "en",
"source_lang": "zh",
"model": "qwen-mt",
"scene": "sku_name"
}
```
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `text` | string \| string[] | Y | 待翻译文本,既支持单条字符串,也支持字符串列表(批量翻译) |
| `target_lang` | string | Y | 目标语言:`zh`、`en`、`ru` 等 |
| `source_lang` | string | N | 源语言。云端模型可不传;`nllb-200-distilled-600m` 建议显式传入 |
| `model` | string | N | 已启用 capability 名称,如 `qwen-mt`、`llm`、`deepl`、`nllb-200-distilled-600m`、`opus-mt-zh-en`、`opus-mt-en-zh` |
| `scene` | string | N | 翻译场景参数,与 `model` 配套使用;当前标准值为 `sku_name`、`ecommerce_search_query`、`general` |
说明:
- 外部接口不接受 `prompt`;LLM prompt 由服务端按 `scene` 自动生成。
- 传入未定义的 `scene` 或未启用的 `model` 会返回 `400`。
**SKU 名称场景选型建议**:
- 批量 SKU 名称翻译,优先考虑本地大吞吐方案时,可使用 `"model": "nllb-200-distilled-600m"`(该模型"scene":参数无效)。
- 如果目标是更高质量,且可以接受更慢速度与额外 LLM API 费用,可使用 `"model": "llm"` + `"scene": "sku_name"`。
- 如果是en-zh互译、期待更高的速度,可以考虑`opus-mt-zh-en` / `opus-mt-en-zh`。(质量未详细评测,一些文章说比blib-200-600m更好,但是我看了些case感觉要差不少)
**实时翻译选型建议**:
- 在线 query 翻译如果只是 `en/zh` 互译,优先使用 `opus-mt-zh-en` 或 `opus-mt-en-zh`,它们是当前已测本地模型里延迟最低的一档。
- 如果涉及其他语言,或对质量要求高于本地轻量模型,优先考虑 `deepl`。
- `nllb-200-distilled-600m` 不建议作为在线 query 翻译默认方案;我们在 `Tesla T4` 上测到 `batch_size=1` 时,`zh -> en` p50 约 `292.54 ms`、p95 约 `624.12 ms`,`en -> zh` p50 约 `481.61 ms`、p95 约 `1171.71 ms`。
**Batch Size / 调用方式建议**:
- 本接口支持 `text: string[]`;离线或批量索引翻译时,应尽量合并请求,让底层 backend 发挥批处理能力。
- `nllb-200-distilled-600m` 在当前 `Tesla T4` 压测中,推荐配置是 `batch_size=16`、`max_new_tokens=64`、`attn_implementation=sdpa`;继续升到 `batch_size=32` 虽可能提高吞吐,但 tail latency 会明显变差。
- 在线 query 场景可直接把“单条请求”理解为 `batch_size=1`;更关注 request latency,而不是离线吞吐。
- `opus-mt-zh-en` / `opus-mt-en-zh` 当前生产配置也是 `batch_size=16`,适合作为中英互译的低延迟本地默认值;若走在线单条调用,同样按 `batch_size=1` 理解即可。
- `llm` 按单条请求即可。
**响应**:
```json
{
"text": "商品名称",
"target_lang": "en",
"source_lang": "zh",
"translated_text": "Product name",
"status": "success",
"model": "qwen-mt",
"scene": "sku_name"
}
```
当请求为列表形式时,`text` 与 `translated_text` 均为等长数组:
```json
{
"text": ["商品名称1", "商品名称2"],
"target_lang": "en",
"source_lang": "zh",
"translated_text": ["Product name 1", "Product name 2"],
"status": "success",
"model": "qwen-mt",
"scene": "sku_name"
}
```
> **失败语义(批量)**:当 `text` 为列表时,如果其中某条翻译失败,对应位置返回 `null`(即 `translated_text[i] = null`),并保持数组长度与顺序不变;接口整体仍返回 `status="success"`,用于避免“部分失败”导致整批请求失败。
> **实现提示(可忽略)**:服务端会尽可能使用底层 backend 的批量能力(若支持),否则自动拆分逐条翻译;无论采用哪种方式,上述批量契约保持一致。
**完整 curl 示例**:
中文 → 英文:
```bash
curl -X POST "http://localhost:6006/translate" \
-H "Content-Type: application/json" \
-d '{
"text": "商品名称",
"target_lang": "en",
"source_lang": "zh"
}'
```
俄文 → 英文:
```bash
curl -X POST "http://localhost:6006/translate" \
-H "Content-Type: application/json" \
-d '{
"text": "Название товара",
"target_lang": "en",
"source_lang": "ru"
}'
```
使用 DeepL 模型:
```bash
curl -X POST "http://localhost:6006/translate" \
-H "Content-Type: application/json" \
-d '{
"text": "商品名称",
"target_lang": "en",
"source_lang": "zh",
"model": "deepl"
}'
```
使用本地 OPUS 模型(中文 → 英文):
```bash
curl -X POST "http://localhost:6006/translate" \
-H "Content-Type: application/json" \
-d '{
"text": "蓝牙耳机",
"target_lang": "en",
"source_lang": "zh",
"model": "opus-mt-zh-en",
"scene": "sku_name"
}'
```
使用本地 NLLB 做 SKU 名称批量翻译:
```bash
curl -X POST "http://localhost:6006/translate" \
-H "Content-Type: application/json" \
-d '{
"text": ["商品名称1", "商品名称2", "商品名称3"],
"target_lang": "en",
"source_lang": "zh",
"model": "nllb-200-distilled-600m",
"scene": "sku_name"
}'
```
使用 LLM 做高质量 SKU 名称翻译:
```bash
curl -X POST "http://localhost:6006/translate" \
-H "Content-Type: application/json" \
-d '{
"text": "男士偏光飞行员太阳镜",
"target_lang": "en",
"source_lang": "zh",
"model": "llm",
"scene": "sku_name"
}'
```
#### 7.3.2 `GET /health` — 健康检查
```bash
curl "http://localhost:6006/health"
```
典型响应:
```json
{
"status": "healthy",
"service": "translation",
"default_model": "llm",
"default_scene": "general",
"available_models": ["qwen-mt", "llm", "opus-mt-zh-en"],
"enabled_capabilities": ["qwen-mt", "llm", "opus-mt-zh-en"],
"loaded_models": ["llm"]
}
```
### 7.4 内容理解字段生成(Indexer 服务内)
内容理解字段生成接口部署在 **Indexer 服务**(默认端口 6004)内,与「翻译、向量化」等独立端口微服务并列,供采用**微服务组合**方式的 indexer 调用。
- **Base URL**: Indexer 服务地址,如 `http://localhost:6004`
- **路径**: `POST /indexer/enrich-content`
- **说明**: 根据商品标题批量生成 `qanchors`、`semantic_attributes`、`tags`,用于拼装 ES 文档。内部使用大模型(需配置 `DASHSCOPE_API_KEY`),支持多语言与 Redis 缓存;单次最多 50 条,建议批量调用以提升效率。
请求/响应格式、示例及错误码见 [-05-索引接口(Indexer)](./搜索API对接指南-05-索引接口(Indexer).md#58-内容理解字段生成接口)。
---
|