首页 文章 精选 留言 我的

精选列表

搜索[CLI],共6437篇文章
优秀的个人博客,低调大师

从 0 到 1 手写一个 DeepSeek 翻译 CLI:附流式输出与批量翻译

一、效果预览 装好之后,翻译一句话就像这样: ``` $ 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 有限,个人开发者几乎可忽略成本。 1. **中文底子扎实**。作为国产模型,中英互译乃至中日、中韩等语种间的翻译质量稳定,对中文语境的把握尤其准确。 1. **OpenAI 兼容协议**。DeepSeek 开放平台提供与 OpenAI 对齐的 **Chat Completions** 接口(`/chat/completions`),一个标准 HTTP POST 即可调用,无需引入重量级 SDK,也便于日后无缝迁移到其他兼容服务。 具体价格与模型上下文长度以 [DeepSeek 开放平台](https://platform.deepseek.com/) 最新文档为准。 ## 三、环境准备 ### 1. 申请 API Key 1. 打开 [DeepSeek 开放平台](https://platform.deepseek.com/),注册并登录。 1. 进入「API Keys」页面,点击「创建 API Key」。 1. 复制生成的 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 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 ` 是标准鉴权方式;`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, } ``` |参数|说明| | --- | --- | |model|deepseek-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` 退避重试,而不是立即高频重打。 1. **上下文截断**:单次请求有上下文长度上限,翻译长文档时应先按段落/章节拆分,逐段调用再拼接,避免超出窗口导致截断。 1. **跨境访问稳定性**:如果你的脚本需要同时调用 OpenAI、Claude 等海外模型做对照翻译,跨境网络抖动会成为不稳定因素,必要时可通过亿牛云等代理 IP 服务保障连接质量。

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册