进阶 11 分钟翻译

本地文档翻译:替代方案 DeepL

将合同、财务报告或人力资源档案粘贴到 DeepL 或 ChatGPT 中,就是将这份文档发送到您无法控制的服务器上。本地 AI 翻译解决了这一问题:多语言大语言模型在您的设备上运行,任何数据都不会离开设备。本指南介绍该选择哪些模型、如何保留文件的排版格式,以及如何用一个简单的 Ollama 脚本批量翻译数十份文档。

作者: Marie L.·更新于 2026-08-27·已在 Windows、macOS 和 Linux 上测试

#为何不将您的文件发送至DeepL

DeepL 和 Google Translate 表现优秀,但其商业模式依赖云端:您的文本会经过它们的服务器,并且可能被保存或用于改进模型,具体取决于所选服务方案。对于一封无关紧要的邮件,这并不重要。但对于受保密协议(NDA)约束的合同、正在申请的专利、资产负债表或员工个人数据,这会带来切实的法律和竞争风险。

本地 AI 翻译改变了局面:模型下载到您的磁盘上,并在您的 CPU 或 GPU 上运行。没有网络请求,无需账户,也没有翻译量限制。您可以翻译一整个文件夹中的机密文档,而不会有任何一个字节离开您的电脑——即使离线、身处飞机上或使用隔离网络,也能做到。

i
真正的优势:合规性
对于律师事务所、人力资源部门或医疗团队,在本地进行翻译可以消除向受托处理方传输数据所涉及的所有 GDPR 问题。文档始终不会离开企业范围。
隐私
合同、专利、医疗或人力资源数据仍保留在您的机器上。
使用成本为零
无需订阅或按字符计费:10 或 10,000 页的翻译价格相同。
Hors-ligne
无需联网,适用于离线设备或移动场景。
处理量不限
没有云 API 那样的每月配额或限流。

#哪些本地模型的翻译效果真正出色

本地 RAG 工具包

你的文档,你的 AI:基于你的 PDF、笔记和邮件的可靠本地 RAG——无需向云端发送任何内容。

  • 在线空间,终身可用
  • PDF + 文件
  • 30 天内退款

并非所有大语言模型在翻译任务上都表现相同。一个优秀的本地翻译模型必须经过大规模多语言语料库训练,并能细致处理法语。2026 年,有几个模型系列在自托管应用中明显脱颖而出。

Qwen 3.5 9B
多语言表现优秀,法语能力非常出色,能准确处理细微差别和专业术语。≈6.6 GB,Q4 量化,256k 上下文长度,Apache 2.0 许可:2026 年质量与资源之间的最佳平衡。若质量不足,可升级至 Qwen 3.8 27B(≈18 GB)。
Gemma 4 12B
翻译流畅自然,法语标点使用规范。支持多模态,目前采用 Apache 2.0 许可证(Gemma 于 2026 年改用 Apache 2.0)。Q4 量化下约占 7.6 GB,可在配备 12–16 GB 显存的 GPU 或采用统一内存的 Mac 上轻松运行。
Qwen 3.5 4B
2026 年的默认多语言小模型:仅约 3.4 GB,几乎哪里都能运行——即使只用 CPU——而且以其规模而言,翻译表现已经相当出色。Apache 2.0。
Mistral Small 24B
法语表现出色,速度快,Q4 量化后约占 14 GB。作为通用模型表现扎实,是在 16 GB 显存的 GPU 上处理大量任务的很好选择。
Qwen 3.6 35B-A3B
凭借 MoE 架构,该模型的质量接近云端;现在,32 GB 内存即可使用(Q4 下约需 23 GB,适用于 RTX 4090 或统一内存较大的 Mac)。仅适用于要求较高的翻译任务。
→
从哪里开始
如果您拿不定主意,先运行采用 Q4_K_M 量化的 Qwen 3.5 9B。在显存为 8–12 GB 的 GPU 上进行法语 ↔ 英语/西班牙语/德语/意大利语翻译时,它在翻译质量与显存占用之间提供了最佳平衡。只有在质量无法满足您的需求时,才切换到 Qwen 3.8 27B。

也存在专门用于‘翻译’的模型,如 NLLB 或 Opus-MT,它们非常轻量,但近期的通用大语言模型在长文本处理和上下文保持(如语域、专业术语、文档整体一致性)方面通常表现更优。


#先决条件与安装

基础方案很常见:用 Ollama 作为推理引擎,搭配一个多语言模型,再用 Python 编写文件处理脚本。Ollama 默认监听 http://localhost:11434。

