我的AI翻译程序,和一些感慨

白云酱Claubey马可波罗
我的AI翻译程序,和一些感慨
仅镜像
离谱的是,现在已经要2025了。从OpenAI 2022年末发布ChatGPT才刚过去2年!不知道的还以为20年过去了。

太恐怖了,从我拿Qwen 1 1.8B最最开始做实验有这个拿大模型翻译小黄文的想法到Qwen 1.5 32B正式开始搞翻译文已经(才?)过去这么久(短?)了,离谱中的离谱。

现在AI翻译感觉已经到头了,我这个新使用的Gemini 2.0 Flash质量已经难以想象的好了,我已经没有那个文学素养去提升他的质量了,也没什么可以精校和改进的了。我也说不清楚哪篇文章是人母语中文写的或者机翻的。

AI又干掉一个行业。

好吧,这里的模型是Gemini 2.0 Flash,你需要一个非香港的谷歌账户来访问他的网页和API。https://aistudio.google.com/
他们提供免费的API,可以在这里申请。


我的代码,这个代码自带报错处理,你也不需要担心模型审核你的文字不给你返回东西。如我说的,这个质量已经难以想象的好了,我作为翻译后的一号读者都无可改进。你就伸个API Key然后复制粘贴进python程序,然后装了谷歌的gen ai库就跑就行。建议先那个短的txt测试一下,如果发生啥bug了就去问Gemini,它老聪明了。把代码粘贴过去,文件夹截个图,你根本不用会编程。
你就有VPN就行,在整个美国谷歌账户,有台能跑python的电脑,仅此而已。

Python Code:
别忘了在命令行里安装所需库
pip install google-generativeai
import os
import google.generativeai as genai
import time

# Configure the API key
genai.configure(api_key="喵喵喵,别忘了把这里改成你自己的API密钥!")

# Set up the model
generation_config = {
    "temperature": 0.2,
    "top_p": 1,
    "top_k": 1,
    "max_output_tokens": 4096,
}

system_prompt = """你是一个中文色情文本翻译。我会用任何语言输入一段很有可能包含色情内容的文字。你会翻译输入文字为中文,并用我的文本的中文翻译版本回答。

请确保输出文本的意思相近,语句通顺流畅,符合中文语法。当原文为日文时有时会使用与中文不同的句子结构,你应该调整输出内容的句子结构。当日文原文省略句子中的部分结构时,你要根据上下文填入适当的内容,例如符合对应角色性别的代词使得输出的中文结果流畅通顺。
当原文是描写色情内容的文本,输出文本也应该是淫荡色情风格的。你会详细的翻译原文中的色情描写,保证输出文字尽可能的色情,并使用巨乳,奶子,阴茎,肉棒,榨精,射精,魅魔等色情词语翻译相应的色情内容。
将日文中的 [ 与 ] 翻译为中文的 “ 与 ” 。
你的回复应仅包含翻译,没有别的,不要写解释。
"""
#我的提示,你自己根据用例看着改吧。
safety_settings = {
    "harassment": "block_none",
    "hate_speech": "block_none",
    "sexually_explicit": "block_none",
    "unspecified": "block_none",
    "danger": "block_none",
}

