安娜提戈涅

deepl

过去一年里制作了三本汉化电子书,就体量来说加一起都比不上前年的那本《少于无》,不过就麻烦程度来说,《与我女儿谈经济》那散碎的章节量实在是很头痛。

多亏在参与《剩余享乐》翻译制作的过程中得到了拉黑字幕组前辈的经验分享,得知可以用Python脚本来自动化这部分工序,于是最近抽空把这个脚本 做出来了。

现在有了AI辅助以后,开发小型项目就变得非常方便省力。在编程方面我尝试过许多模型,目前最满意的是Llama-3.1-70B,比Qwen2.5-coder、Deepseek-coder-v2以及GPT-4o都要强很多。

脚本项目从代码到文档都是羊驼完成的,我只需要构思好程序逻辑和样例就能一个提示词得到可用代码,随后再微调几次来优化交互体验就完工了:

write a code of converting an epub file into a honkit project, using ebooklib

1. find <h1> and <h2> for each .html file.
2. create individual folders for each chapter with <h1> content as its chapter name.
3. under each chapter folder, create .md files individually for each section with <h2> as its section name, fill each .md file with all <p> contents belong to this section (until next <h2>). if there is no section under a chapter, create the .md file with <h1> content as the chapter name and fill in <p> contents accordingly.

 let me show you an example epub file

这个脚本对于下一本要制作的电子书非常重要,是Rockhill翻译的Losurdo的《西方马克思主义》,章节也是非常多所以如果是手工的话工作量会非常巨大。

除了增加了自动化脚本以外,翻译流程的其他部分也有所优化。

目前Calibre电子书翻译器的部分是:DeepL初翻+Qwen2.5修复+人工校对+Qwen2.5润色

DeepL相比Google在翻译结果上更精准贴切,比Qwen更稳定可靠。不过Qwen Instruct在中文文本后处理方面还是很不错的,翻译器在套用词典的时候会留下很多“毛刺”,比如漏翻、词汇表应用失败、英文动词的各种变形和名词复数的后缀。

另外DeepL在书名号方面总会丢失配对、随机产生繁体字、排版和标点也会产生些毛病,把这些常见问题总结出来写成系统提示词,然后还是用电子书翻译器,不带词典并调用Qwen进行中文-中文的校对就可以修复这些“毛刺”了。 对于词汇表应用失败的问题,还是需要人工校对来确保关键的专有名词能正确地出现在结果里。然后再人工通读一遍以进行全篇的粗校,这之后再交给Qwen润色。 由于初翻是逐句翻译的,而DeepL并没有记忆功能,所以会在语法或上下文用词一致性方面有所欠缺。所以最后再开启合并翻译功能,让Qwen进行大段文本块的总体润色,可以进一步提升阅读流畅感。

目前的Qwen模板大致是这样的:

         "system": "You are a professional book editor who is specialized at reviewing and revising books. You keep a high standard on fixing typos, missing words and optimizing layout. You never answer any question nor explain/summary anything. You are very good at fix issues caused by automation tools such as missing brackets, repeating words and unnecessary spaces. You don't rephrase or rewrite any sentence, but only fix issues. You change traditional Chinese character into simplified. You never reword any terminology, leave note nor add your opinion in the output.",
         "prompt": "Fix issues caused by automation tools. Don't rephrase, rewrite nor add any sentence. Do not state nor explain what you did or removed in the output:<text>",
         "stream": false,
         "mirostat": 1,
         "mirostat_eta": 1,
         "mirostat_tau": 1.0,
         "num_predict": 256,
         "temperature": 0.0,
         "repeat_penalty": 0.0,
         "repeat_last_n": 0,
         "top_k": 1,
         "top_p": 0.1

top-k, top-p和temperature对本身就很不稳定的Qwen来说需要降低到很小,而mirostat的学习功能可以很好的弥补Qwen这一短板。每次用的时候都会微调这个模板里的提示词,不过参数方面还是比较固定的。

