第一次来这里发文章,分享一下我使用沉浸式翻译的一些经验。这篇文章是原创,之前在隔壁发过一次。如果遇到熟人,一定留下来打个招呼。
一、先说结论
沉浸式翻译 + Gemini 2.5 Flash 是最佳组合。
有免费的 deeplx 服务当然灰常好用,但是大模型可以自定义提示词,自定翻译风格啊。体验确实不一样。
(叠甲:纯个人观点,2.5Flash 是肉测的速度和质量平衡最好模型。)
要实现这个最佳组合,需要:
- 安装沉浸式翻译插件
- 搞到 gemini 的 api
- 解决 429 异常问题
- 关闭 Gemini 2.5 Flash 的思考功能
二、使用教程
来一个一个说清楚。
2.1 插件安装
这个简单,直接浏览器市场,或者网上搜一下“沉浸式翻译”。
2.2 获取 Gemini API key
我比较喜欢用自己的 API ,所以没有开通沉浸式的 pro 会员。
API 申请方式:
- Google AI Studio: 推荐用官方的吧,升级到付费模式速率有 1000RPM ,免费的 10RPM 根本体会不到 flash 的爽快感。具体的付费开通方式还是在网上搜一下,很简单。另外,官方的渠道需要网络环境,也可以使用代理,推荐使用 cf 的 aigateway ,或者 deno (不展开讲了,太多内容)。
- 其他渠道: OpenRouter ,只推荐一个。其他还有很多只能自行探索了,网上有一些公益站点,可以多了解下。
Gemini Flash 2.5 的价格虽然比 2.0 涨了 50%,但是总体还是比较便宜的。自己可以衡量一下翻译量,是用自己的 api 还是开通插件的 pro 会员。
2.3 解决 Gemini 429 异常报错
Gemini 的 429 算是一个老生常谈问题了,论坛评论区经常看到,根据我的经验也在这儿给大家一个解决方案。(按照后面提到的方法处理后,我已经稳定使用半年 2.0flash ,包括最近使用 2.5flash ,没遇到过一次 429 )
根据个人使用情况分析原因:
- Google 的 rpm (每分钟请求次数)判定是多维度的:IP ,Project ,提示词等等,可能还有其他我不清楚的。
- IP 就不说了,用干净节点,这个是从自身网络上找原因。
- 重点: 因为很多人都使用了翻译插件的默认翻译提示词,导致 Google 判定大量请求来自同一用户(企业,应用),从而触发了速率限制。
根据这个分析,得出的解决方案就简单了:
不要用插件默认的提示词!可以基于默认提示词进行修改和润色(比如让 AI 帮你优化一下结构和措辞),形成自己专属的提示词。网上有很多有特色的翻译提示词,同样不要直接复制,还是需要自己稍微改一下再用。
记住,是插件的几个提示词都要修改为独有的,不只是修改系统提示词。
我解决了提示词的问题后,直接插件里面把并发设置为 1000 ,翻译体验直接起飞。(使用半年,再高的并发都从来没有 429 )。
如果仍然还有 429 问题,可以尝试以下几点来解决:
- 网络节点是否共享使用者太多,尝试切换线路试试。
- 使用的 gemini key 是否共享人太多,尝试使用独有的 key ,并且要保证 project 里面的 key 唯一。同一个 project 下多个 key 也没用。
- 另外再重点说一下 key 池的问题:key 池基本都是免费,就算你再多 key 但是你每个请求的翻译提示词都是一样的,google 也会把你判断为一个源,所以仍然无法突破 10rpm 。并且 google 对免费的 key 风控更严格,用沉浸式很容易污染 key 池。所以还是老老实实升到付费层级吧。
2.4 关闭思考功能
目前的这个 Gemini 2.5 Flash 版本竟然自带思考模式,个人感觉很不习惯(希望 google 后面还是单独把 thinking 模型独立出去)。如果要翻译用得爽,必须要关闭。
关闭方式:请求接口入参设置:
"generationConfig": {
"thinkingConfig": {
"thinkingBudget": 0
}
}
插件方式关闭:
沉浸式插件本身就可以关闭,具体方法:
- 插件设置 -> 开放者设置 ->
Edit Full User Config -
搜索找到"gemini",然后添加 json:
注意是添加配置,不要修改到原有配置。"gemini": { "APIKEY": "******", # 从此处为添加配置 "bodyConfigs": { "generationConfig": { "thinkingConfig": { "thinkingBudget": 0 } } } # 添加部分结束 }
new-api 关闭方式:
我习惯使用 new-api 来管理多个渠道的 api ,这里也提供关闭思考的方式。
- 系统设置-模型相关设置-启用 Gemini 思考后缀适配(如果没有这个功能请升级)。
-
渠道设置:模型名称需要以-nothinking 结尾,完整模型名:gemini-2.5-flash-preview-04-17-nothinking ,如果你配置了模型重定向,那就需要显示名称和模型名称都添加这个后缀,例如:
# 设定 gemini-2.5-flash-nothinking 为模型显示名称,gemini-2.5-flash-preview-04-17-nothinking 为实际模型名称。这样设置需要把显示名称(gemini-2.5-flash-nothinking)作为自定义模型填入模型列表。 { "gemini-2.5-flash-nothinking": "gemini-2.5-flash-preview-04-17-nothinking" } - 可能有朋友白嫖到了 GCP ,也关心 vertex 渠道如何关闭 thinking 。我提交了一个 PR ,已经被官方合并。feat: support thinking suffix for vertex gemini channel by tbphp · Pull Request #1012 · QuantumNous/new-api · GitHub,所以跟 gemini 一样配置即可。
deno 方式关闭:
前文有提到使用 deno 来代理,同样可以在代理代码里面向上游传递关闭思考的参数,deno 代码:
const targetHost = Deno.env.get("TARGET_HOST") || "generativelanguage.googleapis.com";
Deno.serve(async (req: Request) => {
const url = new URL(req.url);
url.hostname = targetHost;
url.protocol = "https:";
const headers = new Headers(req.headers);
headers.set('Host', url.hostname);
headers.delete('content-length');
let requestBody: BodyInit | null = null;
let modified = false;
if (req.method === "POST" && req.body && headers.get("content-type")?.includes("application/json")) {
const originalBodyText = await req.text();
if (originalBodyText) {
const bodyJson = JSON.parse(originalBodyText);
bodyJson.generationConfig = {
...(bodyJson.generationConfig || {}),
thinkingConfig: {
thinkingBudget: 0
}
};
requestBody = JSON.stringify(bodyJson);
modified = true;
} else {
requestBody = null;
}
} else if (req.body) {
requestBody = req.body;
}
const response = await fetch(url.toString(), {
method: req.method,
headers,
body: requestBody,
redirect: 'manual',
});
return response;
});
注意: 这个代码会强制关闭思考功能,单独用来代理不需要思考的 2.5flash 即可,2.5pro 勿用。
三、插件配置说明
3.1 翻译服务设置
- 翻译策略: 务必选择 「通用」,只有这样才能使用下面的自定义提示词,从而有效规避 429 问题。
- 最大文本长度: 可以设置得大一些,比如 10000 。gemini-2.5-flash 处理速度很快,不用太担心。
- 最大段落数: 建议设为 10 左右。这个值影响传递给模型的上下文长度,理论上值越大,上下文越多,翻译质量可能越好,但首次加载会稍慢。
- 提示词: 填入你自己修改过的专属提示词。
- 其他个性化: 我喜欢勾选“给译文增加下划线”,译文的区分更清晰。
3.2 用户规则配置
分享一个非常实用但可能用的人不多的功能:**用户规则 (User Rules)**。
场景: 看文档或特定网站(比如如 Folo 阅读器)时,插件会连带侧边栏、导航栏等非主要内容一起翻译,导致页面布局混乱。这时就可以通过配置用户规则,指定插件只翻译页面的特定部分。
示例: 就拿 app.follow.is 来举例:
- 首先自己通过浏览器开发调试工具分析元素,确认要翻译部分的元素选择器。
- 然后插件点击 “编辑用户规则 (Edit User Rules)”。
-
添加以下 JSON 配置:
[ { "matches": "app.follow.is", "excludeSelectors": [ ".group.absolute" ], "selectors": [ "article" ] } ]
配置说明:
- "matches": "app.follow.is":此规则仅对 app.follow.is 域名生效。
- "selectors": ["article"]:指定只翻译 HTML 中 <article> 标签包裹的内容(通常是文章主体)。
- "excludeSelectors": [".group.absolute"]:排除具有 CSS 类 .group.absolute 的元素(假设这是侧边栏或导航栏的 CSS 选择器)。你需要根据实际网页结构调整这些选择器。
目前就分享这些了,如果对于这个方案使用还有疑问就直接问吧,看看还有没有需要分享的。