1. ChatGPT

1.1. 简介

ChatGPT是一个大型语言模型(Large Language Model,LLM),是一种基于生成式预训练变换模型(Generative Pre-trained Transformer,简称GPT)的聊天机器人,由美国OpenAI团队研发。它可以根据聊天的上下文生成自然、流畅、有逻辑的回复,并能进行多轮对话。ChatGPT是OpenAI开发的一款产品,它基于GPT-3.5系列的模型,并使用了人类反馈强化学习(RLHF)的方法来优化其对话能力。
GPT-4.0是OpenAI于2023年3月发布的最新最先进的语言模型,它是一个大型的多模态模型(可以接受图像和文本输入,输出文本),在许多专业和学术的基准测试上表现出了人类水平的性能。GPT-4.0拥有15000亿个参数,是GPT-3.7(3700亿个参数)的四倍之多。GPT-4.0使用了一种新颖的训练方法,称为自适应稀疏注意力机制(Adaptive Sparse Attention),可以有效地处理大量的输入和输出序列,并降低计算和内存开销。
GPT模型主要分为两个阶段:预训练和微调。预训练阶段是在大规模的无标注文本数据上进行无监督学习,以学习语言的通用知识和规律;微调阶段是在特定领域或任务的有标注文本数据上进行有监督学习或强化学习,以适应不同的需求和目标。
模型参数是指深度学习模型中的权重和偏差。模型参数的数量会影响模型的大小、复杂度和准确率。一般来说,参数的数量越多,模型的容量越大,可以学习到更复杂的特征,但也容易导致过拟合和训练时间过长。
ChatGPT是一种通用的,生成式的人工智能。通用,说ChatGPT并不限定领域。生成式说明它的结果是生成的,而不是搜索出来的,是在理解的基础上生成的新的内容。
ChatGPT是基于Transformer架构,Transformer是一种基于自注意力机制(self-attention)的序列到序列模型,其中自注意力机制可以根据输入序列中的每个词在上下文中的重要性来动态地给出一个权重,从而更好地捕捉上下文信息。权重在这里,其实是统计的出现的概率。出现的概率更大,则更优先展示。更清晰的上下文,可以让ChatGPT展示更准确的结果。

1.2. 发展历程

  • 2015年12月,OpenAI成立,是一个非营利的人工智能研究机构,旨在创建和推广友善的人工智能,并避免存在潜在风险的人工智能。
  • 2018年6月,OpenAI发布了GPT-1,是一个基于Transformer架构的大型语言模型,可以生成连贯且有意义的文本。
  • 2019年2月,OpenAI发布了GPT-2,是一个比GPT-1更大更强的语言模型,可以生成各种类型和风格的文本,并引起了社会和媒体的广泛关注和讨论。
  • 2020年5月,OpenAI发布了GPT-3,是一个比GPT-2更大更强的语言模型,拥有1750亿个参数,并可以通过少量或无监督学习来适应不同领域和任务。
  • 2020年9月,OpenAI与微软达成独家合作协议,将GPT-3作为微软云服务Azure的一部分提供给用户和开发者。
  • 2021年7月,OpenAI发布了InstructGPT和Codex两个基于GPT-3.5(一种改进版的GPT-3)的模型。InstructGPT可以根据用户输入的指令来执行各种任务;Codex可以根据用户输入的自然语言来生成代码。
  • 2022年11月,OpenAI发布了ChatGPT,是一个基于GPT-3.7(一种更进一步改进版的GPT-3)的模型,并使用了监督学习和强化学习技术进行了微调。ChatGPT可以以对话形式与用户交互,并提供看起来非常人性化的回复。GPT-3.7有3700亿模型参数。
  • 2023年1月,OpenAI宣布将ChatGPT开放给所有用户和开发者,并提供了一个简单易用的接口和文档。
  • 2023年3月,ChatGPT-4.0发布,首次支持多模态,除了文本输入以外,还支持图像输入(图像输入暂时只支持特定人群)。

1.3. 编程相关

ChatGPT是生成式的,它会先理解问题,再来存储扫描的信息提取相关信息,实时生成回答给用户。在编程方面,ChatGPT-3.0经过了大量的训练,效果非常好。ChatGPT-4.0进一步优化,进步巨大,参考基于Leetcode的测试:
ChatGPT在编程中的应用

1.4. 机遇与挑战

