翻译队列:批量处理系统
本文介绍我们如何通过队列和批量处理来优化AI API使用。
问题:按需翻译成本高昂
按需翻译内容存在以下问题:
-
速度慢:每次翻译需要1-2秒
-
成本高:每次请求都有API费用
-
重复性:相同文本被多次翻译
-
阻塞性:用户需要等待翻译完成
我们需要更好的解决方案。
解决方案:队列与批量处理
队列:收集翻译请求
批量:同时处理多个翻译
缓存:存储结果以供重用
调度:定期处理队列(非实时)
队列结构
队列文件
位置:磁盘上的JSON文件
格式:翻译请求数组
字段:
-
text:待翻译的英文文本 -
target_lang:语言代码(hi、de、fr等) -
context:文本出现位置(产品、查询、文章) -
priority:高/普通/低优先级
添加到队列
当缺少翻译时:
queue_translation(text, target_lang, context="product")
去重:检查是否已排队
验证:拒绝无效值
批量处理
脚本
位置:scripts/web/process_translation_queue.py
调度:通过cron每6小时运行一次
锁文件:防止并发运行
处理流程
1. 加载队列:读取所有待处理请求
2. 按语言分组:批量处理相同语言的请求
3. 去重:移除批次内的重复项
4. 检查缓存:跳过已翻译文本
5. 批量翻译:发送到DeepSeek API
6. 解析结果:从响应中提取翻译
7. 保存到缓存:存储到短语表
8. 清空队列:移除已处理的请求
批量翻译
API调用
模型:DeepSeek-V3(通过Together.ai)
系统提示:已缓存(同一语言的所有批次相同)
用户提示:变量(批次特定)
格式:编号列表
示例:
翻译以下10个文本:
1. Mini PC
2. Thin Client
3. Compact Desktop
...
响应:
1. मिनी पीसी
2. थिन क्लाइंट
3. कॉम्पैक्ट डेस्कटॉप
...
解析
按行号提取翻译:
-
移除数字前缀(
1.、2.等) -
按位置匹配原始文本
-
验证数量匹配
错误处理
API失败:使用备用API重试
解析失败:返回原始文本
部分成功:保存成功翻译,重新排队失败的请求
缓存策略
短语表
位置:每种语言的JSON文件
格式:{"英文": "翻译"}
加载:启动时一次性加载
优势:快速查找,无需API调用
缓存命中率
首次运行:低(所有内容都是新的)
后续运行:高(大部分文本已缓存)
优势:降低API成本
保留规则
翻译过程中保留以下内容:
品牌名称:Thinvent®、Intel®、AMD®
HTML标签:<p>、<br>、<strong>
URL:https://www.thinvent.in
SKU:Treo-N100-8-256
数字:8GB、256GB、4核心
实现:系统提示中的正则表达式模式
语言检测
翻译前检查是否已翻译:
方法:字符集分析
印地语:天城文字母
中文:CJK字符
阿拉伯语:阿拉伯文字母
优势:跳过不必要的翻译
优先级处理
高优先级:产品名称、功能特性(优先处理)
普通优先级:描述、文章(其次处理)
低优先级:旧内容、很少查看的内容(最后处理)
优势:重要内容优先翻译
调度
Cron任务
频率:每6小时
命令:python3 scripts/web/process_translation_queue.py
锁文件:/tmp/process_translation_queue.lock
优势:自动处理,无需人工干预
每周任务
文章:每周翻译新文章
Babel字符串:每周更新模板翻译
脚本:scripts/web/translate_articles_weekly.sh
监控
队列大小
跟踪待处理请求:
-
总请求数
-
每种语言的请求数
-
最旧请求的年龄
告警:如果队列过大
翻译统计
跟踪处理情况:
-
每批次翻译数量
-
API成功率
-
缓存命中率
-
处理时间
成本跟踪
监控API使用:
-
每日请求数
-
每次请求的令牌数
-
每种语言的成本
参考
相关文章
总结
翻译队列实现高效批量处理:
队列:
-
✅ 收集翻译请求
-
✅ 批次内去重
-
✅ 优先级处理
-
✅ 验证和过滤
批量处理:
-
✅ 按语言分组
-
✅ 发送到DeepSeek API
-
✅ 解析编号响应
-
✅ 保存到短语表
缓存:
-
✅ 翻译前检查缓存
-
✅ 高缓存命中率
-
✅ 降低API成本
调度:
-
✅ 通过cron每6小时运行
-
✅ 锁文件防止并发运行
-
✅ 每周文章翻译
保留规则:
-
✅ 品牌名称
-
✅ HTML标签
-
✅ URL和SKU
这种方法通过批处理和缓存降低了API成本,提高了翻译质量。