当前位置: 首页 > news >正文

OpenAI-Translator 实战总结

最近在极客时间学习《AI 大模型应用开发实战营》,自己一边跟着学一边开发了一个进阶版本的 OpenAI-Translator,在这里简单记录下开发过程和心得体会,供有兴趣的同学参考

  • 功能概览

    • 通过openai的chat API,实现一个pdf翻译器
    • 实现一个web GUI,可以上传pdf文件,然后翻译成目标语言的pdf文件
    • 实现了一个openai的plugin,pdf翻译器
  • 系统概述

    PDF Translator
    Load
    Prompt
    Response
    Save
    Parsed Content
    Model
    PDF Parser
    Writer
    PDF File
    ChatGPT
    Translated PDF File
    • PDF Parser
      • 通过pdfminer.six库,解析pdf文件,得到pdf的内容
      • 通过解析pdf的内容,得到pdf的图片,表格,文本等内容
    • Model
      • 通过prompt的方式,把pdf的内容转化为目标语言
    • Writer
      • 把翻译后的内容,写入到pdf 或者markdown文件中
  • Prompt 优化过程

    • 第一次尝试

      • 为了支持其他语言的翻译,在prompt里把目标语言设置为变量 {target_language}
      [{"role": "system","content": "For the input text, translate it into {target_language} as native speaker"
      },
      {"role": "user","content": "“Santiago,” the boy said.\n"
      }]
      
      • 问题
        • 表格格式没有保留
        • 翻译不准确,表现是没有把user 的content内容翻译成目标语言
    • 优化Prompt里system的描述

      • 增加格式化输出的描述 output each of these data in json format,方便代码后续解析
      • 增加prompt,让模型知道需要翻译的内容所属语言是什么 Identify the language of input text
      [{"role": "system","content": "From the input text, output each of these data in json format:\n\n1. (language) Identify the language of input text \n2. (translation) Translate to Chinese as a native speaker and keep the original character format of the text unchanged\n3. (translation_language) The language translated from the input text"
      },
      {"role": "user","content": "“Santiago,” the boy said.\n"
      } ]
      
      • 问题
        • 偶尔翻译不准确,表现是没有把user 的content内容翻译成目标语言
    • 再次优化Prompt,增加黑魔法,think step by step

      • 翻译text的prompt
         [{"role": "system","content": f"You act as a language expert, do a language translation job, here are the steps:\n\n"f"1. (language) Identify the language of input text \n"f"2. (translation) Translate the input text to {target_language} as a native speaker \n"f"3. (output) output the language and translation in json format\n"},{"role": "user","content": f"“Santiago,” the boy said.\n"}]
      
      • 翻译table的prompt
        • 加注:保持表格的原有格式与标点符号 format and maintain spacing (spaces, separators), and return in tabular form
           [{"role": "system","content": f"From the input text, do a language translation job, here are the steps:\n\n"f"1. (language) Identify the language of input text \n"f"2. (translation) Translate the input text to {target_language} as a native speaker, format and maintain spacing (spaces, separators), and return in tabular form\n"f"3. (output) output the language and translation in json format"},{"role": "user","content": f"{table content}"}]
      
  • 代码结构

    • 重构content
      Content
      set_translation
      ImageContent
      set_translation
      TextContent
      set_translation
    • 重构parser
      PageParser
      parse
      PageImageParser
      parse
      PageTableParser
      parse
      PageTextParser
      parse
    • 重构writer
      Writer
      save
      PDFWriter
      save
      MarkdownWriter
      save
  • PDF格式

    • 为了保持PDF文档内容结构,需要保留原文档的空格,换行,分隔符等
    • 分段策略
      • 以空行为分段标志
    • 翻译后的文档,保持原文档的空格,换行,分隔符等
    • 示例:老人与海的pdf文档
      在这里插入图片描述
  • 图形用户界面GUI 设计

    • 设计以及代码由 gpt4 生成
    • 如下是使用的prompt
      • 对一个翻译pdf功能的服务器设计一个GUI
      • 请用python实现一下
      • 请用 HTML、CSS 和 JavaScript 实现一个你上文提到的UI
      • 请增加这些功能显示文件上传和翻译进度、选择源语言和目标语言、处理文件上传大小的限制
      • 对于代码的错误,交给gpt4,让它来修复代码中的问题
    • 详见 chatGPT share
    • Web GUI效果图
      在这里插入图片描述
  • plugin开发

    • openapi文档的生成,通过gpt4生成
      • 通过把路由代码,交给gpt,然后让它生成对应的openapi文档,然后对应着plugin 官方文档修正下,就可以了