如果工业革命时期,机械的出现,对手工业者带来巨大的冲击,但是冲击是暂时的。机器带来社会效率的大幅提升,学习并利用机械的人获得了更多的收益,真正受到冲击的是那些抗拒机械的人。ChatGPT的出现,同样是一场革命,同样是机遇与挑战并存。大胆拥抱机遇,努力规避挑战。

  • 机遇
  1. 更好的聊天机器人,可以应用于智能客服,语音助手,教育培训等。
  2. 更好的自然语言处理,可以应用于机器翻译,语音识别等。
  3. 更好的文本生成,可以应用于文档撰写,内容提炼等。
  4. 更好的开发辅助,可以应用于代码生成,代码审查,代码补全等。
  • 挑战
  1. 基础文字工作的需求替代。
  2. 基础代码工作的需求替代。
  3. 数据隐私安全风险提升。
  • 行动

大模型的AI,带来新的巨大变革,我们需要顺势而为。AI最先冲击的是翻译行业,初级翻译,尤其是科技类的翻译的市场需求大幅萎缩。最耗时间的初翻,基本都是交给机器翻译来完成,然后翻译工作者再来进行精校。我们编码工作者也应该如此,初级的工作能够交给ChatGPT的尽量交由它来完成,然后在其生成的基础上进行调整优化。这样可以节省大量的时间,让我们精进提升,应对更高需求的任务。

2. 应用

ChatGPT是对话式的,其回复的格式默认是使用markdown语法。ChatGPT的基础数据更多为英文,所以我们的问题,GPT会先转为英文进行分析生成英文回答,然后再翻译为中文。编程方面的英文资料更多,GPT在编程方面表现出来的能力是远超过我们用中文在网络上进行搜索的。
ChatGPT-3.0支持4096个Token(BPE分词算法的最小单位),大概对应64000个英文单词,或2000个中文汉字。也就是说ChatGPT-3.0每次对话的输入和输出,上下文总共都不通过超过4096个Token。ChatGPT-4.0的上下文长度为8192个Token。查询Token数据,访问https://gpttools.com/estimator。因此,一个复杂的问题,我们需要分解为多个小问题来询问GPT。

2.1. 准备工作

2.1.1. 提问建议

  • 提问前,先想清楚你想要知道什么,然后用简洁、明确、具体的语言表达出来。
  • 提问时,尽量避免使用模糊、含糊、复杂的词语和句子,例如“什么”、“怎么样”、“为什么”等。
  • 提问时,可以给出一些背景信息或者上下文,让ChatGPT能够更好地理解你的问题和需求。
  • 提问后,可以对ChatGPT的回答进行反馈或者追问,让它能够更好地学习和改进,来获取更好的回答。
  • 角色扮演,可以让ChatGPT扮演一个咨询师的角色,可以获取更好的对话效果。甚至可以让ChatGPT扮演一个Linux电脑,来测试自己的命令响应情况。
  • 反提问,有时不知道如何问问题,甚至可以让ChatGPT向自己提问。

2.1.2. 更好地提问

  1. GPT是按概率给出的答案,如果我们当前的问题不够明确,给出的答案也未必是最合适的。此时,我们要尽量问GPT是否还有其他方法,问到最后,再让GPT分析一下几种方法的区别。然后再根据我们的情况选择适合的答案。
  2. 例如,我需要用PyQt制作添加一个按钮,按钮左边显示一个红色的圆点,圆点在不停闪烁。GPT能够给出很多答案,但是更好的答案是封闭一个自定义的按钮,在这个自定义的按钮中来实现闪烁的红色按钮,这样的代码封装性才好,才是好的代码。

2.2. 撰写技术文章

GPT的回答是Markdown的风格,非常简洁美观,可以很好的移植到相差知识平台。
ChatGPT在编程中的应用
如果觉得不完善,还可以提示补充相差内容。文章撰写得非常好,除了没有图片外,接近完美。
ChatGPT在编程中的应用

2.2. 撰写API使用手册

通过下图可以看出,只要显式地指定手册中包含的内容,GPT就会按要求撰写详细的API手册,语言科技风格,简洁流畅,并且是markdown风格,非常适合制作文档。
ChatGPT在编程中的应用

2.3. 解释代码功能

ChatGPT在编程中的应用

2.4. 撰写代码注释

可以提示只注释关键点,否则GPT会每个地方都注释,注释太多了。另外可以提示Markdown风格显示,否则代码有可能显示在一行,导致风格错乱。
ChatGPT在编程中的应用

2.5. 编写测试用例

ChatGPT在编程中的应用

2.6. 修改Bug

2.6.1. 变量大小溢出

GPT给出的答案并不是一成不变的,例如下面的代码,有时它能够第一次就找出问题所在。但是有时,得再次让其确认才能够发现问题。甚至有时多次都无法发现问题。
ChatGPT在编程中的应用

2.6.2. 内存溢出

ChatGPT在编程中的应用

  1. 示例3

2.7. 补全代码

