一、效果预览

装好之后,翻译一句话就像这样:

$ python translator.py "The quick brown fox jumps over the lazy dog" 中文
敏捷的棕色狐狸跳过了懒狗

$ python translator.py "今天天气不错,我们出去走走吧" 英语
The weather is nice today, let's go out for a walk.

要翻译成日语、法语、德语?改一下第二个参数即可:

$ python translator.py "How are you doing today?" 日语
今日は調子はどうですか?

整个过程无需打开浏览器、无需登录、无需切换输入法——这正是命令行工具的「零摩擦」价值。

二、为什么是大模型翻译 + DeepSeek?

先说「为什么用大模型做翻译」。相比传统规则引擎和早期统计机器翻译,大语言模型(LLM)的优势在于结合上下文理解语义:它能处理一词多义、口语化表达、专业术语,甚至保留原文语气,而不是逐词硬翻。

在众多模型服务里选 DeepSeek,理由有三:

  1. 成本极低。DeepSeek 按 token 计费,定价在主流大模型中处于亲民档位;翻译场景单次消耗 token 有限,个人开发者几乎可忽略成本。
  2. 中文底子扎实。作为国产模型,中英互译乃至中日、中韩等语种间的翻译质量稳定,对中文语境的把握尤其准确。
  3. OpenAI 兼容协议。DeepSeek 开放平台提供与 OpenAI 对齐的 Chat Completions 接口(/chat/completions),一个标准 HTTP POST 即可调用,无需引入重量级 SDK,也便于日后无缝迁移到其他兼容服务。

具体价格与模型上下文长度以 DeepSeek 开放平台 最新文档为准。

三、环境准备

1. 申请 API Key

  1. 打开 DeepSeek 开放平台,注册并登录。
  2. 进入「API Keys」页面,点击「创建 API Key」。
  3. 复制生成的 key(形如 sk-xxxxxxxxxxxxxxxx),务必妥善保存,页面关闭后无法再次查看。

2. 安装依赖

整个工具只依赖一个第三方库 requests:

pip install requests

四、完整代码

新建 translator.py,把下面这段代码贴进去,替换 API_KEY 即可:

import sys
import requests

API_KEY = "sk-xxxxxxxxxxxxxxxx"  # 换成你自己的 Key
API_URL = "https://api.deepseek.com/chat/completions"

def translate(text, target="中文"):
    headers = {"Authorization": f"Bearer {API_KEY}",
               "Content-Type": "application/json"}
    prompt = f"请将以下内容翻译成{target},只输出译文,不要任何解释:\n\n{text}"
    payload = {
        "model": "deepseek-chat",
        "messages": [{"role": "user", "content": prompt}],
        "temperature": 0.3,
    }
    resp = requests.post(API_URL, headers=headers, json=payload, timeout=30)
    resp.raise_for_status()
    return resp.json()["choices"][0]["message"]["content"].strip()

def main():
    if len(sys.argv) < 2:
        print("用法:python translator.py \"要翻译的内容\" [目标语言]")
        sys.exit(1)
    text = sys.argv[1]
    target = sys.argv[2] if len(sys.argv) > 2 else "中文"
    try:
        print(translate(text, target))
    except Exception as e:
        print(f"翻译失败:{e}")

if __name__ == "__main__":
    main()

去掉空行,核心逻辑恰好 30 行上下。

五、逐块拆解:每行代码在做什么

1. 配置常量

API_KEY = "sk-xxxxxxxxxxxxxxxx"
API_URL = "https://api.deepseek.com/chat/completions"
  • API_KEY:身份凭证,随每个请求通过请求头传递。
  • API_URL:DeepSeek 的对话补全端点。该接口与 OpenAI 协议对齐,返回结构也保持一致(见第 5 节)。

2. 请求头

headers = {"Authorization": f"Bearer {API_KEY}",
           "Content-Type": "application/json"}

Authorization: Bearer <key> 是标准鉴权方式;Content-Type 声明请求体为 JSON。

3. Prompt 设计(全段最关键的一行)

prompt = f"请将以下内容翻译成{target},只输出译文,不要任何解释:\n\n{text}"

这行最容易被低估。Prompt 质量直接决定译文质量与可解析性。 这里刻意加了「只输出译文,不要任何解释」的约束,否则模型可能先来一句「好的,以下是翻译结果:」,污染输出。对机器可读的接口而言,约束输出格式比追求辞藻更重要。

4. 请求体参数

