diff --git a/README.md b/README.md index 9445dea..ac654ef 100644 --- a/README.md +++ b/README.md @@ -184,17 +184,65 @@ async def main(): workflow.read_path("path/to/your/notes.txt") await workflow.translate_async() # 或者使用同步的方法 - workflow.translate() + # workflow.translate() # 5. 保存结果 workflow.save_as_txt(name="translated_notes.txt") - workflow.save_as_html(name="translated_notes.html") print("TXT 文件已保存。") # 也可以导出翻译后的纯文本 text = workflow.export_to_txt() +if __name__ == "__main__": + asyncio.run(main()) +``` + +### 示例 3: 翻译一个 json 文件 (使用 `JsonWorkflow`) + +这里以异步方式为例。其中JsonTranslatorConfig的json_paths项需要指明要翻译的json路径(满足jsonpath-ng语法规范),仅与json路径匹配的值会被翻译。 + +```python +import asyncio + +from docutranslate.exporter.js.json2html_exporter import Json2HTMLExporterConfig +from docutranslate.translator.ai_translator.json_translator import JsonTranslatorConfig +from docutranslate.workflow.json_workflow import JsonWorkflowConfig, JsonWorkflow + + +async def main(): + # 1. 构建翻译器配置 + translator_config = JsonTranslatorConfig( + base_url="https://api.openai.com/v1/", + api_key="YOUR_OPENAI_API_KEY", + model_id="gpt-4o", + to_lang="中文", + json_paths=["$.*","$.name"]#满足jsonpath-ng路径语法,匹配路径的值都会被翻译 + ) + + # 2. 构建主工作流配置 + workflow_config = JsonWorkflowConfig( + translator_config=translator_config, + html_exporter_config=Json2HTMLExporterConfig(cdn=True) + ) + + # 3. 实例化工作流 + workflow = JsonWorkflow(config=workflow_config) + + # 4. 读取文件并执行翻译 + workflow.read_path("path/to/your/notes.txt") + await workflow.translate_async() + # 或者使用同步的方法 + # workflow.translate() + + # 5. 保存结果 + workflow.save_as_json(name="translated_notes.json") + print("json文件已保存。") + + # 也可以导出翻译后的json文本 + text = workflow.export_to_json() + + if __name__ == "__main__": asyncio.run(main()) ``` diff --git a/docutranslate/agents/agent.py b/docutranslate/agents/agent.py index 237d8fb..fb11615 100644 --- a/docutranslate/agents/agent.py +++ b/docutranslate/agents/agent.py @@ -162,6 +162,7 @@ class Agent: ) -> list[str]: max_concurrent = self.max_concurrent if max_concurrent is None else max_concurrent total = len(prompts) + self.logger.info(f"收到{total}个片段,并发请求数:{max_concurrent}") count = 0 semaphore = asyncio.Semaphore(max_concurrent) tasks = [] @@ -231,6 +232,8 @@ class Agent: prompts: list[str], system_prompt: str | None = None, ) -> list[str]: + + self.logger.info(f"收到{len(prompts)}个片段,并发请求数:{self.max_concurrent}") system_prompts = [system_prompt] * len(prompts) counts = [PromptsCounter(len(prompts), self.logger)] * len(prompts) output_list = [] diff --git a/docutranslate/agents/segments_agent.py b/docutranslate/agents/segments_agent.py index 874ef2a..dbd8dd6 100644 --- a/docutranslate/agents/segments_agent.py +++ b/docutranslate/agents/segments_agent.py @@ -16,19 +16,21 @@ class JsonTranslateAgent(Agent): # 角色 你是一个专业的机器翻译引擎 # 工作 -翻译输入的json的值,保持键不改变 +你接收一个待翻译片段的序列,以json格式表示。其中键是待片段的编号,值是待翻译片段。 +你需要将待翻译片段翻译成目标语言。 目标语言:{config.to_lang} # 要求 翻译要求专业准确 不输出任何解释和注释 -如果已经是目标语言,则保持原样 +翻译后的片段应该与源格式尽量相同 +如果待翻译片段已经是目标语言,则保持原样 # 输出 -翻译后的json纯文本 +翻译后的片段序列,以json格式表示。其中键是片段编号,值是翻译后的片段 # 示例 ## 输入 -{r'{"1":"hello","2":"apple","3":true,"4":"false"}'} +{r'{"0":"hello","1":"apple","2":true,"3":"false"}'} ## 输出 -{r'{"1":"你好","2":"苹果","3":true,"4":"错误"}'} +{r'{"0":"你好","1":"苹果","2":true,"3":"错误"}'} """ if config.custom_prompt: self.system_prompt += "\n# 重要规则或背景【非常重要】\n" + config.custom_prompt + '\n' diff --git a/docutranslate/static/index.html b/docutranslate/static/index.html index b7a08ee..4dc6034 100644 --- a/docutranslate/static/index.html +++ b/docutranslate/static/index.html @@ -1 +1 @@ -
GitHub主页(欢迎star❤):
https://github.com/xunbu/docutranslate
交流QQ群: 1047781902
当前没有任务,点击“新建任务”开始吧!
等待提交...
点击或拖拽文件到此处
GitHub主页(欢迎star❤):
https://github.com/xunbu/docutranslate
交流QQ群: 1047781902
当前没有任务,点击“新建任务”开始吧!
等待提交...
点击或拖拽文件到此处