前言
在线的传统的翻译服务有很多,不过都不是很理想,现在最好的翻译方式是借助LLM大语言模型进行翻译,没有比LLM更适合翻译的工具了。
我常在浏览器的沉浸式翻译插件或者STranslate之类的支持接入AI翻译的软件中,配置了DeepSeek,国内友好,速度快,价格便宜
好是挺好的,不过DeepSeek官方的服务有时候不稳定,而且终归是要花钱的,而且最近准备升价了
也尝试过其它在线的免费的AI API,比如GLM 4 Flash(或GLM 4.7 Flash),免费,但是服务也不稳定,还限制并发,时不时就429
被折磨了很多次之后,我最近尝试了本地部署翻译模型的方式,找了很多模型,跟AI一起研究了很久的配置,最终也是得到了一个高可用性的,速度快,质量也不错的成果,翻译质量对于日用来说还是非常足够的,而且翻译速度极快,日常的占用也很低,不会影响正常使用
参考配置
我的电脑算是有点老的,配置在现在应该只能算中等水平,显卡是3060,显存6GB

这套方案的核心在于显卡(显存),这套方案是针对于N卡的,对于A卡,我也不知道怎么办,建议咨询AI
你的显存不能太低,1.8B的模型常驻在后台,大约要占显存不到2GB
如果你的配置比我更好,你的显存比较充足,你可以考虑直接上7B模型,质量会比1.8B更好
如果你对下面这些废话不感兴趣,只想知道怎么操作,可以直接点击右方的文章目录,跳转到开始部署部分,或者直接把这篇文章扔给你的Agent
关于模型的选择
首先,我们肯定不可能在我们的本地部署一个DeepSeek,Kimi那样的通用大模型,这是不切实际的,哪怕是量化版,在本地跑起来也非常吃力,所以我考虑的是那种翻译专用的小体量模型,他们综合能力可能很蠢,但是他们是翻译特调的,在翻译方面已经能够做得很好了
我有考虑过好几个模型,Qwen,TranslateGemma,NLLB之类的
最后综合选出的,是腾讯混元的Hy-MT2-1.8B
参考来源:
- CCTrans 2026 年本地翻译基准测试:
Hy-MT2-1.8B-4bit仍然是最优的本地候选者。 - LINUX DO – Tanslation Benchmark|轻量开源模型测评:
HY-MT1.5-1.8B是质量与吞吐更均衡的折中点
PS:对于Linux DO的这篇测评,它是今年早些时候的测评文章,所用的模型是MT1.5版,现在混元团队已经推出了MT2版,那当然是比MT1.5还要更好的
根据混元团队的这篇论文:
Hy-MT2 是一系列专为复杂现实场景设计的快速推理多语言翻译模型。该系列包含三种模型规模:1.8B、7B 和 30B-A3B (MoE),所有这些模型都能支持 33 种语言的翻译,并能有效遵循多种语言的翻译指令。多维评估表明,Hy-MT2 在通用现实商业场景、特定领域场景以及指令遵循型翻译任务中均表现出色。在快速推理模式下,7B 和 30B 模型的表现优于 DeepSeek-V4-Pro 和 Kimi K2.6 等开源模型,而轻量级的 1.8B 模型也超越了微软和 Doubao 等提供商的主流商业 API。此外,当与 AngelSlim 的 1.25 位极端量化技术结合用于设备端部署时,轻量级的 1.8B 模型仅需 440MB 的存储空间,并且推理速度提升了 1.5 倍。
对于具体的对比数值,可以参考该论文的实验部分,看看这个模型与其它通用SOTA模型的对比
反正没毛病,选它就完了,如果你的配置比我更好,你也可以尝试直接部署7B的模型,我尝试过,这个模型差不多占显存4-5G,快把我显存撑爆了,但是翻译质量确实是更加不错
对于一些对模型理解能力要求比较高的的比较难的翻译任务,或者一些文学类诗词类的翻译任务,我觉得本地能够部署的模型没有能真正做好的,还是老老实实用在线的模型吧
我们要搭的架构