openapi: 3.0.1info:title: PDF Translatordescription: A Plugin that allows the user to translate the PDF to any language they want.version: 'v1'servers:- url: http://localhost:8080paths:/translate:post:operationId: translatePDFsummary: Translate the content of PDF file to target languageparameters:- content:multipart/form-data:schema:type: objectproperties:file:type: stringformat: binarydescription: The PDF file that should be translated todst_lang:type: stringdescription: The language and should be translated to, e.g. Chinese.responses:"200":description: OKcontent:application/json:schema:$ref: '#/components/schemas/translatePDF''400':description: Bad Requestcontent:text/plain:schema:type: string'500':description: Internal Server Errorcomponents:schemas:translatePDF:type: stringproperties:weather:type: stringformat: binarydescription: The content of PDF file that has been translated
  • 收获和总结

    • openai API的使用 chat API调用,以及各个参数的含义
    • openai playground的使用,调试prompt很好用的工具
    • prompt的使用以及优化,这一点需要在实际的案例中加强训练
    • 熟悉了openai plugin开发步骤以及流程
  • Github Code

相关文章:

OpenAI-Translator 实战总结

最近在极客时间学习《AI 大模型应用开发实战营》,自己一边跟着学一边开发了一个进阶版本的 OpenAI-Translator,在这里简单记录下开发过程和心得体会,供有兴趣的同学参考 功能概览 通过openai的chat API,实现一个pdf翻译器实现一个…...

