基于 Python、LangGraph 和 FastAPI 构建的智能翻译服务,集成阿里云 Qwen3-mt 翻译模型,支持领域词汇智能匹配和翻译记忆功能。
- 高精度模糊匹配:基于 thefuzz 库,提供更精准的术语匹配效果
- 多策略评分:结合直接匹配、部分匹配、Token匹配等多种策略
- 智能加成机制:领域上下文和背景信息可提升匹配准确度
- 动态词汇选择:避免信息过载,只选择最相关的术语
- 上下文保持:批量翻译时自动维护翻译记忆
- 术语一致性:确保相同术语在不同位置的翻译一致性
- 智能累积:自动保留最近的翻译历史
- 单次翻译:快速翻译单个文本
- 批量翻译:支持大量文本的批量处理
- OpenAI 兼容接口:可无缝集成到现有 OpenAI 工作流
- Docker 支持:提供完整的容器化部署方案
- 生产就绪:包含健康检查、日志管理等生产环境特性
- Python 3.8+
- FastAPI - 现代化 Web 框架
- LangGraph - 工作流编排
- LangChain - LLM 集成
- Qwen3-mt - 阿里云翻译模型
- thefuzz - 模糊匹配库
- Pandas - 数据处理
- Docker - 容器化部署
pip install -r requirements.txt复制 .env.example 并重命名为 .env,然后填入您的配置:
# 阿里云百炼API配置
BAI_LIAN_API_KEY=your_api_key_here
# 服务配置
HOST=0.0.0.0
PORT=8000
# 翻译配置
DEFAULT_MODEL=qwen-mt-plus
DEFAULT_TEMPERATURE=0.5
# 领域词汇配置
DOMAIN_VOCAB_PATH=domain_vocab.csv
SIMILARITY_THRESHOLD=60
MAX_MATCHED_TERMS=10python main.py服务将在 http://localhost:8000 启动。
cp .env.example .env
# 编辑 .env 文件设置您的 API 密钥# 使用 Docker Compose
docker-compose up -d
# 或者直接构建
docker build -t translate-agent .
docker run -p 8000:8000 --env-file .env translate-agent访问以下端点验证服务:
接口: POST /api/translate
请求示例:
{
"text": "云计算是一种基于互联网的计算方式",
"source_lang": "auto",
"target_lang": "English",
"domain_prompt": "IT domain translation",
"domain": "Technical documentation translation",
"enable_domain_match": true
}响应示例:
{
"translated_text": "Cloud computing is an Internet-based computing method",
"source_lang": "auto",
"target_lang": "English",
"matched_terms_count": 2
}接口: POST /api/translate/batch
请求示例:
{
"texts": [
"云计算是一种基于互联网的计算方式",
"虚拟机是云计算的基础设施",
"容器技术提供了轻量级的虚拟化方案"
],
"source_lang": "auto",
"target_lang": "English",
"domain_prompt": "IT domain translation",
"domain": "Cloud computing documentation",
"enable_context": true,
"enable_domain_match": true
}响应示例:
{
"translated_texts": [
"Cloud computing is an Internet-based computing method",
"Virtual machines are the infrastructure of cloud computing",
"Container technology provides a lightweight virtualization solution"
],
"source_lang": "auto",
"target_lang": "English",
"matched_terms_count": 3
}接口: POST /v1/chat/completions
请求示例:
{
"model": "qwen-mt-plus",
"messages": [
{
"role": "user",
"content": "云计算是一种基于互联网的计算方式"
}
],
"temperature": 0.5,
"source_lang": "auto",
"target_lang": "English"
}接口: POST /api/domain-vocab/upload
上传 CSV 格式的领域词汇文件。
CSV 格式要求:
source,target,domain
龙腾出行,dragonpass,dp
权益,entitlement,dp
云计算,Cloud Computing,IT
接口: GET /api/domain-vocab/stats
响应示例:
{
"total_count": 150,
"vocab_path": "domain_vocab.csv",
"similarity_threshold": 60,
"max_matched_terms": 10
}-
直接匹配检测
- 优先检查术语是否直接出现在待翻译文本中
- 直接匹配获得最高分数(100分)
-
多策略模糊匹配
- Partial Ratio:部分匹配,适合长文本中的短术语匹配
- Token Sort Ratio:忽略词序的智能匹配
- Token Set Ratio:忽略重复词和词序的匹配
- 取三种策略的最高分作为基础分数
-
智能加成机制
- 领域加成:上下文包含领域关键词时 +15分
- 上下文加成:背景说明也包含术语时 +10分
- 综合分数 = max(基础分数) + 领域加成 + 上下文加成
-
阈值过滤与排序
- 只选择分数超过阈值(默认60分)的词汇
- 按综合分数降序排序,选择最相关的 N 个词汇
source,target,domain
石墨烯,graphene,材料科学
铁砧,Anvil,金属加工工艺
淬火,Quenching,金属加工工艺
云计算,Cloud Computing,IT
- source: 源语言术语
- target: 目标语言术语
- domain: 领域分类(用于匹配)
| 变量名 | 说明 | 默认值 |
|---|---|---|
| BAI_LIAN_API_KEY | 阿里云百炼 API 密钥 | 必填 |
| HOST | 服务监听地址 | 0.0.0.0 |
| PORT | 服务端口 | 8000 |
| DEFAULT_MODEL | 默认翻译模型 | qwen-mt-plus |
| DEFAULT_TEMPERATURE | 模型温度参数 | 0.5 |
| DOMAIN_VOCAB_PATH | 领域词汇文件路径 | domain_vocab.csv |
| SIMILARITY_THRESHOLD | 相似度阈值(0-100) | 60 |
| MAX_MATCHED_TERMS | 最大匹配词汇数 | 10 |
Qwen3-mt 支持多种语言,常用的包括:
- 中文:
Chinese或auto - 英文:
English - 日文:
Japanese - 韩文:
Korean - 法文:
French - 德文:
German - 西班牙文:
Spanish
更多语言请参考阿里云文档
import requests
# 单次翻译
response = requests.post(
"http://localhost:8000/api/translate",
json={
"text": "云计算是未来的趋势",
"source_lang": "auto",
"target_lang": "English",
"domain_prompt": "Technology translation",
"domain": "IT industry",
"enable_domain_match": True
}
)
print(response.json())
# 批量翻译
response = requests.post(
"http://localhost:8000/api/translate/batch",
json={
"texts": [
"云计算是未来的趋势",
"微服务架构越来越流行"
],
"source_lang": "auto",
"target_lang": "English",
"domain": "Cloud computing",
"enable_context": True,
"enable_domain_match": True
}
)
print(response.json())# 单次翻译
curl -X POST "http://localhost:8000/api/translate" \
-H "Content-Type: application/json" \
-d '{
"text": "云计算是未来的趋势",
"source_lang": "auto",
"target_lang": "English",
"domain_prompt": "Technology translation",
"domain": "IT industry",
"enable_domain_match": true
}'
# 批量翻译
curl -X POST "http://localhost:8000/api/translate/batch" \
-H "Content-Type: application/json" \
-d '{
"texts": ["云计算是未来的趋势", "微服务架构越来越流行"],
"source_lang": "auto",
"target_lang": "English",
"domain": "Cloud computing",
"enable_context": true,
"enable_domain_match": true
}'translate-agent/
├── src/
│ ├── __init__.py # 包初始化
│ ├── api.py # FastAPI 应用主文件
│ ├── models.py # 数据模型定义
│ ├── translation_service.py # 翻译服务核心
│ ├── domain_matcher.py # 领域词汇匹配器
│ └── workflow.py # LangGraph 工作流
├── main.py # 应用启动文件
├── requirements.txt # 项目依赖
├── .env.example # 环境变量模板
├── domain_vocab.csv # 领域词汇示例
├── Dockerfile # 容器构建配置
├── docker-compose.yml # Docker 编排配置
├── docker-deploy.md # Docker 部署指南
└── README.md # 项目文档
graph TD
A[接收翻译请求] --> B{启用领域匹配?}
B -->|是| C[提取关键词]
B -->|否| E[直接翻译]
C --> D[匹配领域词汇]
D --> E
E --> F[调用 Qwen3-mt API]
F --> G{批量翻译?}
G -->|是| H[更新翻译记忆]
G -->|否| I[返回结果]
H --> I
创建测试文件 test_api.py:
import requests
BASE_URL = "http://localhost:8000"
def test_single_translation():
response = requests.post(
f"{BASE_URL}/api/translate",
json={
"text": "云计算是一种基于互联网的计算方式",
"target_lang": "English",
"domain": "IT technology",
"enable_domain_match": True
}
)
assert response.status_code == 200
result = response.json()
print("单次翻译结果:", result)
assert "translated_text" in result
def test_batch_translation():
response = requests.post(
f"{BASE_URL}/api/translate/batch",
json={
"texts": [
"云计算是未来的趋势",
"微服务架构越来越流行"
],
"target_lang": "English",
"domain": "Cloud computing",
"enable_context": True,
"enable_domain_match": True
}
)
assert response.status_code == 200
result = response.json()
print("批量翻译结果:", result)
assert len(result["translated_texts"]) == 2
if __name__ == "__main__":
test_single_translation()
test_batch_translation()
print("所有测试通过!")运行测试:
python test_api.py- API 密钥安全:请妥善保管您的 API 密钥,不要提交到版本控制系统
- 并发限制:根据您的 API 配额合理控制并发请求数量
- 领域词汇质量:高质量的领域词汇库能显著提升翻译准确性
- 相似度阈值调整:根据实际效果调整
SIMILARITY_THRESHOLD参数 - Docker 部署:确保
.env文件中的敏感信息得到妥善保护
欢迎提交 Issue 和 Pull Request!
MIT License
如有问题或建议,请提交 Issue 或查看详细部署文档:
- DEPLOYMENT.md - 完整部署指南
- docker-deploy.md - Docker 部署说明
-
直接匹配检测
- 优先检查术语是否直接出现在待翻译文本中
- 直接匹配获得最高分数(100分)
-
多策略模糊匹配
- Partial Ratio:部分匹配,适合长文本中的短术语匹配
- Token Sort Ratio:忽略词序的智能匹配
- Token Set Ratio:忽略重复词和词序的匹配
- 取三种策略的最高分作为基础分数
-
智能加成机制
- 领域加成:上下文包含领域关键词时 +15分
- 上下文加成:背景说明也包含术语时 +10分
- 综合分数 = max(基础分数) + 领域加成 + 上下文加成
-
阈值过滤与排序
- 只选择分数超过阈值(默认60分)的词汇
- 按综合分数降序排序,选择最相关的 N 个词汇
source,target,domain
石墨烯,graphene,材料科学
铁砧,Anvil,金属加工工艺
淬火,Quenching,金属加工工艺
云计算,Cloud Computing,IT
- source: 源语言术语
- target: 目标语言术语
- domain: 领域分类(用于匹配)
| 变量名 | 说明 | 默认值 |
|---|---|---|
| BAI_LIAN_API_KEY | 阿里云百炼 API 密钥 | 必填 |
| HOST | 服务监听地址 | 0.0.0.0 |
| PORT | 服务端口 | 8000 |
| DEFAULT_MODEL | 默认翻译模型 | qwen-mt-plus |
| DEFAULT_TEMPERATURE | 模型温度参数 | 0.5 |
| DOMAIN_VOCAB_PATH | 领域词汇文件路径 | domain_vocab.csv |
| SIMILARITY_THRESHOLD | 相似度阈值(0-100) | 60 |
| MAX_MATCHED_TERMS | 最大匹配词汇数 | 10 |
Qwen3-mt 支持多种语言,常用的包括:
- 中文:
Chinese或auto - 英文:
English - 日文:
Japanese - 韩文:
Korean - 法文:
French - 德文:
German - 西班牙文:
Spanish
更多语言请参考阿里云文档
import requests
# 单次翻译
response = requests.post(
"http://localhost:8000/api/translate",
json={
"text": "云计算是未来的趋势",
"source_lang": "auto",
"target_lang": "English",
"enable_domain_match": True
}
)
print(response.json())
# 批量翻译
response = requests.post(
"http://localhost:8000/api/translate/batch",
json={
"texts": [
"云计算是未来的趋势",
"微服务架构越来越流行"
],
"source_lang": "auto",
"target_lang": "English",
"enable_context": True,
"enable_domain_match": True
}
)
print(response.json())# 单次翻译
curl -X POST "http://localhost:8000/api/translate" \
-H "Content-Type: application/json" \
-d '{
"text": "云计算是未来的趋势",
"source_lang": "auto",
"target_lang": "English",
"enable_domain_match": true
}'
# 批量翻译
curl -X POST "http://localhost:8000/api/translate/batch" \
-H "Content-Type: application/json" \
-d '{
"texts": ["云计算是未来的趋势", "微服务架构越来越流行"],
"source_lang": "auto",
"target_lang": "English",
"enable_context": true,
"enable_domain_match": true
}'translate-agent/
├── src/
│ ├── __init__.py # 包初始化
│ ├── api.py # FastAPI 应用主文件
│ ├── models.py # 数据模型定义
│ ├── translation_service.py # 翻译服务核心
│ ├── domain_matcher.py # 领域词汇匹配器
│ └── workflow.py # LangGraph 工作流
├── main.py # 应用启动文件
├── requirements.txt # 项目依赖
├── .env.example # 环境变量模板
├── domain_vocab.csv # 领域词汇示例
└── README.md # 项目文档
graph TD
A[接收翻译请求] --> B{启用领域匹配?}
B -->|是| C[提取关键词]
B -->|否| E[直接翻译]
C --> D[匹配领域词汇]
D --> E
E --> F[调用 Qwen3-mt API]
F --> G{批量翻译?}
G -->|是| H[更新翻译记忆]
G -->|否| I[返回结果]
H --> I
创建测试文件 test_api.py:
import requests
BASE_URL = "http://localhost:8000"
def test_single_translation():
response = requests.post(
f"{BASE_URL}/api/translate",
json={
"text": "云计算是一种基于互联网的计算方式",
"target_lang": "English",
"enable_domain_match": True
}
)
assert response.status_code == 200
result = response.json()
print("单次翻译结果:", result)
assert "translated_text" in result
def test_batch_translation():
response = requests.post(
f"{BASE_URL}/api/translate/batch",
json={
"texts": [
"云计算是未来的趋势",
"微服务架构越来越流行"
],
"target_lang": "English",
"enable_context": True,
"enable_domain_match": True
}
)
assert response.status_code == 200
result = response.json()
print("批量翻译结果:", result)
assert len(result["translated_texts"]) == 2
if __name__ == "__main__":
test_single_translation()
test_batch_translation()
print("所有测试通过!")运行测试:
python test_api.py- API 密钥安全:请妥善保管您的 API 密钥,不要提交到版本控制系统
- 并发限制:根据您的 API 配额合理控制并发请求数量
- 领域词汇质量:高质量的领域词汇库能显著提升翻译准确性
- 相似度阈值调整:根据实际效果调整
SIMILARITY_THRESHOLD参数
欢迎提交 Issue 和 Pull Request!
MIT License
如有问题或建议,请提交 Issue。