Skip to content

基于 Python、LangGraph 和 FastAPI 构建的智能翻译服务,集成阿里云 Qwen3-mt 翻译模型,支持领域词汇智能匹配和翻译记忆功能。

Notifications You must be signed in to change notification settings

jansanw/translate-agent

Repository files navigation

Translate Agent 翻译服务

基于 Python、LangGraph 和 FastAPI 构建的智能翻译服务,集成阿里云 Qwen3-mt 翻译模型,支持领域词汇智能匹配和翻译记忆功能。

✨ 核心特性

🎯 智能领域匹配

  • 高精度模糊匹配:基于 thefuzz 库,提供更精准的术语匹配效果
  • 多策略评分:结合直接匹配、部分匹配、Token匹配等多种策略
  • 智能加成机制:领域上下文和背景信息可提升匹配准确度
  • 动态词汇选择:避免信息过载,只选择最相关的术语

📚 翻译记忆

  • 上下文保持:批量翻译时自动维护翻译记忆
  • 术语一致性:确保相同术语在不同位置的翻译一致性
  • 智能累积:自动保留最近的翻译历史

🔌 多接口支持

  • 单次翻译:快速翻译单个文本
  • 批量翻译:支持大量文本的批量处理
  • OpenAI 兼容接口:可无缝集成到现有 OpenAI 工作流

🐳 容器化部署

  • Docker 支持:提供完整的容器化部署方案
  • 生产就绪:包含健康检查、日志管理等生产环境特性

📦 技术栈

  • Python 3.8+
  • FastAPI - 现代化 Web 框架
  • LangGraph - 工作流编排
  • LangChain - LLM 集成
  • Qwen3-mt - 阿里云翻译模型
  • thefuzz - 模糊匹配库
  • Pandas - 数据处理
  • Docker - 容器化部署

🚀 快速开始

方式一:传统部署

1. 安装依赖

pip install -r requirements.txt

2. 配置环境变量

复制 .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=10

3. 启动服务

python main.py

服务将在 http://localhost:8000 启动。

方式二:Docker 部署

1. 配置环境变量

cp .env.example .env
# 编辑 .env 文件设置您的 API 密钥

2. 构建和启动

# 使用 Docker Compose
docker-compose up -d

# 或者直接构建
docker build -t translate-agent .
docker run -p 8000:8000 --env-file .env translate-agent

3. 验证部署

访问以下端点验证服务:

📖 API 接口说明

1. 单次翻译

接口: 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
}

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
}

3. OpenAI 兼容接口

接口: POST /v1/chat/completions

请求示例:

{
  "model": "qwen-mt-plus",
  "messages": [
    {
      "role": "user",
      "content": "云计算是一种基于互联网的计算方式"
    }
  ],
  "temperature": 0.5,
  "source_lang": "auto",
  "target_lang": "English"
}

4. 上传领域词汇

接口: POST /api/domain-vocab/upload

上传 CSV 格式的领域词汇文件。

CSV 格式要求:

source,target,domain
龙腾出行,dragonpass,dp
权益,entitlement,dp
云计算,Cloud Computing,IT

5. 查询领域词汇统计

接口: GET /api/domain-vocab/stats

响应示例:

{
  "total_count": 150,
  "vocab_path": "domain_vocab.csv",
  "similarity_threshold": 60,
  "max_matched_terms": 10
}

🎯 领域词汇智能匹配

工作原理(基于 thefuzz 模糊匹配)

  1. 直接匹配检测

    • 优先检查术语是否直接出现在待翻译文本中
    • 直接匹配获得最高分数(100分)
  2. 多策略模糊匹配

    • Partial Ratio:部分匹配,适合长文本中的短术语匹配
    • Token Sort Ratio:忽略词序的智能匹配
    • Token Set Ratio:忽略重复词和词序的匹配
    • 取三种策略的最高分作为基础分数
  3. 智能加成机制

    • 领域加成:上下文包含领域关键词时 +15分
    • 上下文加成:背景说明也包含术语时 +10分
    • 综合分数 = max(基础分数) + 领域加成 + 上下文加成
  4. 阈值过滤与排序

    • 只选择分数超过阈值(默认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 支持多种语言,常用的包括:

  • 中文:Chineseauto
  • 英文:English
  • 日文:Japanese
  • 韩文:Korean
  • 法文:French
  • 德文:German
  • 西班牙文:Spanish

更多语言请参考阿里云文档

📚 使用示例

Python 客户端示例

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 示例

# 单次翻译
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
Loading

🧪 测试

创建测试文件 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

📝 注意事项

  1. API 密钥安全:请妥善保管您的 API 密钥,不要提交到版本控制系统
  2. 并发限制:根据您的 API 配额合理控制并发请求数量
  3. 领域词汇质量:高质量的领域词汇库能显著提升翻译准确性
  4. 相似度阈值调整:根据实际效果调整 SIMILARITY_THRESHOLD 参数
  5. Docker 部署:确保 .env 文件中的敏感信息得到妥善保护

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📄 许可证

MIT License

?? 联系方式

如有问题或建议,请提交 Issue 或查看详细部署文档:

🎯 领域词汇智能匹配

工作原理(基于 thefuzz 模糊匹配)

  1. 直接匹配检测

    • 优先检查术语是否直接出现在待翻译文本中
    • 直接匹配获得最高分数(100分)
  2. 多策略模糊匹配

    • Partial Ratio:部分匹配,适合长文本中的短术语匹配
    • Token Sort Ratio:忽略词序的智能匹配
    • Token Set Ratio:忽略重复词和词序的匹配
    • 取三种策略的最高分作为基础分数
  3. 智能加成机制

    • 领域加成:上下文包含领域关键词时 +15分
    • 上下文加成:背景说明也包含术语时 +10分
    • 综合分数 = max(基础分数) + 领域加成 + 上下文加成
  4. 阈值过滤与排序

    • 只选择分数超过阈值(默认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 支持多种语言,常用的包括:

  • 中文:Chineseauto
  • 英文:English
  • 日文:Japanese
  • 韩文:Korean
  • 法文:French
  • 德文:German
  • 西班牙文:Spanish

更多语言请参考阿里云文档

📚 使用示例

Python 客户端示例

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 示例

# 单次翻译
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
Loading

🧪 测试

创建测试文件 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

📝 注意事项

  1. API 密钥安全:请妥善保管您的 API 密钥,不要提交到版本控制系统
  2. 并发限制:根据您的 API 配额合理控制并发请求数量
  3. 领域词汇质量:高质量的领域词汇库能显著提升翻译准确性
  4. 相似度阈值调整:根据实际效果调整 SIMILARITY_THRESHOLD 参数

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📄 许可证

MIT License

📮 联系方式

如有问题或建议,请提交 Issue。

About

基于 Python、LangGraph 和 FastAPI 构建的智能翻译服务,集成阿里云 Qwen3-mt 翻译模型,支持领域词汇智能匹配和翻译记忆功能。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published