为什么不用Ollama
诚然Ollama是一个上手即用的对于新手很友好的框架,但它还是太过臃肿了,Ollama的底层推理引擎就是 llama.cpp,那我们直接用这个底层的东西就好了,不用担心配置麻烦,我也不懂,直接让AI Agent帮忙配置就行了
llama.cpp + llama-swap解压即用,免安装,模型格式支持GGUF模型权重文件,Hugging Face上直接下载下来就能用,而且许多参数Ollama并未暴露,直接用 llama-server 反而方便得多。
更重要的是,我配置了显存自动让位机制,当检测到当前显存占用过高(即可用显存小于 1 GB)时,会自动杀掉llama-server进程,释放显存,下次要翻译的时候也不会报错(因为llama-swap一直常驻,需要的时候它会自自动重建llama-server),多等几秒重新加载模型即可,如果使用Ollama,可能就没办法配置这个了
开始部署
下载推理引擎 llama.cpp
打开 GitHub 的 releases 页面(ggml-org/llama.cpp releases),找最新版本。需要下载两个文件:
| 文件名 | 大小 | 用途 |
|---|---|---|
llama-版本号-bin-win-cuda-13.3-x64.zip |
~140MB | 推理引擎本体 |
cudart-llama-bin-win-cuda-13.3-x64.zip |
~373MB | CUDA 运行时(GPU 加速必需) |
选哪个 CUDA 版本? 打开 CMD 输入
nvidia-smi,看右上角CUDA Version,驱动够新就选最新的 CUDA 包(这里用 13.3)
解压:把 llama-...zip 解压到 F:\AI\llamacpp\,把 cudart-...zip 解压后,将其中的三个文件复制到 llamacpp 目录里:
cublas64_13.dll
cublasLt64_13.dll
cudart64_13.dll
(这三个 dll 是 GPU 加速必需的运行库,必须和 llama-server.exe 放在同一目录)
验证是否成功:在你的目录(我使用的目录是:F:\AI\llamacpp,本教程后续提供的命令行都会基于F:\AI这个路径,在运行时请注意自行改成你的目录路径)下打开终端,运行:
llama-server.exe --version
能打印出版本号,说明引擎没问题
下载模型管理代理 llama-swap
在 GitHub 的 mostlygeek/llama-swap releases,下载 Windows 版(单文件,~13MB),解压得到 llama-swap.exe,放到你的目录,比如:F:\AI\swap\
llama-swap 的职责是”按需加载 / 常驻 / 空闲卸载 / 多模型切换”。它提供一个 OpenAI 兼容的 API,任何翻译工具都能直接接。
下载模型
模型托管在 HuggingFace(tencent/Hy-MT2-1.8B-GGUF),直接下载官方量化好的 GGUF 文件(约 1.9GB):
curl -L -C - -o F:\AI\models\Hy-MT2-1.8B-Q8_0.gguf ^
"https://huggingface.co/tencent/Hy-MT2-1.8B-GGUF/resolve/main/Hy-MT2-1.8B-Q8_0.gguf"
命令参数解释:
| 参数 | 含义 |
|---|---|
-L |
跟随重定向(HuggingFace 下载会跳转到 CDN) |
-C - |
断点续传 |
-o 文件名 |
指定保存的文件名和路径,记得手动改成你的路径 |
| 后面的 URL | 模型的下载地址 |
如果你要部署7B,或者其它模型,改成对应的URL即可
网络问题请自行解决,可以考虑使用镜像站 HF-Mirror
写配置文件
在 F:\AI\ 下新建一个文件 config.yaml,内容是:
port: 8080
host: 127.0.0.1
# 默认 0 = 模型不自动卸载(常驻);如需按需加载改回 300
globalTTL: 0
models:
# ============ 日常主力:1.8B Q8_0,常驻显存,速度快到无感 ============
"hy-mt2-fast":
name: "Hy-MT2 1.8B 快速"
group: "translation"
ttl: 0
cmd: F:\AI\llamacpp\llama-server.exe -m F:\AI\models\Hy-MT2-1.8B-Q8_0.gguf --port ${PORT} -ngl 99 -c 8192 --flash-attn on --cache-type-k q8_0 --cache-type-v q8_0 --temp 0.7 --top-p 0.6 --top-k 20 --repeat-penalty 1.05 --no-webui --jinja -np 2
顶层配置
| 配置 | 值 | 含义 |
|---|---|---|
port |
8080 | 代理监听的端口,翻译工具连这个端口 |
host |
127.0.0.1 | 只允许本机访问(不暴露到局域网) |
globalTTL |
0 | 单位是秒,0 = 模型常驻不自动卸载;如果写 300 = 空闲 5 分钟自动卸载释放显存 |
模型段
| 参数 | 含义 | 详情(为什么这么设) |
|---|---|---|
-m 路径 |
指定模型文件 | 指向你下载的 GGUF |
--port ${PORT} |
端口占位符 | llama-swap 会自动填实际的端口,别改 |
-ngl 99 |
把多少层放进 GPU(99=全部) | 1.8B 模型只有 2GB,全部放显存更好 |
-c 8192 |
上下文窗口 | 8192 对翻译来说足够了 |
--flash-attn on |
闪存注意力 | 省显存 + 提速,N 卡支持 |
--cache-type-k q8_0 |
KV 缓存量化到 8bit | 大幅降低长文本时的显存占用 |
--cache-type-v q8_0 |
同上(V 缓存) | 同上 |
--temp 0.7 |
温度,控制随机性 | 官方推荐值,想更稳定一点可以往下调一点,比如0.3 |
--top-p 0.6 |
采样范围 | 官方推荐值 |
--top-k 20 |
只考虑概率最高的 20 个词 | 官方推荐值 |
--repeat-penalty 1.05 |
抑制重复 | 官方推荐值 |
--no-webui |
不启动网页界面 | 省资源,对于翻译来说,我们直接用 API 就够了 |
--jinja |
启用聊天模板 | 让模型正确理解”你是助手、我来提问”这种角色结构 |
-np 2 |
允许 2 个并发请求 | 沉浸式翻译会并行翻多段 |
采样参数(temp/top-p/top-k/repeat)四个值是腾讯混元官方针对 Hy-MT2 调的推荐值(官方 README),保持这个推荐值效果就挺好的,想要翻译更稳定可以试试调低Temperature(比如调成0.3)。
手动启动
cd F:\AI\swap
llama-swap.exe -config config.yaml
看到 llama-swap 正常运行后,另开一个 CMD 验证代理是否响应:
curl http://127.0.0.1:8080/v1/models
会返回类似:
{"data":[{"id":"hy-mt2-fast","status":{"value":"unloaded"}}]}
则正常,模型已待命
发第一条翻译请求
CMD版:
curl http://127.0.0.1:8080/v1/chat/completions ^
-H "Content-Type: application/json" ^
-d "{\"model\":\"hy-mt2-fast\",\"messages\":[{\"role\":\"user\",\"content\":\"将以下文本翻译为中文:Hello world\"}],\"temperature\":0.7}"
Powershell版:
curl.exe http://127.0.0.1:8080/v1/chat/completions `
-H "Content-Type: application/json" `
-d '{"model":"hy-mt2-fast","messages":[{"role":"user","content":"将以下文本翻译为中文:Hello world"}],"temperature":0.7}'
或者直接用Python更好:
python -c "import urllib.request,json; req=urllib.request.Request('http://127.0.0.1:8080/v1/chat/completions',data=json.dumps({'model':'hy-mt2-fast','messages':[{'role':'user','content':'将以下文本翻译为中文:Hello world'}],'temperature':0.7}).encode(),headers={'Content-Type':'application/json'}); print(json.loads(urllib.request.urlopen(req).read())['choices'][0]['message']['content'])"
第一次可能会等几秒(模型加载),之后会返回译文 你好,世界
到这一步,本地翻译已经完全配置好了
接入翻译工具
对于网页翻译,浏览器插件可以使用沉浸式翻译(用惯了,如果有更好的替代品欢迎评论)

| 字段 | 填什么 |
|---|---|
| 自定义 API 接口地址 | http://127.0.0.1:8080/v1 |
| API Key | 随便填,比如 local(本地服务不校验API Key) |
| 模型 | hy-mt2-fast |
本地划词翻译可以使用STranslate
选择OpenAI协议,像上面那样填即可
设置开机自启
写一个静默启动脚本
在 F:\AI\ 新建 start-hidden.vbs,内容:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """F:\AI\swap\llama-swap.exe"" -config ""F:\AI\config.yaml""", 0, False
解释:WshShell.Run 第 2 个参数 0 表示”以隐藏窗口方式运行”,这样开机启动时不弹黑色窗口。
注册到任务计划程序
schtasks /Create /TN "LocalTranslator" /TR "wscript.exe \"F:\AI\start-hidden.vbs\"" /SC ONLOGON /RL LIMITED /F
参数解释:
| 参数 | 含义 |
|---|---|
/TN |
任务名字 |
/TR |
要执行的命令 |
/SC ONLOGON |
登录时自动触发(开机进桌面就启动) |
/RL LIMITED |
以普通权限运行(不弹 UAC) |
/F |
已存在就强制覆盖 |
这样每次开机,翻译服务自动后台运行,不需要手动开任何东西,直接就可用
显存自动让位机制(可选)
1.8B的模型常驻显存其实是完全可以的,完全不会影响日常的使用,不过当你在打大型游戏,或者要渲染视频等需要占用大量显存的任务时,就可能会出问题
配置以下Python脚本可以实现实时检测
在 F:\AI\ 新建 vram-watch.py,内容:
# -*- coding: utf-8 -*-
"""
VRAM 守护:检测到显存压力时自动卸载翻译模型,为大显存任务让位。
原理:不管前台跑的是什么程序,只看显存。
- 空闲显存持续低于阈值(默认 1024MB)一段时间 → 判定有显存压力
- 自动卸载 llama-server(翻译模型),把显存全部让出
- 之后用户再翻译时,llama-swap 会自动重新加载模型(无需手动)
用法:
pythonw F:\AI\vram-watch.py # 生产运行(后台,无窗口)
python F:\AI\vram-watch.py --test # 测试模式(低阈值高频率,验证逻辑)
"""
import subprocess, time, sys, os
LOG = r'F:\AI\logs\vram-watch.log'
THRESHOLD = 1024 # MB:空闲显存低于此值视为压力
INTERVAL = 3 # 秒:检查间隔
NEED_HITS = 3 # 连续多少次低于阈值才触发(防误报)
COOLDOWN = 300 # 秒:卸载后的冷却时间
# Windows:子进程不创建控制台窗口(避免 pythonw 下弹窗闪烁)
NO_WINDOW = getattr(subprocess, 'CREATE_NO_WINDOW', 0)
def log(msg):
try:
# 自动创建日志目录,避免目录不存在时日志静默丢失
os.makedirs(os.path.dirname(LOG), exist_ok=True)
with open(LOG, 'a', encoding='utf-8') as f:
f.write('[%s] %s\n' % (time.strftime('%H:%M:%S'), msg))
except Exception:
pass
def free_mb():
"""返回空闲显存 MB;查询失败(如游戏独占 GPU 驱动)返回 -1。"""
try:
out = subprocess.run(
['nvidia-smi', '--query-gpu=memory.free', '--format=csv,noheader,nounits'],
capture_output=True, text=True, timeout=10, creationflags=NO_WINDOW)
return int(out.stdout.strip().split('\n')[0])
except Exception:
return -1
def server_alive():
out = subprocess.run(['tasklist', '/FI', 'IMAGENAME eq llama-server.exe'],
capture_output=True, text=True, timeout=10, creationflags=NO_WINDOW).stdout
return 'llama-server.exe' in out
def unload():
subprocess.run(['taskkill', '/F', '/IM', 'llama-server.exe'],
capture_output=True, timeout=10, creationflags=NO_WINDOW)
time.sleep(2)
return not server_alive()
def main():
thr, iv, need = THRESHOLD, INTERVAL, NEED_HITS
if '--test' in sys.argv:
thr, iv, need = 4000, 1, 1 # 测试:阈值拉到 4GB 必定触发
log('启动(阈值%dMB / 间隔%ds / 连续%d次 / 冷却%ds)' % (thr, iv, need, COOLDOWN))
hits, last, fail_hits = 0, -COOLDOWN, 0
while True:
try:
free = free_mb()
if free < 0:
# nvidia-smi 查询失败:通常意味着 GPU 被独占(如游戏全屏独占驱动)
# 此时也应视为显存压力,连续失败同样触发让位
fail_hits += 1
hits = 0
if fail_hits >= need and time.time() - last > COOLDOWN and server_alive():
if unload():
log('触发:nvidia-smi 查询连续失败(GPU 疑似被独占),已自动卸载翻译模型让位')
last, fail_hits = time.time(), 0
else:
fail_hits = 0
hits = hits + 1 if free < thr else 0
if hits >= need and time.time() - last > COOLDOWN:
if server_alive():
if unload():
log('触发:空闲显存仅%dMB < %dMB,已自动卸载翻译模型让位' % (free, thr))
last, hits = time.time(), 0
else:
hits = 0
except Exception as e:
log('异常:%s' % e)
time.sleep(iv)
if __name__ == '__main__':
main()
它的工作逻辑是每3秒会检测一次显存,如果显存低于1GB并持续9秒(防误报),就杀掉 llama-server.exe 翻译服务,让出显存。若 nvidia-smi 连续失败 3 次(9 秒),同样判定为显存压力,同样自动卸载模型(查询失败通常意味着驱动处于异常或繁忙状态,我刚刚打游戏的时候就报了这个错,保守起见按压力处理)
而llama-swap仍在后台,在下一次你需要翻译的时候,照常翻译即可,只是会多花一点时间去重建 llama-server 进程,一切照常,只是多等了几秒(把模型重新加载到显存里)
注册开机自启:
schtasks /Create /TN "VramWatch" /TR "pythonw.exe F:\AI\vram-watch.py" /SC ONLOGON /RL LIMITED /F
pythonw.exe 表示无窗口运行Python,CREATE_NO_WINDOW 防止脚本查显存时弹黑框
总结
至此就一切结束了,你可以拿它来试一试正常翻译了,日常翻译速度惊人,质量也挺不错,无论怎么翻译,都不需要花一分钱,数据也只会留在本地,隐私方面无需担心
唯一的不好可能就是翻译的时候风扇有点吵+显卡占用有点高()
如果你的配置比我更好,显卡比我更好的话,可能会比我更顺
如果你尝试拿这个本地模型去翻译一些文学类作品,或者一些诗词诗歌,你会发现它的质量还是不太行,这个问题我觉得对于本地模型来说是无解/难解的,建议还是使用在线的更强大的大模型去翻译
对我3060这个老将来说,我觉得能流畅跑1.8B的本地模型都很不错了,更大参数量的模型,更好的模型,我觉得我还是不要考虑了
感谢看到这里,如对本文有什么不理解的地方,或者有任何建议,都欢迎在评论区提出



![表情[xieyanxiao]-Abyss的小屋](https://www.rsnocsi.cn/wp-content/themes/zibll/img/smilies/xieyanxiao.gif)
- 最新
- 最热
只看作者