直接函数名补全,因为这功能的算法有很多种。如果默认补全的话,其实GPT生成的是移位的算法,这种算法网络上出现得最多,但是效率不是最优的。增加了“最优效率”的提示,GPT依然只是想了一个相对最优效率的算法,依然不是最优效率的。如果还想找更优效率的算法,可以继续提示询问,一直询问到GPT没有找到更优的算法为止。补全代码时,GPT是通过函数名或已经完成的代码来推导出请问者想的代码是什么样的,然后再生成相应的代码。
ChatGPT在编程中的应用

2.8. 生成代码

2.8.1. UI代码

纯粹的UI代码逻辑相对简单,正是GPT擅长的。尤其是在Python下做UI开发,因为没有专门的图形工具,编写UI代码会麻烦很多,而且都是一些单调的位置、属性的修改等。这类工作交给GPT之后,开发人员只用在GPT生成的代码的基础上,做适当的调整,就可以使用了。
ChatGPT在编程中的应用

2.8.2. 算法代码

如果默认生成的代码,其实GPT生成的是移位的算法,这种算法网络上出现得最多,但是效率不是最优的。增加了“最优效率”的提示,GPT依然只是想了一个相对最优效率的算法,依然不是最优效率的。如果还想找更优效率的算法,可以继续提示询问,一直询问到GPT没有找到更优的算法为止。
ChatGPT在编程中的应用

2.8.3. 嵌入式代码

ChatGPT在编程中的应用
ChatGPT在编程中的应用

2.8.4. 框架代码

  1. Python TCP Server并发

ChatGPT在编程中的应用

  1. 串口多线程事件模型

ChatGPT在编程中的应用

2.9. 代码评审

ChatGPT在编程中的应用

2.10. 优化代码

2.10.1. 优化代码风格

ChatGPT在编程中的应用ChatGPT在编程中的应用
ChatGPT在编程中的应用
ChatGPT在编程中的应用
ChatGPT在编程中的应用

2.10.2. 优化代码

优化代码根据需要可以和优化代码风格一起进行。另外,可以根据需要加入更多优化的准则。
ChatGPT在编程中的应用
ChatGPT在编程中的应用
ChatGPT在编程中的应用

2.11. 询问代码作用

针对一段代码,可以就自己不明白的某一行代码,要求GPT重点解释。从给出的答案来看,解析得非常清晰,达到高级或以上的水平。
ChatGPT在编程中的应用

2.12. 答疑解惑

可以问题GPT技术问题,让它编写makefile,shell脚本等。
ChatGPT在编程中的应用
GPT给出的答案非常好,既有简要介绍,又给出了选择的原因。是学习,工作的好帮手。
ChatGPT在编程中的应用

2.13. 翻译

ChatGPT在编程中的应用

2.14. 智能识别

有一些工作,人工识别耗时长,编程识别难度大。这类工作交给GPT非常适合,如下面的示例:
ChatGPT在编程中的应用

2.15. 自动化

ChatGPT有提供API,使用起来非常方便,但是前提是得有一个VPN代理。使用方法如下:

import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
response = openai.Completion.create(model="text-davinci-003", prompt="Hello world", max_tokens=1024) 
print(response) 
# or 
completion = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Hello world!"}])
print(completion.choices[0].message.content)
  1. 自动整理邮件内容,提炼主旨。
  2. 集成进CI,自动读取源代码,调用API进行Code Review和静态分析。
  3. 数据分类,由于API Token的限制,支持的数据量大概在2048左右。
  4. 优化代码,可以自动根据Git/SVN上传的新代码进行优化,并给出优化代码,进行比较确认,提升代码评审优化的效率。

3. 其他

3.1. ChatGPT的使用方法

  1. 注册或网络购买一个ChatGPT帐号,使用VPN将网络代理到非中国区,登录chat.openai.com即可以开始对话。
  2. 新版的Edge浏览器,有提供一个“发现”功能,里面有提供基于ChatGPT-4.0的对话、撰写文章的功能。
  3. 新版bing.com有提供聊天功能,其实现也是基于ChatGPT-4.0。
  4. VS Code中有一些ChatGPT的插件是免费的,安装即可使用。
  5. Cusor代码编辑软件,有集成ChatGPT-4.0,免费使用,https://www.cursor.so/。
  6. 如果有Openai Key,可以直接代码编程使用,在Python中使用非常简单(需要开启VPN全局代理使用)。

3.2. 注意

ChatGPT是需要将问题上传至服务器来进行分析解答的,ChatGPT的对话是会参入Openai的模型训练的,所以隐私信息注意保护。

3.3. 后ChatGPT时代

  1. 依然要学习好基础知识,才能更好地问出问题,才能得到更有质量的回答。
  2. 要积极拥抱ChatGPT,可以大幅提升开发速度、代码调试速度、代码质量。
  3. 借助ChatGPT来学习,提升学习效率,少走弯路。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。