bilingual_book_maker 是一个使用 ChatGPT 帮助用户创建 epub/txt 文件和书籍多语言版本的 AI 翻译工具。
项目描述
中文 | English
bilingual_book_maker
bilingual_book_maker 是一个使用 ChatGPT 帮助用户创建 epub/txt/srt 文件和书籍多语言版本的 AI 翻译工具。此工具专门用于翻译已进入公共领域的 epub 书籍,不适用于受版权保护的作品。在开始使用此工具之前,请查阅项目的 免责声明。
支持的模型
gpt-4, gpt-3.5-turbo, claude-2, palm, llama-2, azure-openai, command-nightly, gemini。对于使用非 OpenAI 模型,请使用类 liteLLM()
- liteLLM 支持上述所有模型。有关使用 liteLLM 的更多信息,请参阅此处:https://github.com/BerriAI/litellm/blob/main/setup.py
准备工作
- ChatGPT 或 OpenAI 令牌 ^令牌
- epub/txt 书籍
- 具有互联网访问权限或代理的环境
- Python 3.8+
使用
pip install -r requirements.txt
或pip install -U bbook_maker
(可选)- 使用
--openai_key
选项指定 OpenAI API 密钥。如果您有多个密钥,请用逗号(xxx,xxx,xxx)分隔以减少由 API 调用限制引起的错误。或者,也可以设置环境变量BBM_OPENAI_API_KEY
。 - 提供了一个用于测试的示例书籍,
test_books/animal_farm.epub
。 - 默认的底层模型是 GPT-3.5-turbo,目前ChatGPT正在使用它。使用
--model gpt4
将底层模型更改为GPT4
。您还可以使用GPT4omini
。- 需要注意的是,
gpt-4
比较贵,但为了避免遇到速率限制,我们自动平衡在gpt-4-1106-preview
、gpt-4
、gpt-4-32k
、gpt-4-0613
、gpt-4-32k-0613
之间的查询。- 如果您想使用OpenAI的特定模型别名(例如
gpt-4-1106-preview
或gpt-3.5-turbo-0125
),可以使用--model openai --model_list gpt-4-1106-preview,gpt-3.5-turbo-0125
。--model_list
接受用逗号分隔的模型别名列表。
- 如果您想使用OpenAI的特定模型别名(例如
- 如果使用ChatGPTapi,您可以为每个发送给模型的段落添加一个上下文段落,使用
--use_context
(见下文)。
- 需要注意的是,
- 支持DeepL模型 DeepL Translator 需要付费获取token,使用
--model deepl --deepl_key ${deepl_key}
- 支持DeepL免费模型
--model deeplfree
- 支持Google Gemini 模型
--model gemini --gemini_key ${gemini_key}
- 支持 Claude 模型,使用
--model claude --claude_key ${claude_key}
- 支持 Tencent TranSmart 模型(免费),使用
--model tencentransmart
- 支持 Ollama 自托管模型,使用
--ollama_model ${ollama_model_name}
- 如果Ollama服务器不在localhost上运行,使用
--api_base http://x.x.x.x:port/v1
指向Ollama服务器地址
- 如果Ollama服务器不在localhost上运行,使用
- 使用
--test
选项预览结果(如果您尚未支付服务费)。注意,有限制,可能需要一些时间。 - 设置目标语言,例如
--language "Simplified Chinese"
。默认目标语言是"Simplified Chinese"
。通过辅助信息读取可用语言:python make_book.py --help
- 使用
--proxy
选项指定用于互联网访问的代理服务器。输入类似http://127.0.0.1:7890
的字符串。 - 使用
--resume
选项在中断后手动恢复过程。 - epub由html文件组成。默认情况下,我们只翻译
<p>
中的内容。使用--translate-tags
指定需要翻译的标签。用逗号分隔多个标签。例如:--translate-tags h1,h2,h3,p,div
- 使用
--book_from
选项指定电子书阅读器类型(目前只有kobo
可用),并使用--device_path
指定挂载点。 - 如果您想更改api_base,例如使用Cloudflare Workers,使用
--api_base <URL>
支持它。注意:API URL应为'https://xxxx/v1
'。引号是必需的。 - 翻译完成后,将生成一个双语书名为
${book_name}_bilingual.epub
。 - 如果出现错误或您想通过按
CTRL+C
中断翻译,将生成一个名为${book_name}_bilingual_temp.epub
的书。您可以简单地将其重命名为任何想要的名称。 - 如果您想翻译未标记的标签的电子书中的字符串,可以使用
--allow_navigable_strings
参数。这将把字符串添加到翻译队列中。注意:如果可能,最好寻找更标准化的电子书。 - 要调整提示,请使用
--prompt
参数。对于user
角色模板,有效的占位符包括{text}
和{language}
。它支持几种配置提示的方式:如果您不需要设置system
角色内容,可以简单地设置如下:--prompt "将{text}翻译成{language}."
或--prompt prompt_template_sample.txt
(示例文本文件可在./prompt_template_sample.txt找到)。如果您需要设置system
角色内容,可以使用以下格式:--prompt '{"user":"将{text}翻译成{language}", "system": "你是一名专业翻译。"}'
或--prompt prompt_template_sample.json
(示例JSON文件可在./prompt_template_sample.json找到)。您还可以通过设置环境变量来设置user
和system
角色提示:BBM_CHATGPTAPI_USER_MSG_TEMPLATE
和BBM_CHATGPTAPI_SYS_MSG
。 - 使用
--batch_size
参数指定批量翻译的行数(默认为10,目前仅对txt文件有效)。 --accumulated_num
在开始翻译前等待积累多少个token。gpt3.5限制总token数为4090。例如,如果您使用--accumulated_num 1600
,那么openai可能会输出2200个token,其他系统消息和用户消息可能为200个token,1600+2200+200=4000,所以您接近了限制。您必须自己选择数值,在发送之前无法知道是否达到了限制。--use_context
提示模型创建一个三段总结。如果是翻译的开始,它将总结整个发送的段落(大小取决于--accumulated_num
)。对于后续段落,它将修正总结以包括最新段落的详细信息,创建一个包含整个翻译作品重要细节的运行段落。这可以提高翻译的流畅性和一致性。此选项适用于所有ChatGPT兼容模型。- 使用
--context_paragraph_limit
在使用--use_context
选项时设置上下文段落数量的限制。 - 使用
--temperature
设置ChatGPTapi
/gpt4
/claude
模型的温度参数。例如:--temperature 0.7
。 - 使用
--block_size
将多个段落合并为一个块。这可能提高准确性并加快处理速度,但可能会干扰原始格式。必须与--single_translate
一起使用。例如:--block_size 5
。 - 使用
--single_translate
仅输出翻译后的书籍,而不创建双语版本。 --translation_style
示例:--translation_style "color: #808080; font-style: italic;"
--retranslate
--retranslate "$translated_filepath" "file_name_in_epub" "start_str" "end_str"(可选)
从start_str到end_str的标签重新翻译:python3 "make_book.py" --book_name "test_books/animal_farm.epub" --retranslate 'test_books/animal_farm_bilingual.epub' 'index_split_002.html' '尽管目前书籍短缺' '这种事情不是一个好兆头。显然'
重新翻译start_str的标签:python3 "make_book.py" --book_name "test_books/animal_farm.epub" --retranslate 'test_books/animal_farm_bilingual.epub' 'index_split_002.html' '尽管目前书籍短缺'
示例
注意,如果使用pip install bbook_maker
,所有命令都可以更改为bbook_maker args
# Test quickly
python3 make_book.py --book_name test_books/animal_farm.epub --openai_key ${openai_key} --test --language zh-hans
# Test quickly for src
python3 make_book.py --book_name test_books/Lex_Fridman_episode_322.srt --openai_key ${openai_key} --test
# Or translate the whole book
python3 make_book.py --book_name test_books/animal_farm.epub --openai_key ${openai_key} --language zh-hans
# Or translate the whole book using Gemini
python3 make_book.py --book_name test_books/animal_farm.epub --gemini_key ${gemini_key} --model gemini
# Set env OPENAI_API_KEY to ignore option --openai_key
export OPENAI_API_KEY=${your_api_key}
# Use the GPT-4 model with context to Japanese
python3 make_book.py --book_name test_books/animal_farm.epub --model gpt4 --use_context --language ja
# Use a specific OpenAI model alias
python3 make_book.py --book_name test_books/animal_farm.epub --model openai --model_list gpt-4-1106-preview --openai_key ${openai_key}
**Note** you can use other `openai like` model in this way
python3 make_book.py --book_name test_books/animal_farm.epub --model openai --model_list yi-34b-chat-0205 --openai_key ${openai_key} --api_base "https://api.lingyiwanwu.com/v1"
# Use a specific list of OpenAI model aliases
python3 make_book.py --book_name test_books/animal_farm.epub --model openai --model_list gpt-4-1106-preview,gpt-4-0125-preview,gpt-3.5-turbo-0125 --openai_key ${openai_key}
# Use the DeepL model with Japanese
python3 make_book.py --book_name test_books/animal_farm.epub --model deepl --deepl_key ${deepl_key} --language ja
# Use the Claude model with Japanese
python3 make_book.py --book_name test_books/animal_farm.epub --model claude --claude_key ${claude_key} --language ja
# Use the CustomAPI model with Japanese
python3 make_book.py --book_name test_books/animal_farm.epub --model customapi --custom_api ${custom_api} --language ja
# Translate contents in <div> and <p>
python3 make_book.py --book_name test_books/animal_farm.epub --translate-tags div,p
# Tweaking the prompt
python3 make_book.py --book_name test_books/animal_farm.epub --prompt prompt_template_sample.txt
# or
python3 make_book.py --book_name test_books/animal_farm.epub --prompt prompt_template_sample.json
# or
python3 make_book.py --book_name test_books/animal_farm.epub --prompt "Please translate \`{text}\` to {language}"
# Translate books download from Rakuten Kobo on kobo e-reader
python3 make_book.py --book_from kobo --device_path /tmp/kobo
# translate txt file
python3 make_book.py --book_name test_books/the_little_prince.txt --test --language zh-hans
# aggregated translation txt file
python3 make_book.py --book_name test_books/the_little_prince.txt --test --batch_size 20
# Using Caiyun model to translate
# (the api currently only support: simplified chinese <-> english, simplified chinese <-> japanese)
# the official Caiyun has provided a test token (3975l6lr5pcbvidl6jl2)
# you can apply your own token by following this tutorial(https://bobtranslate.com/service/translate/caiyun.html)
python3 make_book.py --model caiyun --caiyun_key 3975l6lr5pcbvidl6jl2 --book_name test_books/animal_farm.epub
# Set env BBM_CAIYUN_API_KEY to ignore option --openai_key
export BBM_CAIYUN_API_KEY=${your_api_key}
更易懂的示例
python3 make_book.py --book_name 'animal_farm.epub' --openai_key sk-XXXXX --api_base 'https://xxxxx/v1'
# Or python3 is not in your PATH
python make_book.py --book_name 'animal_farm.epub' --openai_key sk-XXXXX --api_base 'https://xxxxx/v1'
Microsoft Azure Endpoints
python3 make_book.py --book_name 'animal_farm.epub' --openai_key XXXXX --api_base 'https://example-endpoint.openai.azure.com' --deployment_id 'deployment-name'
# Or python3 is not in your PATH
python make_book.py --book_name 'animal_farm.epub' --openai_key XXXXX --api_base 'https://example-endpoint.openai.azure.com' --deployment_id 'deployment-name'
Docker
如果您不想处理环境设置,可以使用Docker。
# Build image
docker build --tag bilingual_book_maker .
# Run container
# "$folder_path" represents the folder where your book file locates. Also, it is where the processed file will be stored.
# Windows PowerShell
$folder_path=your_folder_path # $folder_path="C:\Users\user\mybook\"
$book_name=your_book_name # $book_name="animal_farm.epub"
$openai_key=your_api_key # $openai_key="sk-xxx"
$language=your_language # see utils.py
docker run --rm --name bilingual_book_maker --mount type=bind,source=$folder_path,target='/app/test_books' bilingual_book_maker --book_name "/app/test_books/$book_name" --openai_key $openai_key --language $language
# Linux
export folder_path=${your_folder_path}
export book_name=${your_book_name}
export openai_key=${your_api_key}
export language=${your_language}
docker run --rm --name bilingual_book_maker --mount type=bind,source=${folder_path},target='/app/test_books' bilingual_book_maker --book_name "/app/test_books/${book_name}" --openai_key ${openai_key} --language "${language}"
例如
# Linux
docker run --rm --name bilingual_book_maker --mount type=bind,source=/home/user/my_books,target='/app/test_books' bilingual_book_maker --book_name /app/test_books/animal_farm.epub --openai_key sk-XXX --test --test_num 1 --language zh-hant
注意
- 免费试用版的API令牌有限。如果您想加快处理速度,考虑付费使用服务或使用多个OpenAI令牌。
- 欢迎提交PR
谢谢
贡献
- 欢迎任何问题或PR。
- 问题中的TODO也可以选择。
- 在提交代码前,请运行
black make_book.py
^black。
其他人更好
- 书译 iOS -> AI 全书翻译工具
感谢
谢谢,已经足够了。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
bbook_maker-0.9.6.tar.gz (45.7 kB 查看散列值)
构建分布
bbook_maker-0.9.6-py3-none-any.whl (51.0 kB 查看散列值)