diff --git a/langchain/openai-translator/README-CN.md b/langchain/openai-translator/README-CN.md index b9fa6971..d1df4e93 100644 --- a/langchain/openai-translator/README-CN.md +++ b/langchain/openai-translator/README-CN.md @@ -1,62 +1,40 @@ # OpenAI-Translator -

-
English | 中文 -

-

- 所有的代码和文档完全由 OpenAI 的 GPT-4 模型生成 -

+## 简介 -## 介绍 +OpenAI Translator 是一个基于人工智能的翻译工具,旨在将英文PDF书籍翻译成中文。该工具利用了大型语言模型(LLMs)如ChatGLM以及OpenAI的GPT-3和GPT-3.5 Turbo进行翻译。它是用Python构建的,具有灵活、模块化和面向对象的设计。 -OpenAI 翻译器是一个使用 AI 技术将英文 PDF 书籍翻译成中文的工具。这个工具使用了大型语言模型 (LLMs),如 ChatGLM 和 OpenAI 的 GPT-3 以及 GPT-3.5 Turbo 来进行翻译。它是用 Python 构建的,并且具有灵活、模块化和面向对象的设计。 +## 为什么选择这个项目 +喜欢敲敲代码,顺便熟悉langchain +### 示例结果 -## 为什么做这个项目 +## 特点 -在现今的环境中,缺乏非商业而且有效的 PDF 翻译工具。很多用户有包含敏感数据的 PDF 文件,他们更倾向于不将其上传到公共商业服务网站,以保护隐私。这个项目就是为了解决这个问题,为需要翻译他们的 PDF 文件同时又要保护数据隐私的用户提供解决方案。 +- [X] 使用LLMs将PDF书籍翻译成Markdown。 +- [X] 支持[OpenAI](https://platform.openai.com/docs/models)模型。 +- [X] 通过YAML文件或Gradio构建界面进行灵活的配置。 +- [X] 强大的超时和错误处理功能,确保翻译操作的稳健性。 +- [X] 模块化和面向对象的设计,便于自定义和扩展。 +- [x] 添加对翻译风格的支持。 +- [X] 能够将图片插入到Markdown文件中。 -## 示例结果 +## 入门指南 -OpenAI 翻译器目前还处于早期开发阶段,我正在积极地添加更多功能和改进其性能。我们非常欢迎任何反馈或贡献! +### 环境设置 -![The_Old_Man_of_the_Sea](images/sample_image_0.png) +1. 克隆仓库 `https://github.com/ycAlex11/langchain-examples-.git`。 -

- "老人与海" -