payload = {
    "model": "deepseek-chat",
    "messages": [{"role": "user", "content": prompt}],
    "temperature": 0.3,
}
参数说明
modeldeepseek-chat 为通用对话模型,翻译场景足够;追求更强推理可换 deepseek-reasoner
messages对话消息列表,role 区分 system / user / assistant
temperature采样温度,取值 0~2。设为 0.3 让输出更确定、更忠实原文,抑制「自由发挥」

翻译是「高确定性」任务,temperature 不宜过高;同理还可叠加 top_p 进一步收紧采样分布。

5. 发起请求与结果解析

resp = requests.post(API_URL, headers=headers, json=payload, timeout=30)
resp.raise_for_status()
return resp.json()["choices"][0]["message"]["content"].strip()
  • json=payload:requests 自动完成 JSON 序列化与编码。
  • raise_for_status():非 2xx 状态码直接抛异常,把错误暴露出来而非静默吞掉。
  • 返回体为标准结构:choices[0].message.content 即模型回复,strip() 清理首尾空白。

6. 命令行参数

text = sys.argv[1]
target = sys.argv[2] if len(sys.argv) > 2 else "中文"

第一个参数为待译文本,第二个参数(可选)为目标语言,缺省翻译为中文。

六、运行演示

# 英文 → 中文(默认)
python translator.py "Machine learning is transforming every industry"

# 中文 → 英文
python translator.py "这个方案能大幅降低我们的运营成本" 英语

# 指定其他目标语言
python translator.py "What time does the train leave?" 法语

译文直接打印在终端,复制即用。

提示:在 Windows 的 PowerShell / CMD 中,含空格或特殊字符的文本务必用双引号包裹,否则会被按空格拆成多个参数。

七、进阶玩法

30 行是起点,下面是几个可叠加的工程化方向。

1. 流式输出(Streaming)

长文本翻译时,非流式要等完整响应返回。开启 stream=True 可逐 token 打印,体验更接近 ChatGPT:

payload["stream"] = True
resp = requests.post(API_URL, headers=headers, json=payload, stream=True)
for line in resp.iter_lines():
    if line:
        chunk = line.decode("utf-8").removeprefix("data: ")
        if chunk != "[DONE]":
            print(chunk, end="")

2. 交互模式(REPL)

不想每次都敲完整命令?加一个循环即可连续翻译:

while True:
    line = input("翻译内容(q 退出)> ")
    if line.lower() == "q":
        break
    print(translate(line))

3. 翻译整个文件

读入、翻译、写回,适合长文档批处理:

with open("input.txt", encoding="utf-8") as f:
    content = f.read()
with open("output.txt", "w", encoding="utf-8") as f:
    f.write(translate(content))

4. 批量翻译海外内容:采集 + 翻译一条龙

真实业务里,待译原文往往散落在海外新闻站、论文库、电商评论区,而不是躺在本地。这类场景的完整链路是「采集原文 → 批量翻译 → 落库」。

采集这一步,海外站点普遍有反爬策略,单 IP 高频请求极易被限流甚至封禁。此时可接入亿牛云代理 IP,通过动态代理 IP 池轮换请求来源,让采集链路更稳定,再把抓取的原文批量交给上面的 translate() 处理。亿牛云这类爬虫代理服务,正是为「大规模数据采集」而设计的;配合本文的翻译脚本,即可搭出一套「海外内容采集 + 自动翻译」的完整流水线。

5. 自动检测源语言

把 Prompt 改为「请将以下内容翻译成{target},先自动识别源语言,只输出译文」,模型会自动判断输入是中文还是英文,省去手动指定方向。

八、避坑指南

  1. API Key 安全:切勿把 sk- 开头的 Key 提交到公开仓库。更稳妥的做法是从环境变量读取:
import os
API_KEY = os.environ.get("DEEPSEEK_API_KEY", "")
  1. 常见错误码:401 鉴权失败(Key 错误或失效)、402 余额不足、429 触发限流、5xx 服务端异常。遇到 429 建议按返回的 Retry-After 退避重试,而不是立即高频重打。
  2. 上下文截断:单次请求有上下文长度上限,翻译长文档时应先按段落/章节拆分,逐段调用再拼接,避免超出窗口导致截断。
  3. 跨境访问稳定性:如果你的脚本需要同时调用 OpenAI、Claude 等海外模型做对照翻译,跨境网络抖动会成为不稳定因素,必要时可通过亿牛云等代理 IP 服务保障连接质量。
Logo

更多推荐