Ollama 已安装
负责下载和运行模型的后台服务。如果尚未安装,请参阅安装指南。
性能充裕的 GPU
一块 RTX 3060 12 GB 显卡可轻松运行 Qwen 3.5 9B 的 Q4(约 6.6 GB)版本,同样可在 CPU 上运行,但速度较慢。
Python 3.10+
处理DOCX、PDF和Markdown文件,并调用Ollama的API。
终端
# Récupérer un modèle multilingue adapté à la traduction
ollama pull qwen3.5:9b

# Vérifier qu'il répond
ollama run qwen3.5:9b "Traduis en anglais : Le contrat prend effet à sa signature."
终端
# Dépendances Python pour les formats de documents
pip install ollama python-docx pypdf markdown-it-py

#首次翻译测试

在实现自动化之前,请先用一段有代表性的文本验证翻译质量。做好本地翻译的关键在于系统提示词:它设定角色、目标语言,尤其是不得添加任何内容这一要求。

traduire.py
import ollama

MODELE = "qwen3.5:9b"

SYSTEME = (
    "Tu es un traducteur professionnel. Traduis le texte fourni de "
    "{source} vers {cible}. Conserve le sens, le registre et la "
    "terminologie technique. Ne commente pas, n'ajoute rien : "
    "renvoie uniquement la traduction."
)

def traduire(texte, source="français", cible="anglais"):
    reponse = ollama.chat(
        model=MODELE,
        messages=[
            {"role": "system", "content": SYSTEME.format(source=source, cible=cible)},
            {"role": "user", "content": texte},
        ],
        options={"temperature": 0.2},
    )
    return reponse["message"]["content"].strip()

if __name__ == "__main__":
    extrait = "Le présent contrat prend effet à la date de sa signature par les deux parties."
    print(traduire(extrait))
→
较低的温度参数
在翻译任务中,温度值设置在0.1至0.3之间可获得更准确且可复现的结果。过高的温度会使模型倾向于‘自由发挥’和重新表述,这并不理想。

#保留原始格式(DOCX、PDF、Markdown)

翻译纯文本很容易;保留实际文档的格式则没那么容易。正确的做法不是把整个文件丢给模型,而是在原位置逐一翻译每个文本片段,保持文档结构不变。

#Word文件(DOCX)

python-docx 可以访问每个段落和表格中的每个单元格。翻译每个“run”的文本,同时保留其样式,然后重新写入文件。页面排版、标题和表格都会保留。

traduire_docx.py
from docx import Document
from traduire import traduire

def traduire_docx(entree, sortie, cible="anglais"):
    doc = Document(entree)

    for para in doc.paragraphs:
        if para.text.strip():
            para.text = traduire(para.text, cible=cible)

    for table in doc.tables:
        for ligne in table.rows:
            for cellule in ligne.cells:
                if cellule.text.strip():
                    cellule.text = traduire(cellule.text, cible=cible)

    doc.save(sortie)
    print(f"Traduit : {sortie}")

if __name__ == "__main__":
    traduire_docx("contrat.docx", "contrat_en.docx")
!
段落包含多个文本片段(run)时,样式可能丢失
重写 para.text 会替换各个 run,并可能抹平细致的格式差异(例如一句话中某些文字的加粗效果)。对于格式复杂的文档,要获得完美的呈现效果,请逐个 run 翻译,而不是翻译整个段落——代价是这样的文本切分对模型来说不那么自然。

#Markdown

Markdown 是最容易在翻译时保持格式完整的格式:只需要求模型保留其语法。如果提示词明确提出这一要求,标题、列表、链接和代码块就会保持完整。

traduire_md.py
import ollama

SYSTEME_MD = (
    "Traduis ce document Markdown en {cible}. Conserve EXACTEMENT la "
    "syntaxe Markdown : titres (#), listes, liens, tableaux et blocs "
    "de code. Ne traduis PAS le contenu des blocs de code. Renvoie "
    "uniquement le Markdown traduit."
)

def traduire_markdown(chemin, sortie, cible="anglais"):
    texte = open(chemin, encoding="utf-8").read()
    reponse = ollama.chat(
        model="qwen3.5:9b",
        messages=[
            {"role": "system", "content": SYSTEME_MD.format(cible=cible)},
            {"role": "user", "content": texte},
        ],
        options={"temperature": 0.2},
    )
    open(sortie, "w", encoding="utf-8").write(reponse["message"]["content"])

traduire_markdown("README.md", "README_en.md")

#PDF

PDF 是最棘手的格式:它是一种展示格式,而非内容格式。使用 pypdf 提取文本,进行翻译,再将其重新输出到新的文档中(通常为 DOCX 或生成的 PDF)。精确复现 PDF 的排版很少具有经济价值;应以可读性为目标,而非逐像素复制。

traduire_pdf.py
from pypdf import PdfReader
from docx import Document
from traduire import traduire