+2. `OpenAI-Translator` 需要Python 3.10或更高版本。使用 `pip install -r requirements.txt` 安装依赖项。 -## 特性 +3. 设置你的OpenAI API密钥(`$OPENAI_API_KEY`)。你需要在config.yaml文件中指定它。 -- [X] 使用大型语言模型 (LLMs) 将英文 PDF 书籍翻译成中文。 -- [X] 支持 ChatGLM 和 OpenAI 模型。 -- [X] 通过 YAML 文件或命令行参数灵活配置。 -- [X] 对健壮的翻译操作进行超时和错误处理。 -- [X] 模块化和面向对象的设计,易于定制和扩展。 -- [x] 添加对其他语言和翻译方向的支持。 -- [ ] 实现图形用户界面 (GUI) 以便更易于使用。 -- [ ] 创建一个网络服务或 API,以便在网络应用中使用。 -- [ ] 添加对多个 PDF 文件的批处理支持。 -- [ ] 添加对保留源 PDF 的原始布局和格式的支持。 -- [ ] 通过使用自定义训练的翻译模型来提高翻译质量。 +### 使用方法 +你可以通过指定一个配置文件来使用OpenAI-Translator。 -## 开始使用 +#### 使用配置文件: -### 环境准备 - -1.克隆仓库 `git clone git@github.com:DjangoPeng/openai-translator.git`。 - -2.OpenAI-翻译器 需要 Python 3.10 或更高版本。使用 `pip install -r requirements.txt` 安装依赖项。 - -3.设置您的 OpenAI API 密钥(`$OPENAI_API_KEY`)。您可以将其添加到环境变量中,或者在 config.yaml 文件中指定。 - -### 使用示例 - -您可以通过指定配置文件或提供命令行参数来使用 OpenAI-Translator 工具。 - -#### 使用配置文件 - -根据您的设置调整 `config.yaml` 文件: +根据你的设置修改`config.yaml`文件: ```yaml model_name: "gpt-3.5-turbo" @@ -64,30 +42,12 @@ input_file: "tests/test.pdf" output_file_format: "markdown" source_language: "English" target_language: "Chinese" +api_key: "你的OpenAI API密钥" +style:"" ``` -然后命令行直接运行: +然后运行工具: ```bash python ai_translator/main.py -``` - -![sample_out](images/sample_image_1.png) - -#### 使用命令行参数 - -您也可以直接在命令行上指定设置。这是使用 OpenAI 模型的例子: - -```bash -# 将您的 api_key 设置为环境变量 -export OPENAI_API_KEY="sk-xxx" -python ai_translator/main.py --model_name "gpt-3.5-turbo" --input_file "your_input.pdf" --output_file_format "markdown" --source_language "English" --target_language "Chinese" -``` - -## 许可证 - -该项目采用 GPL-3.0 许可证。有关详细信息,请查看 [LICENSE](LICENSE) 文件。 - - - - +``` \ No newline at end of file diff --git a/langchain/openai-translator/README.md b/langchain/openai-translator/README.md index db73ec4d..24d9ccd2 100644 --- a/langchain/openai-translator/README.md +++ b/langchain/openai-translator/README.md @@ -1,59 +1,38 @@ # OpenAI-Translator -

-
English | 中文 -

-

- All the code and documentation are entirely generated by OpenAI's GPT-4 Model -

- - ## Introduction OpenAI Translator is an AI-powered translation tool designed to translate English PDF books to Chinese. The tool leverages large language models (LLMs) like ChatGLM and OpenAI's GPT-3 and GPT-3.5 Turbo for translation. It's built in Python and has a flexible, modular, and object-oriented design. ## Why this project - -In the current landscape, there's a lack of non-commercial yet efficient PDF translation tools. Many users have PDF documents with sensitive data that they prefer not to upload to public commercial service websites due to privacy concerns. This project was developed to address this gap, providing a solution for users who need to translate their PDFs while maintaining data privacy. +Langchain prac cause I like programming ### Sample Results -The OpenAI Translator is still in its early stages of development, and I'm actively working on adding more features and improving its performance. We appreciate any feedback or contributions! - -![The_Old_Man_of_the_Sea](images/sample_image_0.png) - -

- "The Old Man and the Sea" -

