V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
tbphp
V2EX  ›  程序员

沉浸式翻译配合 Gemini 2.5 Flash 的最佳实践,附 429 问题及关闭思考解决办法

  •  
  •   tbphp · 9 天前 · 570 次点击

    第一次来这里发文章,分享一下我使用沉浸式翻译的一些经验。这篇文章是原创,之前在隔壁发过一次。如果遇到熟人,一定留下来打个招呼。

    一、先说结论

    沉浸式翻译 + 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
      }
    }
    

    插件方式关闭:

    沉浸式插件本身就可以关闭,具体方法:

    1. 插件设置 -> 开放者设置 -> Edit Full User Config
    2. 搜索找到"gemini",然后添加 json:
      "gemini": {
        "APIKEY": "******",
        # 从此处为添加配置
        "bodyConfigs": {
          "generationConfig": {
            "thinkingConfig": {
              "thinkingBudget": 0
            }
          }
        }
        # 添加部分结束
      }
      
      注意是添加配置,不要修改到原有配置。

    new-api 关闭方式:

    我习惯使用 new-api 来管理多个渠道的 api ,这里也提供关闭思考的方式。

    1. 系统设置-模型相关设置-启用 Gemini 思考后缀适配(如果没有这个功能请升级)。
    2. 渠道设置:模型名称需要以-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"
      }
      
    3. 可能有朋友白嫖到了 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 来举例:

    1. 首先自己通过浏览器开发调试工具分析元素,确认要翻译部分的元素选择器。
    2. 然后插件点击 “编辑用户规则 (Edit User Rules)”。
    3. 添加以下 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 选择器)。你需要根据实际网页结构调整这些选择器。

    目前就分享这些了,如果对于这个方案使用还有疑问就直接问吧,看看还有没有需要分享的。

    21231sv
        1
    21231sv  
       9 天前
    问个提问问题。op 为什么用 gemini ,是因为它翻译比较准确吗
    tbphp
        2
    tbphp  
    OP
       9 天前
    @21231sv 没太懂你的问题。只是沉浸翻译插件用 gemini flash 个人比较推荐。质量和速度。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3244 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 11:27 · PVG 19:27 · LAX 04:27 · JFK 07:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.