def pdf_vers_docx_traduit(entree, sortie, cible="anglais"):
    lecteur = PdfReader(entree)
    doc = Document()

    for page in lecteur.pages:
        texte = page.extract_text() or ""
        for paragraphe in texte.split("\n\n"):
            if paragraphe.strip():
                doc.add_paragraph(traduire(paragraphe, cible=cible))

    doc.save(sortie)

pdf_vers_docx_traduit("rapport.pdf", "rapport_en.docx")

#使用 Ollama 进行批量翻译

本地运行的主要优势在于可以大量处理,而不会产生使用账单。一个遍历文件夹并翻译每个文件的脚本,就能将您的电脑变成批量翻译服务。下面这个脚本会处理某个目录中的所有 .docx 文件。

batch_traduction.py
import sys
from pathlib import Path
from traduire_docx import traduire_docx

def traduire_dossier(dossier, cible="anglais", suffixe="_traduit"):
    dossier = Path(dossier)
    fichiers = list(dossier.glob("*.docx"))
    print(f"{len(fichiers)} fichier(s) à traduire\n")

    for i, fichier in enumerate(fichiers, 1):
        if suffixe in fichier.stem:
            continue  # éviter de retraduire une sortie
        sortie = fichier.with_name(f"{fichier.stem}{suffixe}.docx")
        print(f"[{i}/{len(fichiers)}] {fichier.name}")
        traduire_docx(fichier, sortie, cible=cible)

    print("\nTerminé.")

if __name__ == "__main__":
    dossier = sys.argv[1] if len(sys.argv) > 1 else "."
    traduire_dossier(dossier)
终端
# Traduire tous les .docx d'un dossier en anglais
python batch_traduction.py ./documents_a_traduire
→
让模型保持已加载状态
在大批量处理时,请设置OLLAMA_KEEP_ALIVE(例如:export OLLAMA_KEEP_ALIVE=30m),以避免Ollama在不同文件之间卸载模型。每次重新加载到VRAM都会耗费数秒。

#提升翻译质量

本地大语言模型在默认设置下就能很好地翻译,但调整一些设置,可以让译文从“还不错”提升到“可发布”的水平,尤其是专业领域的文本。

  1. 01
    提供术语表
    在系统提示中加入业务术语表,列出各术语及其指定译法(公司法定名称、产品名称、首字母缩写)。模型会遵循您的术语规范,而不是自行编造译法。
  2. 02
    合理分段
    按段落或章节翻译,不要逐句翻译:模型需要上下文,才能妥善处理语法一致关系、代词指代和语体。
  3. 03
    提供文档的上下文
    在提示词中明确说明文本类型(如「商业合同」、「技术说明书」、「内部邮件」)。语体和词汇会相应调整。
  4. 04
    重新阅读关键段落
    对于合同或法律文件,敏感条款仍必须经过人工复核——本地运行能保障数据保密,但不能保证绝不出错。
  5. 05
    如有需要,换用更大的模型
    如果质量不再提升,请从 Qwen 3.5 9B 换用 Qwen 3.8 27B(记得将其推理级别设为「low」:默认情况下它会过度思考,这对翻译没有必要),甚至可以换用 Qwen 3.6 35B-A3B 这样的 MoE 模型。长句处理和术语表达的精细程度都会明显改善。

#故障排除

模型增加了注释
强化“只返回译文”这一指令,并降低温度。有些模型会在开头加上“以下是译文:”——如有需要,可在后处理中将其删除。
翻译成错误的语言
在提示词中明确指定目标语言,并提供一个示例。对于短文本,模型可能会译成错误的语言。
DOCX 的格式丢失了
替换 para.text 会将各个 run 合并,导致其各自的格式丢失。对于格式设置较复杂的文档,请逐个 run 翻译。
大批量翻译速度慢
请检查模型能否完整装入显存(否则会将部分模型卸载至 CPU,导致运行缓慢)。请减小模型规模,或使用 OLLAMA_KEEP_ALIVE。
Markdown 代码块已翻译
在提示词中强调:“不要翻译代码块的内容”。否则,请在翻译前提取代码块,翻译完成后再将其插回。
上下文过长被截断
一个非常大的文档超出了上下文窗口。将其分割为若干部分,分别进行翻译。

#深入了解

本地 AI 翻译需要以选择得当的 Ollama 环境为基础。本站的这些指南可帮助您进一步完成搭建:

安装 Ollama
用于安装推理引擎(如果尚未安装)。
Q4、Q5、Q8:选择哪种量化
根据您的 GPU 在翻译质量、速度和 VRAM 之间进行权衡。
n8n + Ollama:使用本地AI实现自动化
用于将翻译功能接入无代码工作流(收到的电子邮件、上传的文件等)。
这份指南对您有帮助吗?

有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。