- ## Features -- [X] Translation of English PDF books to Chinese using LLMs. -- [X] Support for both [ChatGLM](https://github.com/THUDM/ChatGLM-6B) and [OpenAI](https://platform.openai.com/docs/models) models. -- [X] Flexible configuration through a YAML file or command-line arguments. +- [X] Translation PDF books to MarkDown by using LLMs. +- [X] Support for [OpenAI](https://platform.openai.com/docs/models) models. +- [X] Flexible configuration through a YAML file or gradios building UI. - [X] Timeouts and error handling for robust translation operations. - [X] Modular and object-oriented design for easy customization and extension. -- [x] Add support for other languages and translation directions. -- [ ] Implement a graphical user interface (GUI) for easier use. -- [ ] Create a web service or API to enable usage in web applications. -- [ ] Add support for batch processing of multiple PDF files. -- [ ] Add support for preserving the original layout and formatting of the source PDF. -- [ ] Improve translation quality by using custom-trained translation models. +- [x] Add support for translation styles. +- [X] able to add images into MarkDown file ## Getting Started ### Environment Setup -1.Clone the repository `git clone git@github.com:DjangoPeng/openai-translator.git`. +1.Clone the repository `https://github.com/ycAlex11/langchain-examples-.git`. 2.The `OpenAI-Translator` requires Python 3.10 or later. Install the dependencies with `pip install -r requirements.txt`. -3.Set up your OpenAI API key(`$OPENAI_API_KEY`). You can either add it to your environment variables or specify it in the config.yaml file. +3.Set up your OpenAI API key(`$OPENAI_API_KEY`). You have to specify it in the config.yaml file. ### Usage -You can use OpenAI-Translator either by specifying a configuration file or by providing command-line arguments. +You can use OpenAI-Translator either by specifying a configuration file . #### Using a configuration file: @@ -65,26 +44,12 @@ input_file: "tests/test.pdf" output_file_format: "markdown" source_language: "English" target_language: "Chinese" +api_key: "your OpenAI API key" +style:"" ``` Then run the tool: ```bash python ai_translator/main.py -``` - -![sample_out](images/sample_image_1.png) - -#### Using command-line arguments: - -You can also specify the settings directly on the command line. Here's an example of how to use the OpenAI model: - -```bash -# Set your api_key as an env variable -export OPENAI_API_KEY="sk-xxx" -python ai_translator/main.py --model_name "gpt-3.5-turbo" --input_file "your_input.pdf" --output_file_format "markdown" --source_language "English" --target_language "Chinese" -``` - -## License - -This project is licensed under the GPL-3.0 License. See the [LICENSE](LICENSE) file for details. \ No newline at end of file +``` \ No newline at end of file diff --git a/langchain/openai-translator/ai_translator/book/content.py b/langchain/openai-translator/ai_translator/book/content.py index 901c2a07..fce08780 100644 --- a/langchain/openai-translator/ai_translator/book/content.py +++ b/langchain/openai-translator/ai_translator/book/content.py @@ -71,15 +71,15 @@ def set_translation(self, translation, status): def __str__(self): return self.original.to_string(header=False, index=False) - def iter_items(self, translated=False): - target_df = self.translation if translated else self.original - for row_idx, row in target_df.iterrows(): - for col_idx, item in enumerate(row): - yield (row_idx, col_idx, item) + # def iter_items(self, translated=False): + # target_df = self.translation if translated else self.original + # for row_idx, row in target_df.iterrows(): + # for col_idx, item in enumerate(row): + # yield (row_idx, col_idx, item) - def update_item(self, row_idx, col_idx, new_value, translated=False): - target_df = self.translation if translated else self.original - target_df.at[row_idx, col_idx] = new_value + # def update_item(self, row_idx, col_idx, new_value, translated=False): + # target_df = self.translation if translated else self.original + # target_df.at[row_idx, col_idx] = new_value - def get_original_as_str(self): - return self.original.to_string(header=False, index=False) \ No newline at end of file + # def get_original_as_str(self): + # return self.original.to_string(header=False, index=False) \ No newline at end of file diff --git a/langchain/openai-translator/ai_translator/gradio_server.py b/langchain/openai-translator/ai_translator/gradio_server.py index 8f7d8569..f52f0ad3 100644 --- a/langchain/openai-translator/ai_translator/gradio_server.py +++ b/langchain/openai-translator/ai_translator/gradio_server.py @@ -8,11 +8,11 @@ from translator import PDFTranslator, TranslationConfig -def translation(input_file, source_language, target_language): - LOG.debug(f"[翻译任务]\n源文件: {input_file.name}\n源语言: {source_language}\n目标语言: {target_language}") - +def translation(input_file, source_language, target_language,style): + LOG.debug(f"[翻译任务]\n源文件: {input_file.name}\n源语言: {source_language}\n目标语言: {target_language}\n翻译风格: {style}") + output_file_path = Translator.translate_pdf( - input_file.name, source_language=source_language, target_language=target_language) + input_file.name, source_language=source_language, target_language=target_language,style = style) return output_file_path @@ -24,7 +24,8 @@ def launch_gradio(): inputs=[ gr.File(label="上传PDF文件"), gr.Textbox(label="源语言(默认:英文)", placeholder="English", value="English"), - gr.Textbox(label="目标语言(默认:中文)", placeholder="Chinese", value="Chinese") + gr.Textbox(label="目标语言(默认:中文)", placeholder="Chinese", value="Chinese"), + gr.Textbox(label="翻译风格(默认:中文)", placeholder="None", value=None), ], outputs=[ gr.File(label="下载翻译文件") @@ -44,7 +45,7 @@ def initialize_translator(): config.initialize(args) # 实例化 PDFTranslator 类,并调用 translate_pdf() 方法 global Translator - Translator = PDFTranslator(config.model_name) + Translator = PDFTranslator(config.model_name,config.api_key,config.style) if __name__ == "__main__": diff --git a/langchain/openai-translator/ai_translator/main.py b/langchain/openai-translator/ai_translator/main.py index 33ae7282..48380dff 100644 --- a/langchain/openai-translator/ai_translator/main.py +++ b/langchain/openai-translator/ai_translator/main.py @@ -14,7 +14,7 @@ # 初始化配置单例 config = TranslationConfig() config.initialize(args) - + #print(config.style) # 实例化 PDFTranslator 类,并调用 translate_pdf() 方法 - translator = PDFTranslator(config.model_name) - translator.translate_pdf(config.input_file, config.output_file_format, pages=None) + translator = PDFTranslator(config.model_name,config.api_key,config.style) + translator.translate_pdf(config.input_file, config.output_file_format, pages=None,style = config.style) diff --git a/langchain/openai-translator/ai_translator/translator/pdf_parser.py b/langchain/openai-translator/ai_translator/translator/pdf_parser.py index 6f2f9bc3..41ed4260 100644 --- a/langchain/openai-translator/ai_translator/translator/pdf_parser.py +++ b/langchain/openai-translator/ai_translator/translator/pdf_parser.py @@ -20,13 +20,14 @@ def parse_pdf(self, pdf_file_path: str, pages: Optional[int] = None) -> Book: pages_to_parse = pdf.pages else: pages_to_parse = pdf.pages[:pages] - + img_num = 1 for pdf_page in pages_to_parse: page = Page() # Store the original text content raw_text = pdf_page.extract_text() tables = pdf_page.extract_tables() + images_in_page = pdf_page.images # Remove each cell's content from the original text for table_data in tables: @@ -52,7 +53,20 @@ def parse_pdf(self, pdf_file_path: str, pages: Optional[int] = None) -> Book: table = TableContent(tables) page.add_content(table) LOG.debug(f"[table]\n{table}") - + + + if images_in_page: + page_height = pdf_page.height + for image in images_in_page: + image_bbox = (image['x0'], page_height - image['y1'], image['x1'], page_height - image['y0']) + cropped_page = pdf_page.crop(image_bbox) + image_obj = cropped_page.to_image(resolution=200) + #img_name = (pdf_file_path.replace('test.pdf', f'images/'))+str(img_num)+".jpg" + img_name = (pdf_file_path.replace('test.pdf', ''))+str(img_num)+".jpg" + #image_obj.save("tests/1.jpg") + image_obj.save(img_name) + page.contents.append(img_name) + img_num+=1 book.add_page(page) return book diff --git a/langchain/openai-translator/ai_translator/translator/pdf_translator.py b/langchain/openai-translator/ai_translator/translator/pdf_translator.py index 873dee77..842e4771 100644 --- a/langchain/openai-translator/ai_translator/translator/pdf_translator.py +++ b/langchain/openai-translator/ai_translator/translator/pdf_translator.py @@ -5,8 +5,8 @@ from utils import LOG class PDFTranslator: - def __init__(self, model_name: str): - self.translate_chain = TranslationChain(model_name) + def __init__(self, model_name: str,api_key:str,style:str): + self.translate_chain = TranslationChain(model_name,api_key,style) self.pdf_parser = PDFParser() self.writer = Writer() @@ -15,15 +15,16 @@ def translate_pdf(self, output_file_format: str = 'markdown', source_language: str = "English", target_language: str = 'Chinese', - pages: Optional[int] = None): - + pages: Optional[int] = None, + style: str = ''): self.book = self.pdf_parser.parse_pdf(input_file, pages) - for page_idx, page in enumerate(self.book.pages): for content_idx, content in enumerate(page.contents): - # Translate content.original - translation, status = self.translate_chain.run(content, source_language, target_language) - # Update the content in self.book.pages directly - self.book.pages[page_idx].contents[content_idx].set_translation(translation, status) + #图片的话就不用调langchain和chatgpt,只传文本和图表 + if not isinstance(content, str): + # Translate content.original + translation, status = self.translate_chain.run(content, source_language, target_language,style) + # Update the content in self.book.pages directly + self.book.pages[page_idx].contents[content_idx].set_translation(translation, status) return self.writer.save_translated_book(self.book, output_file_format) diff --git a/langchain/openai-translator/ai_translator/translator/translation_chain.py b/langchain/openai-translator/ai_translator/translator/translation_chain.py index bdab61a6..26d23f4c 100644 --- a/langchain/openai-translator/ai_translator/translator/translation_chain.py +++ b/langchain/openai-translator/ai_translator/translator/translation_chain.py @@ -10,15 +10,22 @@ from utils import LOG class TranslationChain: - def __init__(self, model_name: str = "gpt-3.5-turbo", verbose: bool = True): + def __init__(self, model_name: str = "gpt-3.5-turbo", api_key:str =" ",style:str="",verbose: bool = True): # 翻译任务指令始终由 System 角色承担 template = ( """You are a translation expert, proficient in various languages. \n - Translates {source_language} to {target_language}.""" + """ ) + if not style: + + template += "Translates {source_language} to {target_language}." + + else: + + template += "Translates {source_language} to {target_language} as {style}." + system_message_prompt = SystemMessagePromptTemplate.from_template(template) - # 待翻译文本由 Human 角色输入 human_template = "{text}" human_message_prompt = HumanMessagePromptTemplate.from_template(human_template) @@ -29,17 +36,18 @@ def __init__(self, model_name: str = "gpt-3.5-turbo", verbose: bool = True): ) # 为了翻译结果的稳定性,将 temperature 设置为 0 - chat = ChatOpenAI(model_name=model_name, temperature=0, verbose=verbose) + chat = ChatOpenAI(model_name=model_name,openai_api_key=api_key, temperature=0, verbose=verbose) self.chain = LLMChain(llm=chat, prompt=chat_prompt_template, verbose=verbose) - def run(self, text: str, source_language: str, target_language: str) -> (str, bool): + def run(self, text: str, source_language: str, target_language: str,style:str) -> (str, bool): result = "" try: result = self.chain.run({ "text": text, "source_language": source_language, "target_language": target_language, + "style": style, }) except Exception as e: LOG.error(f"An error occurred during translation: {e}") diff --git a/langchain/openai-translator/ai_translator/translator/writer.py b/langchain/openai-translator/ai_translator/translator/writer.py index 90b51ed5..c65d2c35 100644 --- a/langchain/openai-translator/ai_translator/translator/writer.py +++ b/langchain/openai-translator/ai_translator/translator/writer.py @@ -92,20 +92,26 @@ def _save_translated_book_markdown(self, book: Book, output_file_path: str = Non # Iterate over the pages and contents for page in book.pages: for content in page.contents: - if content.status: - if content.content_type == ContentType.TEXT: - # Add translated text to the Markdown file - text = content.translation - output_file.write(text + '\n\n') - - elif content.content_type == ContentType.TABLE: - # Add table to the Markdown file - table = content.translation - header = '| ' + ' | '.join(str(column) for column in table.columns) + ' |' + '\n' - separator = '| ' + ' | '.join(['---'] * len(table.columns)) + ' |' + '\n' - # body = '\n'.join(['| ' + ' | '.join(row) + ' |' for row in table.values.tolist()]) + '\n\n' - body = '\n'.join(['| ' + ' | '.join(str(cell) for cell in row) + ' |' for row in table.values.tolist()]) + '\n\n' - output_file.write(header + separator + body) + + if isinstance(content, str): + markdown_image_syntax = f"![images]({content})" + #print('here',markdown_image_syntax) + output_file.write(markdown_image_syntax + "\n") + else: + if content.status: + if content.content_type == ContentType.TEXT: + # Add translated text to the Markdown file + text = content.translation + output_file.write(text + '\n\n') + + elif content.content_type == ContentType.TABLE: + # Add table to the Markdown file + table = content.translation + header = '| ' + ' | '.join(str(column) for column in table.columns) + ' |' + '\n' + separator = '| ' + ' | '.join(['---'] * len(table.columns)) + ' |' + '\n' + # body = '\n'.join(['| ' + ' | '.join(row) + ' |' for row in table.values.tolist()]) + '\n\n' + body = '\n'.join(['| ' + ' | '.join(str(cell) for cell in row) + ' |' for row in table.values.tolist()]) + '\n\n' + output_file.write(header + separator + body) # Add a page break (horizontal rule) after each page except the last one if page != book.pages[-1]: diff --git a/langchain/openai-translator/ai_translator/utils/argument_parser.py b/langchain/openai-translator/ai_translator/utils/argument_parser.py index 57684d86..5f79f3f8 100644 --- a/langchain/openai-translator/ai_translator/utils/argument_parser.py +++ b/langchain/openai-translator/ai_translator/utils/argument_parser.py @@ -9,6 +9,8 @@ def __init__(self): self.parser.add_argument('--output_file_format', type=str, help='The file format of translated book. Now supporting PDF and Markdown') self.parser.add_argument('--source_language', type=str, help='The language of the original book to be translated.') self.parser.add_argument('--target_language', type=str, help='The target language for translating the original book.') + self.parser.add_argument('--openai_api_key', type=str, help='The API key for OpenAIModel. Required if model_type is "OpenAIModel".') + self.parser.add_argument('--style',type=str, help='Type a writing style you like to be translated/None ') def parse_arguments(self): args = self.parser.parse_args() diff --git a/langchain/openai-translator/ai_translator/utils/logger.py b/langchain/openai-translator/ai_translator/utils/logger.py index a252b50e..a6bf225d 100644 --- a/langchain/openai-translator/ai_translator/utils/logger.py +++ b/langchain/openai-translator/ai_translator/utils/logger.py @@ -21,7 +21,7 @@ def __init__(self, name="translation", log_dir="logs", debug=False): logger.add(log_file_path, rotation=ROTATION_TIME, level="DEBUG") self.logger = logger -LOG = Logger(debug=True).logger +LOG = Logger(debug=False).logger if __name__ == "__main__": log = Logger().logger diff --git a/langchain/openai-translator/config.yaml b/langchain/openai-translator/config.yaml index 3ff6f1ec..3d77a781 100644 --- a/langchain/openai-translator/config.yaml +++ b/langchain/openai-translator/config.yaml @@ -2,4 +2,6 @@ model_name: "gpt-3.5-turbo" input_file: "tests/test.pdf" output_file_format: "markdown" source_language: "English" -target_language: "Chinese" \ No newline at end of file +target_language: "Chinese" +api_key: "ur key" +style: "" \ No newline at end of file diff --git a/langchain/openai-translator/jupyter/translation_chain.ipynb b/langchain/openai-translator/jupyter/translation_chain.ipynb index c405ab58..ca0f8be4 100644 --- a/langchain/openai-translator/jupyter/translation_chain.ipynb +++ b/langchain/openai-translator/jupyter/translation_chain.ipynb @@ -117,7 +117,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 7, "id": "596d74c4-0fa5-4308-9920-c8002a3ee0c7", "metadata": {}, "outputs": [ @@ -135,7 +135,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 8, "id": "d2a8fddd-31d7-493f-94a1-4c1ec4608de6", "metadata": {}, "outputs": [], @@ -147,7 +147,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 9, "id": "8922d062-00a9-48dd-b1e2-ed2d2f61a9ad", "metadata": {}, "outputs": [ @@ -236,7 +236,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 10, "id": "b5cf9238-9497-46c3-961f-860e797fcece", "metadata": {}, "outputs": [ @@ -246,7 +246,7 @@ "ChatPromptValue(messages=[SystemMessage(content='You are a translation expert, proficient in various languages. \\n\\n Translates English to Chinese.', additional_kwargs={}), HumanMessage(content='I love programming.', additional_kwargs={}, example=False)])" ] }, - "execution_count": 7, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -266,7 +266,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 11, "id": "a21508c5-4b13-4d0e-aa67-c56d554d2626", "metadata": {}, "outputs": [], @@ -277,7 +277,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 12, "id": "a158a289-e738-45e8-b440-3f857a708e57", "metadata": {}, "outputs": [ @@ -288,7 +288,7 @@ " HumanMessage(content='I love programming.', additional_kwargs={}, example=False)]" ] }, - "execution_count": 9, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -307,7 +307,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 13, "id": "5d4e3bd9-fac3-4b67-9285-74e1793f9e74", "metadata": {}, "outputs": [], @@ -315,12 +315,12 @@ "from langchain.chat_models import ChatOpenAI\n", "\n", "# 为了翻译结果的稳定性,将 temperature 设置为 0\n", - "translation_model = ChatOpenAI(model_name=\"gpt-3.5-turbo\", temperature=0)" + "translation_model = ChatOpenAI(model_name=\"gpt-3.5-turbo\", temperature=0,openai_api_key='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')" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 14, "id": "c46d710c-9892-4ce2-8dcf-c3450dae8d83", "metadata": {}, "outputs": [], @@ -330,7 +330,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 15, "id": "63d7cadf-515a-41cd-82d7-1498a3d6a35f", "metadata": {}, "outputs": [ @@ -340,7 +340,7 @@ "AIMessage(content='我喜欢编程。', additional_kwargs={}, example=False)" ] }, - "execution_count": 12, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -351,7 +351,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 16, "id": "d56c7a65-bc6c-4e19-8176-ddc457696d0b", "metadata": {}, "outputs": [ @@ -378,7 +378,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 17, "id": "4a57ee8c-dad1-429c-a791-2797a7b0c4ef", "metadata": {}, "outputs": [], @@ -391,7 +391,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 18, "id": "723cebfa-a3bd-434f-9992-9ec25833acdf", "metadata": {}, "outputs": [], @@ -402,7 +402,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 19, "id": "21e1d186-88de-4ca8-ad32-c233d99145c4", "metadata": {}, "outputs": [ @@ -420,7 +420,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 20, "id": "faddd232-0308-45ce-b2a6-899f261abe57", "metadata": {}, "outputs": [ @@ -430,7 +430,7 @@ "'我喜欢人工智能和大型语言模型。'" ] }, - "execution_count": 25, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -441,7 +441,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 21, "id": "4f3dcb51-7e3f-4787-84aa-60f45def661e", "metadata": {}, "outputs": [ @@ -451,7 +451,7 @@ "'[水果, 颜色, 价格(美元)] [苹果, 红色, 1.20] [香蕉, 黄色, 0.50] [橙子, 橙色, 0.80] [草莓, 红色, 2.50] [蓝莓, 蓝色, 3.00] [猕猴桃, 绿色, 1.00] [芒果, 橙色, 1.50] [葡萄, 紫色, 2.00]'" ] }, - "execution_count": 18, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -470,7 +470,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 22, "id": "bb9b37f6-4bcb-450c-b3c6-e476a8f15bc7", "metadata": {}, "outputs": [], @@ -485,7 +485,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 23, "id": "2fccc32f-2b3f-4666-82be-607c452893b7", "metadata": {}, "outputs": [], @@ -497,7 +497,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 24, "id": "fd937e81-c54f-49d9-9422-c43670d8e5db", "metadata": {}, "outputs": [], @@ -510,7 +510,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 25, "id": "ab237375-59ab-40ac-986b-7254989b3418", "metadata": {}, "outputs": [], @@ -520,7 +520,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 26, "id": "e728621c-008e-4c2b-bb57-483f1ee4c1e8", "metadata": {}, "outputs": [ @@ -530,7 +530,7 @@ "'I enjoy studying large language models, as it is easy, simple, and enjoyable.'" ] }, - "execution_count": 23, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -545,7 +545,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 27, "id": "183455b3-9cf1-42b4-be91-9c699248266a", "metadata": {}, "outputs": [ @@ -555,7 +555,7 @@ "'私は大規模言語モデルの学習が好きです。それは簡単で楽しいです。'" ] }, - "execution_count": 24, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -603,7 +603,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/langchain/openai-translator/tests/1.jpg b/langchain/openai-translator/tests/1.jpg new file mode 100644 index 00000000..ef197d85 Binary files /dev/null and b/langchain/openai-translator/tests/1.jpg differ diff --git a/langchain/openai-translator/tests/test_translated.md b/langchain/openai-translator/tests/test_translated.md index 6c230b26..da558901 100644 --- a/langchain/openai-translator/tests/test_translated.md +++ b/langchain/openai-translator/tests/test_translated.md @@ -1,8 +1,8 @@ 测试数据 这个数据集包含了由OpenAI的AI语言模型ChatGPT提供的两个测试样本。 -这些样本包括一个Markdown表格和一个英文文本段落,可以用来测试支持文本和表格格式的英译中翻译软件。 +这些样本包括一个Markdown表格和一个英文文本段落,可用于测试支持文本和表格格式的英译中翻译软件。 文本测试 -快速的棕色狐狸跳过懒狗。这个句子包含了英语字母表中的每个字母至少一次。句子是经常用来测试字体、键盘和其他与文本相关的工具的。除了英语,其他许多语言也有句子。由于语言的独特特点,有些句子更难构造。 +快速的棕色狐狸跳过懒狗。这个句子包含了英语字母表中的每个字母至少一次。句子是经常用来测试字体、键盘和其他与文本相关的工具的。除了英语,还有很多其他语言的句子。由于语言的独特特点,有些句子更难构造。 | 水果 | 颜色 | 价格(美元) | | --- | --- | --- | @@ -17,3 +17,4 @@ --- +![images](tests/1.jpg) diff --git a/selected_homework/README.md b/selected_homework/README.md index 1cc8fd99..42926879 100644 --- a/selected_homework/README.md +++ b/selected_homework/README.md @@ -9,4 +9,4 @@ | Hugh | OpenAI-Translator 2.0 | 1.基于 Antd 的图形化界面
2.以 API 形式提供翻译服务支持
3.对多种语言的支持 | [ Github - 后端API](https://github.com/Hughdw/openai-quickstart/blob/ai_translator_extend/openai-translator/ai_translator/app.py)
[Github - 前端图形化界面](https://github.com/Hughdw/openai-quickstart/tree/ai_translator_extend/openai-translator/webapp/web)| | Hugh | OpenAI-Translator 风格化翻译 | 在 Gradio 图形化界面基础上,支持风格化翻译 | [GitHub Repo](https://github.com/Hughdw/openai-quickstart/blob/openai_translator_gradio_style_extend/langchain/openai-translator/ai_translator/gradio_server_by_blocks.py) | | Hugh | 销售机器人多场景切换 | 生成多场景的向量数据,通过 Gradio 的 Radio 组件切换场景 | [GitHub Repo](https://github.com/Hughdw/openai-quickstart/blob/openai_translator_gradio_style_extend/langchain/sales_chatbot/chatbot.py) | - +|李岩 | OpenAI-Translator 优化版 | 1.在 Gradio 图形化界面基础上,支持风格化翻译。2.添加了插入图片到md文件的功能 | [GitHub Repo](https://github.com/ycAlex11/openai-quickstart/tree/main/langchain/openai-translator) | \ No newline at end of file