用 LM Studio + TranslateGemma 4B 搭建本地翻译服务,并接入沉浸式翻译
本文记录一次本地部署小模型翻译服务的完整流程。目标是:在本地电脑运行 TranslateGemma 4B,通过 LM Studio 开启 OpenAI 兼容 API,然后让浏览器插件或局域网内其他设备调用这个本地翻译模型。
最终效果:
- 模型运行在本地,不需要把网页文本发给云端大模型服务。
- LM Studio 提供 OpenAI 兼容接口。
- 沉浸式翻译通过自定义 AI 服务调用本地模型。
- 其他局域网设备也可以通过
http://局域网IP:1234/v1调用。
一、模型选择
官方模型地址是:
google/translategemma-4b-it
但 LM Studio 更适合加载 GGUF 格式模型,所以建议下载 GGUF 量化版:
mradermacher/translategemma-4b-it-GGUF
量化版本推荐:
Q4_K_M:质量和速度比较均衡,推荐优先选择
Q4_K_S:更省资源,适合先试跑
Q5_K_M:质量更好,内存够可以选
Q8_0:质量最高,但占用更大
如果是普通 Mac 或低显存机器,建议先从 Q4_K_M 或 Q4_K_S 开始。
本次示例使用:
translategemma-4b-it.Q4_K_S.gguf
模型 API 标识符:
translategemma-4b-it
后面接入沉浸式翻译时,模型名就填这个。
二、在 LM Studio 中加载模型
打开 LM Studio,进入:
Models -> My Models
下载或导入 translategemma-4b-it 的 GGUF 模型。
加载成功后,在模型信息里能看到类似内容:
Format: GGUF
Quantization: Q4_K_S
Arch: gemma3
API Model Identifier: translategemma-4b-it
重点记住:
API Model Identifier: translategemma-4b-it
这个就是后续 API 请求里的 model 参数。
三、开启 LM Studio 本地 API
进入:
Developer -> Local Server
点击:
Load Model
选择刚才加载的 translategemma-4b-it。
然后打开服务器开关,让状态变成:
Status: Running
推荐服务器设置:
Server Port: 1234
Require Authentication: 关闭
Serve on Local Network: 开启
Enable CORS: 开启
说明:
Server Port默认是1234,可以保持不变。Require Authentication本地测试可以关闭。Serve on Local Network开启后,局域网其他设备才能访问。Enable CORS建议开启,因为浏览器插件调用本地 API 时可能需要跨域支持。
启动成功后,LM Studio 会显示类似:
Reachable at: http://192.168.100.196:1234
这个地址就是本地服务地址。
OpenAI 兼容 Base URL:
http://192.168.100.196:1234/v1
完整聊天接口:
http://192.168.100.196:1234/v1/chat/completions
注意:把 192.168.100.196 换成你自己电脑的局域网 IP。
四、测试 LM Studio API
先测试模型列表:
curl http://192.168.100.196:1234/v1/models
如果能返回模型列表,说明 API 已经通了。
再测试一次翻译请求:
curl http://192.168.100.196:1234/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "translategemma-4b-it",
"messages": [
{
"role": "user",
"content": "Translate into Chinese: Hello, how are you?"
}
],
"temperature": 0
}'
如果返回中文翻译,说明 LM Studio 这一层没有问题。
五、接入沉浸式翻译
打开沉浸式翻译设置,进入自定义 AI 翻译服务配置。
填写:
APIKEY: lm-studio
自定义 API 接口地址: http://192.168.100.196:1234/v1/chat/completions
自定义翻译服务名称: LM Studio
模型: translategemma-4b-it
如果页面里有:
输入自定义模型名称
需要勾选。
这里有一个容易填错的点:
不要只填 http://192.168.100.196:1234/v1
沉浸式翻译这个位置需要完整接口路径:
http://192.168.100.196:1234/v1/chat/completions
六、关键问题:修改 TranslateGemma 的提示词模板
直接测试时,可能会遇到下面这类错误:
Conversations must start with a user prompt.
或者:
User role must provide `content` as an iterable with exactly one item.
原因是 TranslateGemma 的默认 GGUF 模板比较特殊。它默认要求 user.content 是结构化数组,类似:
{
"role": "user",
"content": [
{
"type": "text",
"source_lang_code": "en",
"target_lang_code": "zh",
"text": "Hello, how are you?"
}
]
}
但沉浸式翻译发送的是普通 OpenAI Chat 格式:
{
"role": "user",
"content": "Translate the following text..."
}
所以需要在 LM Studio 里覆盖模型的 Prompt Template,让它兼容普通 OpenAI Chat 请求。
进入:
Models -> My Models -> translategemma-4b-it -> Inference -> 提示词模板
展开 提示词模板,选择自定义模板,然后把原模板替换成下面这份:
{{ bos_token }}
{%- set ns = namespace(system_text='') -%}
{%- for message in messages -%}
{%- if message['role'] == 'system' -%}
{%- if message['content'] is string -%}
{%- set ns.system_text = ns.system_text + (message['content'] | trim) + '\n\n' -%}
{%- endif -%}
{%- elif message['role'] == 'user' -%}
{{ '<start_of_turn>user\n' }}
{%- if ns.system_text -%}
{{ ns.system_text }}
{%- set ns.system_text = '' -%}
{%- endif -%}
{%- if message['content'] is string -%}
{{ message['content'] | trim }}
{%- elif message['content'] is iterable -%}
{%- for item in message['content'] -%}
{%- if item['type'] == 'text' -%}
{{ item['text'] | trim }}
{%- endif -%}
{%- endfor -%}
{%- endif -%}
{{ '<end_of_turn>\n' }}
{%- elif message['role'] == 'assistant' -%}
{{ '<start_of_turn>model\n' }}
{%- if message['content'] is string -%}
{{ message['content'] | trim }}
{%- endif -%}
{{ '<end_of_turn>\n' }}
{%- endif -%}
{%- endfor -%}
{%- if add_generation_prompt -%}
{{ '<start_of_turn>model\n' }}
{%- endif -%}
这个模板做了两件事:
- 允许请求第一条是
system消息。 - 把
system消息合并进第一条user消息,避免 TranslateGemma 模板报错。 - 允许
user.content是普通字符串,而不是 TranslateGemma 原生结构化数组。
保存模板后,按下面顺序重启:
Eject 卸载模型
重新 Load Model
重启 Local Server
回到沉浸式翻译点“测试服务”
如果测试成功,说明沉浸式翻译已经可以调用本地 TranslateGemma。
七、沉浸式翻译完整配置示例
如果你使用开发者设置里的 Edit Full User Config,可以参考下面的自定义服务配置。
其中 custom-ai-djztv3XF 是示例服务 ID,不同环境可能不一样。如果你已经有自己的 ID,只需要修改对应对象里的字段。
{
"translationService": "custom-ai-djztv3XF",
"translationServices": {
"custom-ai-djztv3XF": {
"APIKEY": "lm-studio",
"apiUrl": "http://192.168.100.196:1234/v1/chat/completions",
"extends": "custom-ai",
"group": "custom",
"model": "translategemma-4b-it",
"name": "LM Studio",
"type": "custom-ai",
"visible": true,
"assistantId": "",
"enableAIContext": false,
"temperature": 0,
"systemPrompt": "",
"multipleSystemPrompt": "",
"systemMultiplePrompt": "",
"prompt": "Translate the following text from {{from}} to {{to}}. Output only the translation, no explanation. Keep HTML tags and formatting if present:\n\n{{text}}",
"multiplePrompt": "Translate the following text blocks from {{from}} to {{to}}. Output only the translations. Keep the %% separators exactly and keep the same number/order of blocks:\n\n{{text}}",
"subtitlePrompt": "Translate the following subtitle text from {{from}} to {{to}}. Output only the translation:\n\n{{text}}"
}
},
"userTranslationServices": {
"translationService": "custom-ai-djztv3XF"
}
}
实际配置时,最关键的是这几个字段:
APIKEY: lm-studio
apiUrl: http://192.168.100.196:1234/v1/chat/completions
model: translategemma-4b-it
temperature: 0
八、局域网访问和防火墙
如果其他设备无法访问,优先检查:
1. 两台设备是否在同一个局域网
2. LM Studio 是否开启 Serve on Local Network
3. LM Studio 是否显示 Status: Running
4. 访问地址是否使用了服务端电脑的局域网 IP
5. Windows/macOS 防火墙是否放行 LM Studio 或 TCP 1234 端口
6. 浏览器插件调用时是否开启了 CORS
测试命令:
curl http://192.168.100.196:1234/v1/models
如果这个命令在其他设备上可以返回模型列表,说明网络和服务都正常。
九、常见错误
1. 只填了 /v1,测试失败
沉浸式翻译的自定义 API 地址需要填完整路径:
http://192.168.100.196:1234/v1/chat/completions
不是:
http://192.168.100.196:1234/v1
2. 报错 Conversations must start with a user prompt
原因:插件发送了 system 消息,但 TranslateGemma 默认模板要求第一条必须是 user。
解决:修改 LM Studio 的提示词模板,把 system 合并进 user。
3. 报错 User role must provide content as an iterable
原因:TranslateGemma 默认模板要求专用结构化 content,但插件发送的是普通字符串。
解决:使用上文的通用兼容提示词模板。
4. 其他设备访问不了
优先检查防火墙和局域网访问设置。
Windows 上需要允许 LM Studio 入站访问,或者放行 TCP 端口:
1234
十、最终配置总结
LM Studio:
模型: translategemma-4b-it GGUF
量化: Q4_K_S 或 Q4_K_M
端口: 1234
Serve on Local Network: 开
Enable CORS: 开
API Model Identifier: translategemma-4b-it
沉浸式翻译:
APIKEY: lm-studio
API 地址: http://192.168.100.196:1234/v1/chat/completions
模型: translategemma-4b-it
关键修改:
覆盖 LM Studio 中 TranslateGemma 的提示词模板,使其兼容普通 OpenAI Chat 请求。
完成后,就可以用本地小模型为网页翻译提供服务。对于日常英文网页翻译,这套方案可以在不依赖云端 API 的情况下完成基本可用的翻译体验。
十一、M40 24GB 实测优化配置(2026 版)
下面这组参数基于实际使用测试,而不是纯理论推测。测试目标是提升沉浸式翻译网页翻译时的体感速度和翻译稳定性。
测试环境:
CPU: Xeon E5-2696 v3(18 核 36 线程)
内存: 64GB DDR3 ECC
GPU: NVIDIA Tesla M40 24GB
系统: Windows 10 Pro for Workstations
LM Studio: 0.3.x
用途: 沉浸式翻译网页翻译
1. 推荐模型量化
经过实际对比,Q4_K_S 和 Q5_K_M 都能跑,但长期使用更推荐 Q5_K_M。
Q4_K_S 的特点:
优点: 速度略快,占用更小
缺点: 部分专业术语存在漂移,长句准确率略低
Q5_K_M 的特点:
优点: 术语翻译更准确,长句稳定性更好,科技文章表现更佳
缺点: 生成速度下降约 5%
实测结果:
| 模型 | Prompt 速度 | 生成速度 | 总耗时 |
|---|---|---|---|
| Q4_K_S | 360.64 tok/s | 36.92 tok/s | 5427.82 ms |
| Q5_K_M | 404.78 tok/s | 34.90 tok/s | 5645.36 ms |
实际速度差异约 5%,但 Q5_K_M 的质量提升更明显。因此推荐:
速度优先: Q4_K_S
长期使用: Q5_K_M
综合推荐: Q5_K_M
本轮测试使用的是一段关于 Atlantic Meridional Overturning Circulation 的英文科普文本,参数为:
temperature: 0
max_tokens: 512
prompt tokens: 209
output tokens: 179
total tokens: 388
关键差异在术语处理上:
Q4_K_S: 大西洋南北洋环流
Q5_K_M: 大西洋经向环流
Q5_K_M 对 Atlantic Meridional Overturning Circulation 的译法更接近常见专业表达,整体文风也更自然。本轮测试里,Q5_K_M 的生成速度比 Q4_K_S 慢约 5.5%,总推理耗时多约 4.0%,但质量收益更明显。
2. LM Studio 推荐参数
Context & Offload:
Context Length: 4096
GPU Offload: 全部卸载(Max)
KV Cache Offload: 开启
Keep Model In Memory: 开启
mmap(): 开启
Advanced:
CPU Threads: 16
Eval Batch Size: 4096
Physical Batch Size: 1024
Max Concurrent Predictions: 4
Unified KV Cache: 开启
如果出现不稳定、响应卡顿或显存压力偏高,可以回退为:
Eval Batch Size: 2048
Physical Batch Size: 512
Attention:
Flash Attention: 开启
KV Cache:
K Cache Quantization: Q8_0
V Cache Quantization: Q8_0
Sampling:
Temperature: 0
Top K: 1
Top P: 关闭,或设置为 1
Min P: 关闭
Repeat Penalty: 1.05
翻译任务推荐固定输出,Temperature 保持 0,能减少术语漂移和多余解释。
3. 沉浸式翻译推荐配置
AI 智能上下文:
建议: 关闭
原因是 TranslateGemma 本身就是专用翻译模型,开启 AI 智能上下文后会拉长 prompt,增加推理时间,但收益很小。
AI 专家:
建议: 通用
除非长期翻译医学、法律、学术论文等固定领域,否则不建议频繁切换 AI 专家。
请求策略:
每秒最大请求数: 4
每次请求最大文本长度: 2000
每次请求最大段落数: 6
每次字幕请求最大段落数: 6
Temperature: 0
本地模型更适合“少请求、大批量”,而不是“大量小请求”。例如 1200 字符 × 4 段 会产生更多 API 调用,调整到 2000 字符 × 6 段 后,通常能减少请求次数,网页翻译体感速度更好。
4. 推荐提示词
系统提示词可以精简为:
You are a professional translator.
Rules:
1. Translate into {{to}}.
2. Output translation only.
3. Keep paragraph structure unchanged.
4. Preserve HTML tags.
5. Preserve proper nouns, code and URLs.
6. Use %% between translated paragraphs when input contains %%.
多段提示词可以保持简单:
Translate to {{to}}:
{{text}}
5. 翻译质量主观评价
针对 BBC、Reuters、Wikipedia、Medium、GitHub README、技术博客和 AI 文章等场景,主观评价如下:
| 项目 | DeepL | TranslateGemma Q5_K_M |
|---|---|---|
| 准确性 | 10 | 9 |
| 流畅性 | 10 | 8.5-9 |
| 术语一致性 | 10 | 9 |
| 长句处理 | 10 | 8.5 |
| 科技文章 | 10 | 9 |
| 本地部署 | 0 | 10 |
以 AMOC 测试文本为例,Q4_K_S 能正确翻出大意,但术语更容易出现轻微漂移;Q5_K_M 在术语、长句和整体文风上更稳定。比如同一句中,Q5_K_M 将 Atlantic Meridional Overturning Circulation 译为“大西洋经向环流”,比 Q4_K_S 的“大西洋南北洋环流”更适合科技文章语境。
综合评价:
DeepL: 100 分
TranslateGemma Q5_K_M: 90-95 分
对于技术博客、AI 文章和日常英文网页,TranslateGemma 4B Q5_K_M 已经达到长期可用水平。
6. 性能参考
本机实测:
Prompt: 约 400 tok/s
Generation: 约 35 tok/s
实际网页翻译体感:
普通新闻页面: 2-5 秒
长篇技术博客: 5-10 秒
维基百科词条: 3-8 秒
7. 最终推荐
模型:
TranslateGemma 4B Instruct Q5_K_M
LM Studio:
Context Length: 4096
GPU Offload: Max
CPU Threads: 16
Eval Batch Size: 4096
Physical Batch Size: 1024
Max Concurrent Predictions: 4
Flash Attention: 开启
KV Cache GPU: 开启
Keep Model In Memory: 开启
mmap: 开启
K Cache: Q8_0
V Cache: Q8_0
Temperature: 0
Top K: 1
Repeat Penalty: 1.05
沉浸式翻译:
每秒最大请求数: 4
每次请求最大文本长度: 2000
每次请求最大段落数: 6
每次字幕请求最大段落数: 6
AI 智能上下文: 关闭
AI 专家: 通用
Temperature: 0