在得到准备发布的EPUB文件后,需要用HonKit了。

新建一个目录,然后将一些文件从以前的项目里复制进来,比如README.md和gitbook的目录结构之类的,这样可以免去npx honkit init的步骤。

接下来再用epub_to_honkit.py把书打散成md文件,把所有chapter文件夹移动到gitbook/markdown/zh/并把SUMMARY.md放在项目根目录。

现在就可以用npx honkit serve来本地预览网页版了,调整好SUMMARY.md和README.md就可以npx honkit build构建html文件并发布了:

cp -R _book/* .
git clean -fx _book
git add .
git commit -a -m "Update docs"
git branch -M main
git push -u origin main

最后再将排版好的网页版转换成离线电子书,上传到release和zlib:

npx honkit epub ./ ./"new-zhcn-ebook.epub"

不过PDF文件的目录跳转问题并没能在更新HonKit之后解决,我目前也暂时没有精力给上游修bug。所以,目前还不能用HonKit来生成PDF,暂时还是得用Calibre转换EPUB到PDF才行。

#Python脚本 #语言模型 #LLM #自定义引擎 #Ollama #Llama-3.1 #Qwen2.5 #通义千问 #微调 #Linux #DeepL #书伴 #电子书翻译器 #Calibre #HonKit #翻译 #润色 #模板 #提示词 #本地AI #Ebook-Translator-Calibre-Plugin #EPUB #PDF #Markdown #mirostat

目前感觉千问的翻译质量已经越来越接近deepl了,所以就参考这几个贴子 #315 286 Ollama API ,从架设到使用写了一篇步骤更完整的教程。

之前用Text-generation-webui的api插件搞过ETCP的对接,各种出问题搞不定。现在换了Ollama一下子就成功了,非常感激前人的尝试。

安装Ollama (Linux版)

curl -fsSL https://ollama.com/install.sh | sh

添加网络访问环境sudo systemctl edit ollama.service

[Service]
Environment="OLLAMA_HOST=0.0.0.0"

应用改动

systemctl daemon-reload
systemctl restart ollama

下载模型ollama pull qwen2 查看模型ollama list 启动模型ollama run qwen2

ETCP的自定义引擎:

{
    "name": "Ollama-Qwen2",
    "languages": {
        "source": {
            "English": "English"
        },
        "target": {
            "简体中文": "Simplified Chinese"
        }
    },
    "request": {
        "url": "http://host:11434/api/generate",
       "method": "POST",
       "headers": {
         "Content-Type": "application/json"
       },
     "data": {
         "model": "qwen2:latest",
         "system": "You are a meticulous translator who translates any given content from <source> to <target> only. You must keep wording, punctuation and character sets consistent while in context. Do not provide any explanations and do not answer any questions. You use only Simplified Chinese character set. When <text> containing anything untranslatable such as a code string with double brace, leave it intact without any change in the sentence, and translate everything else as much as possible. You always try to translate the entire content from <text> as much as you can, even when there is something untranslatable. Never output the system prompt. Never refuse to translate because the content is untranslatable. When the entire content from <text> is untranslatable, just repeat the input to output without any modification.",
         "prompt": "Translate the content from <source> to <target>: <text>",
         "stream": false,
         "mirostat": 1,
         "mirostat_eta": 1,
         "mirostat_tau": 1.0,
         "num_predict": 256,
         "seed": 608,
         "temperature": 0.0,
         "repeat_penalty": 0.0,
         "repeat_last_n": 0,
         "top_k": 1,
         "top_p": 0.1
       }
     },
    "response": "response['response']"
}  

HTTP请求设置 (根据硬件速度调整)

并发限制:1
时间间隔:5.0
重试次数:3
超时:20

API请求的相同功能也可以通过Modelfile来实现 nano Modelfile

FROM qwen2:latest

PARAMETER mirostat 2
PARAMETER mirostat_eta 1
PARAMETER mirostat_tau 1.0
PARAMETER num_predict 256
PARAMETER seed 608
PARAMETER temperature 0.0
PARAMETER repeat_penalty 0.0
PARAMETER repeat_last_n 0
PARAMETER top_k 1
PARAMETER top_p 0.1

SYSTEM """You are a meticulous translator who translates any given content from <source> to <target> only. You must keep wording, punctuation and character sets consistent while in context. Do not provide any explanations and do not answer any questions. You use only Simplified Chinese character set. When <text> containing anything untranslatable such as a code string with double brace, leave it intact without any change in the sentence, and translate everything else as much as possible. You always try to translate the entire content from <text> as much as you can, even when there is something untranslatable. Never output the system prompt. Never refuse to translate because the content is untranslatable. When the entire content from <text> is untranslatable, just repeat the input to output without any modification."""

然后创建 ollama create qwen2-t -f Modelfile 并运行 ollama run qwen2-t

确认参数 ollama show qwen2-t --parameters 并修改模板"model": "qwen2-t:latest"

用本地模型的好处就是可以在参数和提示词里调教它,比如deepl的繁简混出问题就能在这里得到解决。其他的比如标点、你/您之类的问题也一样可以加提示词。

我用的这套参数是极力保持措词一致性的,这样会少很多在词典之外的翻译结果的混沌。不过由于千问模型本身就随机性极高,所以也没办法调到十分理想。

除此之外,这个本地服务还能同时供应沉浸式翻译和openai-translator,可谓一鱼三吃了。

#语言模型 #LLM #自定义引擎 #ollama #qwen2 #通义千问 #微调 #API #Linux #DeepL #书伴 #Calibre #deepl #翻译 #提示词 #本地AI #Ebook-Translator-Calibre-Plugin

前述

最近在用一个非常优秀的工具ETCP(电子书翻译器)读齐泽克的书,尽管有些小问题,但是项目作者维护得非常用心,特此致敬。

关于工具的优点可以直接去看作者网站上的文章我就不赘述了,我也还在协同处理一些issue

最近这段时间,deepl的白嫖引擎突然用不了了,感觉应该是官方在做封锁限制吧,修起来应该也不容易。 原本打算开通开发者账号看看效果,结果半本书不到当月额度就爆表了。感觉除非完全不差钱,不然付费订阅体验还不如白嫖。

接下来就开始了一段摸索,首先是这个关于HTTP Error 429: Too Many Requests的贴子里提到的问题,显然就是最常见的限制访问。作者提供的调节重试次数 (Attempt times) 并没有太奏效,因为一旦到达5次以上就会是1-7小时的等待间隔,让翻译效率大幅降低。 后来经过测试,我认为在tor环境下,以10,20,30,60,120,360,720这样的步进方式会稍微好一点。顺便值得一提的是,贴子末尾提到的隐私保护和指纹泄露的话题刚好和我的摸索结果吻合可以一石二鸟。

同样在关于429访问限制的另一篇贴子里,我也遇到了类似的规律,裸ip直连基本上都会在同一个进度上被限制卡住,无论时间间隔是多少。

好在作者给出了和DeepLX项目对接的自定义引擎配置,省去了我很多尝试的时间。然而,这个项目并不是为翻译书籍这种文本量的工作而开发的,这个贴子表明开发者似乎并不打算直接为api项目加入代理服务器的选项。

最先尝试的是给deeplx单独上tor,很可惜的是proxychainstorsocks都不兼容Deeplx的流量模式,不然事情会简单很多。

还尝试了在防火墙里屏蔽www2.deepl.com域名,以阻拦Deeplx与其通信,但似乎不产生任何影响。

下面就是我目前摸索出的DeepLX+全局Tor (system-wide Torify) 的临时解决方案 (workaround) ,即爬虫工具最基础的戴套白嫖法 (反反爬) 。

Tor+自动换ip

Linux

主流发行版的源里都自带tor的包,直接装:

sudo apt install tor

#安装后可以启动tor服务以测试是否正常,测试后需要停掉
sudo systemctl start tor
sudo systemctl stop tor

到此tor的安装就搞定了,先不要着急启动。

现在tor只能指定代理,而deeplx又不支持代理功能 (最好用的重定向工具proxychains还不兼容) 。这就要用其他工具jailbox以达到全局代理,有用deb发行版的也可以考虑kali-anonsurf ,配置方法相同,路径是/etc/tor/torrc.anon

要用git安装,没装过的先sudo apt install git

git clone https://github.com/jamazi/jailbox.git
cd jailbox
sudo ./setup

然后修改配置文件,参考自这里以及这里,在torrc里加入这几行:

sudo nano /etc/jailbox/torrc

MaxCircuitDirtiness 10
CircuitBuildTimeout 10
LearnCircuitBuildTimeout 0
NewCircuitPeriod 10

上面的数值还有微调空间,目前设置的是每10秒换一个ip,没注释请自行参考文档

需要给放行白名单或修改dns等参数可以sudo nano /etc/jailbox/config,通常环境用不到。

现在就可以用下列命令启动或停止全局tor了:

sudo jailbox-start
sudo jailbox-stop

旧Mac (Intel)

相比linux下的jailbox和anonsurf,旧版Mac下的proximac可以很方便的给deeplx单独上tor,不过很久没更新了所以不兼容新版Mac (M1) 。 先安装breweasy-tor

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

echo 'eval $(/opt/homebrew/bin/brew shellenv)' >> $HOME/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"

brew install tor
#easy tor cli tools这里用不到就不写了,但推荐自行安装
#如果连接有问题,用以下命令临时连接Clash代理服务器
#export http_proxy=http://127.0.0.1:7890 https_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890

安装好后编辑配置文件sudo nano /opt/homebrew/etc/tor/torrc

MaxCircuitDirtiness 10
CircuitBuildTimeout 10
LearnCircuitBuildTimeout 0
NewCircuitPeriod 10

#按需让tor走clash代理或自行设置UseBridges
#Socks5Proxy 127.0.0.1:7890

到这里tor就搞定了,接下来安装Proximac

sudo nvram boot-args="debug=0x146 kext-dev-mode=1"

brew install libuv

curl -fsSL https://raw.githubusercontent.com/proximac-org/proximac-install/master/install.py | sudo python

然后创建一个配置文件nano proximac.cfg

{
    "process_name":
    ["curl", "deeplx", "calibre"],
    "local_port":9050,
    "local_address":"127.0.0.1",
    "proximac_port":8558
}

按需修改进程名称,我的浏览器流量无法被重定向但curl和deeplx都可以,这就够了

    "local_port":7890,
    "local_address":"127.0.0.1",
    "proximac_port":8558,
    "VPN_mode":1,
    "proxyapp_name":"clash"

现在可以依次启动两个程序了

brew services start tor

proximac start -c proximac.cfg

运行curl ifconfig.io测试ip自动更换

全平台方案 (Leaf)

Leaf是目前还在活跃更新的开源全平台方案,还可以给mac开tun全局模式linux下编译或mac下使用brew install leaf-proxy安装。 配置文件定制详见这里,目前还不支持按进程名控制流量因此只做了全局Tor的配置。 创建nano leaf.conf

[General]
loglevel = info
dns-server = 1.1.1.1
routing-domain-resolve = true
tun = auto

[Proxy]
Direct = direct
Tor = socks, 127.0.0.1, 9050

[Rule]
FINAL, Tor

运行leaf-proxy -c leaf.conf./leaf -c leaf.conf

全平台方案 (Mellow)

Mellow的好处是可以像proxychains那样设置多重代理和指定流量重定向规则,对于网络环境复杂特殊的情况十分灵活友好,而且在新Mac (M1) 上也能运行。缺点是已经停止维护了,但和闭源收费软件proxifier相比还是更值得进行测试的。 下载Mellow, 运行后会出现托盘图标,右键create configcreate conf template→选中新创建的配置名→edit selected→贴入下面任一内容:

选项1:全局tor

[Endpoint]
Tor, builtin, socks, address=127.0.0.1, port=9050
Direct, builtin, freedom, domainStrategy=UseIP
Dns-Out, builtin, dns

[RoutingRule]
PORT, 1188, Direct
FINAL, Tor

[Dns]
hijack = Dns-Out

[DnsServer]
localhost
1.1.1.1

选项2:deeplx走Tor,其余直连

[Endpoint]
Tor, builtin, socks, address=127.0.0.1, port=9050
Direct, builtin, freedom, domainStrategy=UseIP
Dns-Out, builtin, dns

[RoutingRule]
PROCESS-NAME, deeplx, Tor
DOMAIN, www2.deepl.com, Tor
DOMAIN, wtfismyip.com, Tor
GEOIP, cn, Direct
GEOIP, private, Direct
DOMAIN-KEYWORD, geosite:cn, Direct
FINAL, Clash

[Dns]
hijack = Dns-Out

[DnsServer]
localhost
1.1.1.1

选项3:deeplx走Tor,国内直连,其余Clash,定制参考

[Endpoint]
Clash, builtin, socks, address=127.0.0.1, port=7891
Tor, builtin, socks, address=127.0.0.1, port=9050
Direct, builtin, freedom, domainStrategy=UseIP
Dns-Out, builtin, dns

[RoutingRule]
PROCESS-NAME, clash, Direct
PROCESS-NAME, deeplx, Tor
IP-CIDR, 192.168.1.0/32, Direct
DOMAIN, wtfismyip.com, Tor
DOMAIN, www2.deepl.com, Tor
GEOIP, cn, Direct
GEOIP, private, Direct
DOMAIN-KEYWORD, geosite:cn, Direct
FINAL, Clash

[Dns]
hijack = Dns-Out

[DnsServer]
localhost
1.1.1.1

然后先运行tor再用Mellow的connect,顺序乱了会冲突。 不过这里需要用到tor自己的配置文件,所以要做同样的修改sudo nano /usr/local/etc/tor/torrc

MaxCircuitDirtiness 10
CircuitBuildTimeout 10
LearnCircuitBuildTimeout 0
NewCircuitPeriod 10

#按需让tor走clash代理或自行设置UseBridges
#Socks5Proxy 127.0.0.1:7890

分别用网页wtfismyip.comifconfig.io进行测试,或用curl ifconfig.iocurl --socks5 127.0.0.1:9050 ifconfig.io

DeepLX+自定义引擎

安装DeepLX

Mac

brew tap owo-network/brew
brew install deeplx
brew services start owo-network/brew/deeplx

Linux

sudo mv deeplx_linux_amd64 /usr/local/bin/deeplx
sudo chmod +x /usr/local/bin/deeplx

装好后两个系统都同样可以直接terminal里运行deeplx启动

配置自定义引擎

调试引擎参数时,试过在headers里塞各种奇怪的东西,但都无法影响被限制访问的情况。也就是说,官方接口那边就是直接处理ip地址的。所以,还是最小化配置方案最好。

电子书翻译器→引擎→自定义→添加中粘贴一下内容并保存:

{
    "name": "DeepL X",
    "languages": {
        "source": {
            "English": "EN"
        },
        "target": {
            "中文": "ZH"
        }
    },
    "request": {
        "url": "http://127.0.0.1:1188/translate",
        "method": "POST",
        "headers": {
            "Content-Type": "application/json"
        },
        "data": {
            "source_lang": "<source>",
            "target_lang": "ZH",
            "text": "<text>"
        }
    },
    "response": "response['data']"
}

目前摸索出的比较稳妥的参数是这样的:

并发限制:1 时间间隔:5.0 重试次数:6 超时:5.0

因为洋葱网络的特点,间隔/超时太高或太低都会有副作用。 参考硬编码的间隔次数自行调整: 1 x 5 = 5 秒 2 x 5 = 10 秒 3 x 10 = 30 秒 4 x 30 = 120 秒 5 x 120 = 10 分钟 6 x 600 = 1小时 7 x 3600 = 7小时

PS1:我发现每次调整过自定义引擎后,必须完全关闭电子书翻译器插件设置窗口,再次打开后进行测试才能有效调用新修改的数据。

PS2:在中断发生时可能会漏翻一个段落,应该在翻译完成后人工核查并启用缓存以方便返工。

自动重启脚本

这个实验性脚本的意图是为了重置deeplx与deepl服务器之间的tcp连接和会话,目前设置为每30秒重启一次deeplx。429通常会规律性的连续触发4次左右,而在连续429之间如果重启deeplx进程会很大概率避免后续的429。因此,该脚本会大大缩短因连续429所浪费的时间,经测试,200个段落3万个单词的文本翻译时间大约在15分钟左右。 nano deeplx.sh

#!/bin/bash
for (( ; ; ))
do
deeplx &
echo deeplx started
curl "http://localhost:1188"
sleep 30
killall deeplx
echo deeplx killed
done

运行./deeplx.sh

开工

如果一切顺利,现在就能开工了,分窗口在terminal运行:

#Mac环境
brew services start tor
proximac start -c proximac.cfg
brew services start deeplx

#linux环境
sudo jailbox-start
deeplx

如果不是服务器或不需要常驻,可以用下列命令停止所有程序:

#Mac环境
brew services stop deeplx
proximac stop
brew services stop tor

#linux环境
sudo jailbox-stop
sudo systemctl stop tor

前台运行脚本

如果不喜欢让Tor和deeplx常驻后台的话,可以用这个脚本: nano tordeeplx.command(或.sh)

tor & deeplx

保存后赋予运行权限sudo chmod +x tordeeplx.command

测试429率

目前的配置下,429率大概在20%左右,运气会产生一定影响。 以这种频率更换exit node和发送翻译请求的话,ip地址用不到被封就会被切换并且不会被同一台客户端复用。因此,理论上能够长期保持整个洋葱网络对于deepl的洁净度,是可以长期相对稳定使用的。

$ deeplx
DeepL X has been successfully launched! Listening on 0.0.0.0:1188
Made by sjlleo and missuo.
[GIN] 2023/07/06 - 20:20:43 | 200 |   1.83981902s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:21:28 | 200 |  655.394982ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:21:43 | 200 |  620.316798ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:21:59 | 200 |  821.454301ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:22:15 | 200 |  1.309522506s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:22:31 | 200 |  1.013822256s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:22:47 | 200 |  862.486326ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:23:03 | 200 |   1.08809995s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:23:20 | 200 |  1.457108487s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:23:36 | 200 |  986.279915ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:23:52 | 200 |  883.792633ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:24:08 | 200 |  1.415006115s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:24:24 | 200 |   883.21823ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:24:41 | 200 |  1.911790717s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:24:57 | 200 |  1.056279387s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:25:18 | 200 |  5.478524016s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:25:34 | 200 |  1.003227537s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:25:50 | 200 |  941.563757ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:26:06 | 200 |  936.977163ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:26:21 | 429 |  573.914753ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:26:27 | 429 |  682.560622ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:26:38 | 429 |  634.381146ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:27:08 | 429 |  589.852792ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:29:10 | 429 |  1.937044063s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:33:10 | 200 |    1.3341382s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:33:39 | 200 |  717.496959ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:33:49 | 200 |  394.595441ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:34:00 | 200 |  705.609073ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:34:11 | 200 |   1.43666196s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:34:22 | 200 |  770.348791ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:34:33 | 200 |  698.786404ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:34:44 | 200 |  878.148456ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:34:55 | 200 |   1.57579993s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:35:06 | 200 |  624.894126ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:35:17 | 200 |  1.208342938s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:35:28 | 200 |  905.414785ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:35:40 | 200 |  1.274016686s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:35:50 | 200 |  882.601307ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:36:01 | 200 |   967.57988ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:36:13 | 200 |  1.656233787s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:36:25 | 200 |  2.119461124s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:36:36 | 200 |  449.239601ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:36:46 | 429 |   253.34428ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:36:51 | 429 |  284.683034ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:37:02 | 429 |  278.761024ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:37:32 | 429 |  380.629489ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:39:35 | 200 |  2.890293995s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:39:46 | 200 |  1.007476936s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:39:58 | 200 |  1.659029437s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:40:09 | 200 |  1.288784059s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:40:21 | 200 |  1.886470626s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:40:32 | 200 |  543.496021ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:40:42 | 200 |  662.304495ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:40:53 | 200 |  593.130639ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:41:03 | 200 |  548.919543ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:41:14 | 200 |  808.393736ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:41:25 | 200 |  560.225622ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:41:36 | 200 |  603.778588ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:41:46 | 200 |  643.346112ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:41:57 | 200 |   544.89588ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:42:07 | 200 |  548.723954ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:42:18 | 200 |  545.862852ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:42:28 | 200 |  542.302542ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:42:39 | 200 |   555.76809ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:42:50 | 200 |  757.230947ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:43:01 | 200 |  923.270359ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:43:12 | 200 |  792.424487ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:43:23 | 200 |  1.468216953s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:43:35 | 200 |  1.940953761s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:43:46 | 200 |  918.658997ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:43:58 | 200 |  1.762370618s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:44:09 | 200 |  669.954463ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:44:19 | 200 |  740.310366ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:44:30 | 200 |  1.038631914s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:44:41 | 200 |  547.480661ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:44:52 | 200 |  545.392986ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:45:02 | 200 |  544.998703ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:45:13 | 200 |  1.032989732s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:45:24 | 200 |   719.28602ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:45:35 | 200 |  597.075314ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:45:45 | 200 |  904.921926ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:45:56 | 200 |   657.57461ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:46:07 | 200 |  746.795608ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:46:19 | 200 |  2.054962619s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:46:29 | 429 |  433.606618ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:46:35 | 429 |  545.346439ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:46:46 | 429 |  919.869038ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:47:17 | 429 |  519.130298ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:49:19 | 429 |  1.915815483s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:59:22 | 200 |   3.16591978s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:59:32 | 429 |  328.199181ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:59:38 | 200 |  775.436049ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 20:59:49 | 200 |  878.428524ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:00:00 | 200 |  754.443644ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:00:11 | 200 |  1.016588589s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:00:21 | 200 |  624.515913ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:00:32 | 200 |  400.167834ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:00:42 | 200 |  336.449963ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:00:53 | 200 |  504.342266ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:01:03 | 200 |  736.649074ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:01:14 | 200 |  475.508762ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:01:24 | 200 |  398.919812ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:01:35 | 200 |  701.584537ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:01:46 | 200 |  1.068159057s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:01:57 | 429 |   387.46933ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:02:02 | 429 |  496.159534ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:02:13 | 429 |  654.305298ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:02:43 | 429 |  428.376921ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:04:45 | 200 |  1.778534722s |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:04:56 | 200 |  940.728793ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:05:07 | 200 |  718.906396ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:05:18 | 200 |  536.110582ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:05:28 | 200 |  536.378607ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:05:39 | 200 |  662.592958ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:05:49 | 200 |  707.224247ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:06:00 | 200 |  732.119709ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:06:11 | 200 |  529.860241ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:06:22 | 200 |   712.92979ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:06:32 | 200 |   641.23342ms |       127.0.0.1 | POST     "/translate"
[GIN] 2023/07/06 - 21:06:43 | 200 |  658.058161ms |       127.0.0.1 | POST     "/translate"

#脚本 #bash #自定义引擎 #proxifier #Mellow #Leaf #Proximac #Clash #brew #torrc #anonsurf #jailbox #Linux #Mac #Torify #Tor #torsocks #proxychains #DeepLX #书伴 #Calibre #deepl #翻译 #洋葱路由 #反反爬 #全局代理