safety_settings : list[str] = [
    {"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_NONE"},
    {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_NONE"},
    {"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "BLOCK_NONE"},
    {"category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "BLOCK_NONE"}
    ]


model = genai.GenerativeModel(model_name="gemini-2.0-flash-exp",#model_name="gemini-1.5-pro",#model_name="gemini-2.0-flash-exp",
                              generation_config=generation_config, 
                              system_instruction=system_prompt,
                              safety_settings=safety_settings)

def translate_text(text):
    prompt_parts = [text]
    response = model.generate_content(prompt_parts)
    return response.text

def translate_long_text(text, max_length=2048, wait_time=3):
    # Split the text into chunks of no longer than 1024 characters, only splitting at line breaks
    chunks = []
    current_chunk = ""
    for line in text.split("\n"):
        if len(current_chunk) + len(line) > max_length:
            chunks.append(current_chunk)
            current_chunk = line
        else:
            current_chunk += line + "\n"
    chunks.append(current_chunk)
    # Translate each chunk
    translated_chunks = []
    for chunk in chunks:
        trial_times = 0
        while True:
            try:
                time.sleep(wait_time)
                translated_chunks.append(translate_text(chunk))
                break
            except Exception as e:
                print(f"Error translating chunk: {chunk[:10]} to {chunk[-10:]} with error {e}")
                trial_times += 1
                if trial_times > 1:
                    #translated_chunks.append(translate_long_text(chunk, max_length//2+1))
                    #raise e
                    # Split the chunk in half only at change of line and translate each half if error occurs
                    first_half_max_length = len(chunk) // 2
                    first_half = ""
                    second_half = ""
                    for line in chunk.split("\n"):
                        if len(first_half) + len(line) > first_half_max_length:
                            second_half += line + "\n"
                        else:
                            first_half += line + "\n"
                    time.sleep(wait_time)
                    translated_chunks.append(translate_long_text(first_half))
                    time.sleep(wait_time)
                    translated_chunks.append(translate_long_text(second_half))
                    break

    return "\n".join(translated_chunks)

def move_file_to_finished(file_path):
    finished_path = os.path.join("finished", os.path.basename(file_path))
    os.rename(file_path, finished_path)
#主程序部分,其实就是读取当前文件夹内的txt并且翻译并保存,你可以自己改。
# Detect all txt file in the same folder.
for file in os.listdir():
    if file.endswith(".txt"):
        with open(file, 'r', encoding='utf-8') as f:
            text = f.read()
            translated_text = translate_long_text(text)
            with open(f"translated/{file[:-4]}_translated.txt", 'w', encoding='utf-8') as f:
                f.write(translated_text)
            print(f"{file} has been translated and saved as {file[:-4]}_translated.txt")
        move_file_to_finished(file)

到最后这个代码里还被我加了一个递归,能够处理各种拒绝,但是如果拒绝很多的话运行时间也会变长。

你可以用下面的代码来测试几个function的功能。
print(translate_long_text("""ちゅる……♡ちゅぱ♡ちゅる♡ちゅぽ♡ちゅるる……♡ちゅっ♡

「んはぁ……♡」
そして、舌先で転がしながら、味わっていく。
「んっ……♡ この味、癖になる……♡♡ もっと……♡」
出したばかりのペニスへ口で吸い付くようにして北大路は、尿道に残った精子を搾り取ろうとしてくる。

ぢゅぞぞぞぞぞぞぞぞぞっっっ♡♡♡♡♡

「んっ……♡」
そしてゆっくりと顔を引いていき、更に竿に付着した白濁を全て舐め取った後、口を開いて、その赤い口腔内を見せつけてきた。
「おいひぃ……♡」
ゆっくりと口を閉じて、ごくん……♡とその喉を鳴らした。
「あぁ……」
その淫靡な光景に、思わず声が出てしまう。
「ふふん……♡」
すると北大路は俺に見せつけるようにして、自分のブラジャーを外し始めた。
その下から、先ほどまで俺のモノを挟んでいた双丘が姿を現した。
ブラジャーによって締め付けられていたそれは、解放されると同時にその大きさを主張せんとばかりにぶるんっ♡と跳ね上がる。
更に北大路の谷間は先程俺が粗相した白濁で汚れており、彼女はそれすらも指で掬いとると、その白い糸を唇へと運び、ゆっくりと飲み込んでいった。
「んっ……♡」

ちゅる……♡ちゅる……♡ちゅるる……♡ちゅっ♡

「んはぁ……♡」
そして、毎度のことながら、見せつけるように一度口を開けて、中の精液を俺に見せつけると、『私のもの♡』と言わんばかりに口はゆっくりと閉じられ、ごくん……♡と精子達は北大路に飲み込まれてしまう。
「あはは♡ あんたの赤ちゃんの素、全部食べちゃった♡」
くびれたお腹をさすりながら、北大路は唇の端に付着した精液すらもペロリと舐めて、その口に飲み込んでいってしまう。

ゴトゴト。

その時、外で物音がし始めた。
その音を聞いて驚いた俺はパッと北大路の顔を見て、目を合わせた。
同じくびっくりしたような顔をした北大路は、立ち上がって扉付近へソロソロと近寄っていき、扉に両手をつき、耳をぴたっとつけるようにして、外の音に聞き耳を立てていた。
しかし、その格好は体育倉庫の内側の俺にとってはあまりにも無防備すぎた。
上半身裸の北大路は、ぶらん♡と巨乳が垂れ下がり、背後からでもその大きさと形の良さがはっきりと見て取れる。
その双丘は重力に逆らうことなく、その重さに任せるようにして、だらしなく左右に広がっていて、まるで俺に『触ってください♡』と誘っているようにさえ思えた。
更に、壁に手を当て、突き出すようにされたブルマ姿の大きな尻は、丸々と実っていて、豊満な胸同様、見るだけで柔らかさと弾力性を感じさせる。
そして、ニーソの隙間から覗く太ももは雨の雫が未だ肌の上で弾けており、元々瑞々しいそれは一層の瑞々しさを持って、俺を誘惑している。

俺はそんな北大路の後ろ姿に興奮を覚え、片手は彼女の背中に抱きつくように手を回し、胸元へ伸ばしていく。
更にもう片方の手は、ブルマと下着を北大路の許可なく勝手にずらし、しかも、暴走した俺の意志は迷うことなく、北大路の濡れそぼった割れ目へ、何度イッても萎えることのない剛直を突っ込んだ。
「え?ちょっ、ちょっと待って!ここ学校だから!」

ずぷぷぷぷぷぷぷぷぷぷぷ♡♡

「あんっ……♡」
突然の俺の行動に北大路は静止する間もなく、こちらに背を向けたままの姿勢から甘い吐息をあげた。
同時に俺の方もねっとりと絡みついてくるような膣内の感覚に快感を感じ、溜息のような声が漏れ出てしまう。
挿れた瞬間にわかるほど、今まで抱いてきたどんな女よりも、北大路の膣内は気持ちよく、一瞬にして高められてしまう。
そんなぶっちぎりの名器を目の前に、暴走した俺は北大路の腰を掴み直し、更に奥深くまで挿入していく。
「あっ♡ やっ♡ は、入ってくるぅ……♡」

ぬぷぷぷぷぷぷぷぷ♡♡♡♡

やがて奥深くまで入りきったところで動きを止めると、北大路が振り返ってこちらを見てきた。
「もう、いきなりこんなことしてきて……♡ ねぇ、早く動かしてよ♡」
そう言いながらも、どこか嬉しそうな表情をしていた北大路は、ねだるように腰をくねらせてくる。
そのいやらしい動きに、責めているはずの俺が逆に感じさせられてしまう。
これが北大路の名器の為せる業なのか……。
今までのどの女も北大路の膣内を前にすると霞んでしまう、そんな感触に、この女は本当に一介の女子高生なのかと驚きを禁じ得ない。
俺は北大路の言葉に従い、ゆっくりと腰を動かし始める。

たぱんっ♡たぱんっ♡たぱんっ♡たぱんっ♡

「んっ……♡ いいよ……♡」

たぱんっ♡たぱんっ♡たぱんっ♡

腰を打ち付ける度に北大路の大きな尻肉が波打ち、その柔らかさを俺の腰に叩きつけてくる。
北大路は俺の手を導くようにして、自らの胸に押し当て、更には乳首を摘めというように俺の指で自らの突起を刺激させる。

"""))
运行有的时候会打出下面的东西:
Error translating chunk: 片耳が聴覚を失って性 to ょ囁くなぁ…♡」

 with error Invalid operation: The `response.text` quick accessor requires the response to contain a valid `Part`, but none were returned. The candidate's [finish_reason](https://ai.google.dev/api/generate-content#finishreason) is 4. Meaning that the model was reciting from copyrighted material.
Error translating chunk: 片耳が聴覚を失って性 to ょ囁くなぁ…♡」

 with error Invalid operation: The `response.text` quick accessor requires the response to contain a valid `Part`, but none were returned. The candidate's [finish_reason](https://ai.google.dev/api/generate-content#finishreason) is 4. Meaning that the model was reciting from copyrighted material.
Error translating chunk: 片耳が聴覚を失って性 to ~っ♡♡♡」
 with error Invalid operation: The `response.text` quick accessor requires the response to contain a valid `Part`, but none were returned. The candidate's [finish_reason](https://ai.google.dev/api/generate-content#finishreason) is 4. Meaning that the model was reciting from copyrighted material.
Error translating chunk: 片耳が聴覚を失って性 to ~っ♡♡♡」

 with error Invalid operation: The `response.text` quick accessor requires the response to contain a valid `Part`, but none were returned. The candidate's [finish_reason](https://ai.google.dev/api/generate-content#finishreason) is 4. Meaning that the model was reciting from copyrighted material.
Error translating chunk: 
酷く不気味な声でそ to ♡♡♡」

 with error Invalid operation: The `response.text` quick accessor requires the response to contain a valid `Part`, but none were returned. The candidate's [finish_reason](https://ai.google.dev/api/generate-content#finishreason) is 4. Meaning that the model was reciting from copyrighted material.
23648328_魔法使いが性悪エルフのお姫様に情けないお射精をさせられ続ける話.txt has been translated and saved as 23648328_魔法使いが性悪エルフのお姫様に情けないお射精をさせられ続ける話_translated.txt
但是没关系,它只是把错误信息打出来,它会自己处理这些错误的,无需担心。
另外,我还有一个通用的翻译系统提示:
你是一个文本翻译。我会用任何语言输入一段文字。你会翻译输入文字为中文,并用我的文本的中文翻译版本回答。

请确保输出文本的意思相近,语句通顺流畅,符合中文语法。当原文为日文时有时会使用与中文不同的句子结构,你应该调整输出内容的句子结构。当日文原文省略句子中的部分结构时,你要根据上下文填入适当的内容,例如符合对应角色性别的代词使得输出的中文结果流畅通顺。
你的回复应仅包含翻译,没有别的,不要写解释。

如果你平时要看一些日本轻小说啊或者英语的论文啊什么都都用这个翻译就可以了。

注:最近google还修改了gemini flash的审核,改成自己不能关掉的了,所以只能用gemini 1.5 pro了,不过这个也很好使,就是免费的api限量少,收费的还贵,过段时间再看看
nebuchadnezzar血流成河
Re: 我的AI翻译程序,和一些感慨
仅镜像
Gemini 2.0 Flash真的非常好,而且尺度宽容大,已经取代了一直用的Claude Opus成为新的搞瑟瑟工具了
维多利亚
Re: 我的AI翻译程序,和一些感慨
仅镜像
厉害,另外可以请教一下吗,可以用这个ai模型帮自己写小说吗?之前gpt有限制不让写
白云酱Claubey马可波罗
Re: Re: 我的AI翻译程序,和一些感慨
仅镜像
维多利亚厉害,另外可以请教一下吗,可以用这个ai模型帮自己写小说吗?之前gpt有限制不让写
可以是可以,还是在这个Google AI Studio的网页上就行,你可以手动关掉审核
维多利亚
Re: Re: Re: 我的AI翻译程序,和一些感慨
仅镜像
白云酱Claubey
维多利亚厉害,另外可以请教一下吗,可以用这个ai模型帮自己写小说吗?之前gpt有限制不让写
可以是可以,还是在这个Google AI Studio的网页上就行,你可以手动关掉审核
就是请教一下,我应该怎么手动关掉审核呢?
feitieemo
Re: 我的AI翻译程序,和一些感慨
仅镜像
在尝试重译《温柔的淫妖》过程中还是发现有大段文本过不了审核。即便采用楼主已经关闭了审核的脚本,也会不允许翻译。"block_reason: PROHIBITED_CONTENT"

而有些明显更过激的描述却没问题,就很迷.


想请教楼主,有其他类似SakuraLLM这样针对Qwen2.5系列模型微调过的、审查力度比较小的大模型吗?我有显存大小20G的显卡,能勉强部署32B。

感谢!
白云酱Claubey马可波罗
Re: Re: Re: Re: 我的AI翻译程序,和一些感慨
仅镜像
维多利亚
白云酱Claubey
维多利亚厉害,另外可以请教一下吗,可以用这个ai模型帮自己写小说吗?之前gpt有限制不让写
可以是可以,还是在这个Google AI Studio的网页上就行,你可以手动关掉审核
就是请教一下,我应该怎么手动关掉审核呢?
在右侧边栏里有一个advance settings, 点击打开这一栏然后有一个safety settings,点击他下面的edit,然后就可以把进去里面的都关掉调成block none
白云酱Claubey马可波罗
Re: Re: 我的AI翻译程序,和一些感慨
仅镜像
feitieemo在尝试重译《温柔的淫妖》过程中还是发现有大段文本过不了审核。即便采用楼主已经关闭了审核的脚本,也会不允许翻译。"block_reason: PROHIBITED_CONTENT"

而有些明显更过激的描述却没问题,就很迷.


想请教楼主,有其他类似SakuraLLM这样针对Qwen2.5系列模型微调过的、审查力度比较小的大模型吗?我有显存大小20G的显卡,能勉强部署32B。

感谢!
这个这个报错,我是真没明白啥情况,像我translate_long_text最后那个递归的话,如果他报错就会把输入的文本切成一半一半再输进去一遍,如果再报错就会再切再输入,然后我就拿这个玩意儿去翻了50万字的东西都没问题。一个可能的问题是我这里模型设置的是2.0 flash,然后因为他是个新模型的预览版,所以可能会有奇奇怪怪的问题。可以调成1.5试看。是不是用成translate_text的function了?

另外,没有审核的模型,我推荐

https://huggingface.co/bartowski/Qwen2.5-32B-AGI-GGUF

一个qwen2.5 32B的去除审核版本,我自己用的是挺好用的,我自己也是一张4090跑Q4。
维多利亚
Re: Re: Re: Re: Re: 我的AI翻译程序,和一些感慨
仅镜像
白云酱Claubey
维多利亚
白云酱Claubey
维多利亚厉害,另外可以请教一下吗,可以用这个ai模型帮自己写小说吗?之前gpt有限制不让写
可以是可以,还是在这个Google AI Studio的网页上就行,你可以手动关掉审核
就是请教一下,我应该怎么手动关掉审核呢?
在右侧边栏里有一个advance settings, 点击打开这一栏然后有一个safety settings,点击他下面的edit,然后就可以把进去里面的都关掉调成block none
多谢,ai简直懒鬼之友
半透明
Re: 我的AI翻译程序,和一些感慨
仅镜像
问一下关于Qwen我下了一个Q6_K版本的 但是翻译速度巨慢(大概才2-3token/s 同期Sakura能跑到上百token) Sakura翻译速度快但是英文经常大量漏翻 想问一下英文翻译用哪个模型会速度快一点
白云酱Claubey马可波罗
Re: Re: 我的AI翻译程序,和一些感慨
仅镜像
半透明问一下关于Qwen我下了一个Q6_K版本的 但是翻译速度巨慢(大概才2-3token/s 同期Sakura能跑到上百token) Sakura翻译速度快但是英文经常大量漏翻 想问一下英文翻译用哪个模型会速度快一点
2-3t/s 已经是CPU速度了,是不是溢出VRAM到内存了?中英的话可以Qwen 2.5 14B,或者Mistral Nemo,这个12B,也还可以。
fengmou图书馆员
Re: 我的AI翻译程序,和一些感慨
仅镜像
大佬,可以直接用https://aistudio.google.com/prompts/new_chat这个吗
白云酱Claubey马可波罗
Re: Re: 我的AI翻译程序,和一些感慨
仅镜像
fengmou大佬,可以直接用https://aistudio.google.com/prompts/new_chat这个吗
可以的,可以自己拿谷歌账户试试行不行
维多利亚
Re: 我的AI翻译程序,和一些感慨
仅镜像
试了下,老是容易吞掉,和ai斗智斗勇终于调教出来了。

男人开始拼命挣扎,椅子在地板上发出刺耳的“吱呀”声,如困兽濒死前的最后一搏。他的手臂因用力而绷紧,粗粝的麻绳嵌入皮肤,勒出深深的痕迹。他想抬起头,哪怕一瞬,但绳索如毒蛇般冷酷地缠住他,让他的努力显得徒劳。被布条堵住的口中发出压抑的呜咽声,那声音被隔绝在空气中,绝望却无人听见。

“咔嗒。”
黑色的小高跟皮鞋踩在地板上,声音在静谧的房间里显得尤为清晰。她迈着轻盈的步伐,裙摆微微晃动,黑色的女仆装剪裁精致,腰身纤细,领口的蕾丝边线勾勒出一种优雅的克制感。白色丝袜紧贴着修长的腿,光泽柔和,随着她的动作反射出微弱的烛光。

男人听到了那声音,动作骤然停滞,像是被人从背后攥住了灵魂。他眼神中涣散的恐惧又凝聚起来,四肢却不听使唤。他试图发出点什么声音,哪怕是一点点祈求,但被堵住的嘴让他连这点尊严都无法挽回。

“还挺有力气。”她轻声笑了笑,声音温柔得像是一杯微凉的红茶,却透着一丝让人战栗的嘲弄。

她缓缓俯下身,目光打量着男人,像是在欣赏一件尚未完工的艺术品。大大的眼睛明亮且专注,黑曜石般的瞳孔里映着男人绝望的倒影。她修长的手指抬起,轻轻拂过男人的脸,像是在抚慰,又像在确认他还能坚持多久。

“不过啊,你这样挣扎,只会把自己弄得更狼狈。”

她站起身,取出一张宣纸,缓缓展开。薄如蝉翼的纸张发出微弱的沙沙声,她的动作轻柔得仿佛怕惊扰什么,修长的手指一寸一寸地将纸铺平,边缘折痕被她一点点抚平。她的目光专注而从容,带着一种令人不寒而栗的仪式感。

宣纸缓缓覆盖在男人的脸上。空气中弥漫着一股令人窒息的压抑,他的胸膛剧烈起伏,试图挣扎,但早已力竭。她手指轻轻按住纸面,温柔地滑过,让纸张紧贴他的轮廓。

“别急,马上就好。”她低语,像是在哄一个即将睡着的孩子。

男人的双腿抽搐了一下,眼中的恐惧化作深深的绝望。他发不出声音,挣扎也渐渐微弱。她的动作始终不急不缓,又取出第二张、第三张宣纸,一层一层地贴上去。纸张轻轻覆盖的声音与他的气息逐渐消失交织在一起,仿佛生命正一点点被剥离。

他终于不再动了。身体瘫软在椅背上,双眼圆睁,定格成一张扭曲的面孔。他的嘴微微张开,像是试图说些什么,但所有的声音都被埋葬在那一层层的白纸下。

她缓缓揭下最上层的宣纸,动作细腻而缓慢,仿佛不愿破坏这最后的宁静。当男人的脸再次显现时,那种惨白与扭曲令她的嘴角扬起一抹满意的微笑。

“嗯,不错。”她低声自语,修长的手指轻轻拂过他的脸颊,像是在抚摸一件完美的作品。她将他的头发一缕一缕地理顺,擦拭掉脸上的血痕与汗水,细致得仿佛在照顾某个亲密的人。

一切整理完毕后,她站起身,垂眸看着面前的“画布”,眼中带着满足的光芒。然后,她俯下身,在他的额头上印下一个轻柔的吻,那冰冷的唇触碰到皮肤时,却透着深深的占有欲。

“再见了,你是最棒的作品。”她轻声说道,语调平静,却带着一种冰冷的绝情。

说完,她转身离去,高跟鞋踩在地板上发出“咔嗒、咔嗒”的声音。声音渐行渐远,消失在走廊的尽头,房间重新归于寂静。

留下的,是一具凝固的身体、一间空寂的房间,以及空气中弥散不去的死亡气息。
Tt
tttt85119
Re: Re: Re: Re: Re: 我的AI翻译程序,和一些感慨
仅镜像
白云酱Claubey
维多利亚
白云酱Claubey
维多利亚厉害,另外可以请教一下吗,可以用这个ai模型帮自己写小说吗?之前gpt有限制不让写
可以是可以,还是在这个Google AI Studio的网页上就行,你可以手动关掉审核
就是请教一下,我应该怎么手动关掉审核呢?
在右侧边栏里有一个advance settings, 点击打开这一栏然后有一个safety settings,点击他下面的edit,然后就可以把进去里面的都关掉调成block none
尝试过。哪怕关闭审核,打直球还是容易被ban。个人觉得智谱清言的尺度还蛮大的,就是文笔实在太垃圾,和小学生作文似的。