【工业机器人】用于轨迹规划和执行器分析的机械手和移动机器人模型(MatlabSimulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

开源在线文档服务OnlyOffice

开源在线文档服务OnlyOffice应用启动与示例运行 - 掘金 ONLYOFFICE API 文档 - Example - IDEA运行Java示例 | ONLYOFFICE中文网 NEXTCLOUDonlyoffice的搭建和使用_nextcloud onlyoffice_莫冲的博客-CSDN博客 OnlyOffice java 部署使用,文件流方式 预览文件 | 言曌博…...

汽车基本常识

目录 电源KL30KL15 零部件简称 电源 KL30 KL15 零部件简称 VCU:整车控制器 直接网络管理节点 CDU:充电系统控制器 MCU:电机控制器 TCU:变速箱控制器 ABS:防抱死系统 EPS:助力转向 T-Box:远程…...

百度资深PMO阚洁受邀为第十二届中国PMO大会演讲嘉宾

百度在线网络技术(北京)有限公司资深PMO阚洁女士受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾,演讲议题:运筹于股掌之间,决胜于千里之外 —— 360斡旋项目干系人。大会将于8月12-13日在北京举办,…...

为什么C++有多种整型?

C中有多种整型是为了满足不同的需求,提供更灵活和高效的整数表示方式。不同的整型具有不同的字节大小、范围和精度,可以根据应用的需求选择合适的整型类型。以下是一些原因解释为什么C有多种整型: 内存和性能优化:不同的整型在内存…...

玩一玩通义千问Qwen开源版,Win11 RTX3060本地安装记录!

大概在两天前,阿里做了一件大事儿。 就是开源了一个低配版的通义千问模型--通义千问-7B-Chat。 这应该是国内第一个大厂开源的大语言模型吧。 虽然是低配版,但是在各类测试里面都非常能打。 官方介绍: Qwen-7B是基于Transformer的大语言模…...

oracle积累增量和差异增量

积累增量和差异增量: 对于 RMAN 来说,积累增量备份和差异增量备份都是增量备份的一种形式,它们之间的区别在于备份的范围和备份集的方式。 积累增量备份:在进行积累增量备份时,RMAN 会备份自最后一次完全备份或增量备…...

利用C++nlohmann库解析json文件

json文件示例&#xff1a; 代码运行环境VS2019 一、git下载nlohmann库文件源代码 源代码文件目录 二、利用VS2019新建工程&#xff0c;并配置项目属性 配置VC目录---包含目录 三、项目源代码 #include <iostream> #include <fstream> #include <nlohmann/jso…...

OpenCV 中的光流 (C++/Python)

什么是光流? 光流是一项视频中两个连续帧之间每像素运动估计的任务。基本上,光流任务意味着计算像素的位移矢量作为两个相邻图像之间的对象位移差。光流的主要思想是估计物体由其运动或相机运动引起的位移矢量。 理论基础 假设我们有一个灰度图像——具有像素强度的矩阵。我…...

第9集丨Vue 江湖 —— 监测数据原理

目录 一、修改数据时的一个问题1.1 现象一1.2 现象二 二、Vue监测数据原理2.1 模拟一个数据监测2.2 数据劫持2.3 Vue.set()/vm.$set()2.4 基本原理2.4.1 如何监测对象中的数据?2.4.2 如何监测数组中的数据?2.4.3 修改数组中的某个元素 2.5 案例2.5.1 需求功能2.5.2 实现 一、…...

【YOLO】替换骨干网络为轻量级网络MobileNet3

替换骨干网络为轻量级网络MobileNet_v3 上一章 模型网络结构解析&增加小目标检测 文章目录 替换骨干网络为轻量级网络MobileNet_v3前言一、MobileNetV3介绍二、MobileNetV2&MobileNetV3三、MobileNetV3网络结构1. 结构查看2. 查看每层featuremap大小三、YOLOV5替换骨干…...

如何识别手机是否有灵动岛(dynamic island)

如何识别手机是否有灵动岛&#xff08;dynamic island&#xff09; 灵动岛是苹果2022年9月推出的iPhone 14 Pro、iPhone 14 Pro Max首次出现&#xff0c;操作系统最低是iOS16.0。带灵动岛的手机在竖屏时顶部工具栏大于等于51像素。 #define isHaveDynamicIsland ({ BOOL isH…...

Linux设备树简介

一、起源 减少垃圾代码 减轻驱动开发工作量 驱动代码和设备信息分离 参考Open Fireware设计 用来记录硬件平台中各种硬件设备的属性信息 二、基本组成 两种源文件&#xff1a; xxxxx.dts dts是device tree source的缩写 xxxxx.dtsi dtsi是device tree source include的…...

Ubuntu类IOS主题设置

1.依次执行下面三条命令&#xff1a; sudo apt install gnome-shell-extensions sudo apt install gnome-tweak-tool sudo apt install chrome-gnome-shell2.下载主题&#xff0c;也是命令&#xff1a; git clone <https://github.com/qingchendelaike/GNOME-OSX-II-Theme…...

RabbitMQ学习——发布订阅/fanout模式 topic模式 rabbitmq回调确认 延迟队列(死信)设计

目录 引出点对点(simple)Work queues 一对多发布订阅/fanout模式以登陆验证码为例pom文件导包application.yml文件rabbitmq的配置生产者生成验证码&#xff0c;发送给交换机消费者消费验证码 topic模式配置类增加配置生产者发送信息进行发送控制台查看 rabbitmq回调确认配置类验…...

Leetcode算法递归类—合并两个有序链表

目录 21. 合并两个有序链表 题解&#xff1a; 代码&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&a…...

YOLOv5可视化界面

Pyside6可视化界面 安装Pyside6 激活之前的虚拟环境yolov5 在该环境的终端输入以下命令 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyside6输入where python找到当前使用的Python的路径 找到该路径下的designer.exe文件&#xff08;/Lib/site-packages/PySi…...

C语言使用库函数实现大小写字母转换

功能&#xff1b;多行输入&#xff0c;输入大写字母&#xff0c;返回相应的小写字母&#xff1b;输入小写字母&#xff0c;返回相应的大写字母 需要用到的库函数&#xff1a; islower&#xff08;&#xff09; -- 判断是否为小写&#xff0c;是&#xff0c;返回非0&#xff0c;…...

Redis简单学习

Redis是一个基于内存的key-value结构数据库 linux上面安装&#xff1a; Redis存储的是key-value结构的数据&#xff0c;其中key是字符串&#xff0c;value有常见的5中数据类型&#xff1a; 字符串 string哈希 hash列表 list集合 set有序集合 sorted set 字符串常用操作&am…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...