ChatGPT 初探 - 冰蓝老师

 今天分享《ChatGPT 初探》这门课程分为四个部分:ChatGPT 的简介、原理、技巧和 API 。

简介

第一部分,首先说下 ChatGPT 的含义,ChatGPT 是 Chat Generative Pretrained Transformer 的缩写,中文名是聊天生成式预训练转换器。其是由 OpenAI 在 2022 年 11 月发布的大规模语言模型(LLM, Large Language Model),采用了监督和增强学习(Supervised and Reinforcement Learning)方法进行微调(fine-tuned)。 

由于 ChatGPT 相对于之前的产品效果有巨大的提升,因此在其面世以来大受欢迎,并引发了新一轮大规模语言模型的热潮。ChatGPT 可以对自然语言输入,也就是提示(prompt),进行理解并作出回应。由于提示的质量(Quality of Prompt)是 ChatGPT 会话成功的关键因素,从而衍生出了 Prompt 工程。其实,Prompt 工程已经是一门成熟的技术,虽然 ChatGPT 是 2022 年底提出来的,但 Prompt 工程技术早已存在,在网上还存在着售卖 Prompt 网站(如 PromptBase),也有 Prompt 综述论文(如 Pengfei Liu, Weizhe Yuan et al. Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing. 2021)。

这里重点介绍下 AI hallucination,也就是人工智能幻觉。与人类幻觉(human hallucination)相比,人类幻觉更多的是一种错觉,比如把筷子放在水里,发现筷子弯了,这是迷惑眼睛的一种现象,实际上,筷子没有弯曲。而 AI 幻觉(Artificial Intelligence hallucination)可以说是,AI 在一本正经的胡诌。这里,我举两个比较著名的例子,一个是 OpenAI ChatGPT 例子,据纽约时报(New York Times)报道,这事情发生在今年 5 月份,纽约两个律师使用 ChatGPT 生成相关案例文件,并把这些案例提交到法院,而这些由 ChatGPT 生成的案例都虚构的,后果也是很严重的,这两个律师会受到法律制裁,甚至可能会吊销其律师执照;另一个是 Google AI chatbot - Bard 例子,据 The Verge 新闻报道,在 Google 在 2023 年 2 月发布的 AI 聊天机器人 Bard 的 demo 中出现了事实性错误(factual error),这个错误最早是由天文学家发现并提出的。具体的 demo,如下图所示

 从上图中,可以看到,对 "What new discoveries from the James Webb Space Telescope can I tell my 9 year old about?" 问题的回应中,第 3 条 "JWST took the very first pictures of a planet outside of our own solar system." 是一个事实性错误,詹姆斯韦伯太空望远镜(James Webb Space Telescope, JWST)并没有首次拍摄到太阳系外的星球,JWST 是在 2021 年发射升空的,而早在 2004 年美国航空局(National Aeronautics and Space Administration, NASA)网站就发布太阳系外的星球照片。而 Google 作为有史以来最伟大的公司之一,对此事的应对是值得赞赏的。Google 保留了原始的 Bard 发布演示 demo,直面问题,其发言人 Jane Park 向 The Verge 声明,“这凸显了严格测试过程的重要性,本周我们将通过受信任的测试人员计划启动这个过程。我们将外部反馈和我们自己的内部测试相结合,确保 Bard 的回答在质量、安全性和真实信息的基础性方面达到高标准。”(“This highlights the importance of a rigorous testing process, something that we’re kicking off this week with our Trusted Tester program. We’ll combine external feedback with our own internal testing to make sure Bard’s responses meet a high bar for quality, safety and groundedness in real-world information.”)

OpenAI ChatGPT 目前已经应用到各行各业,如客户服务(Customer service)、教育(Education)、信息提供(Information provision)、私人助理(Personal assistant)、社交(Social interaction),尤其是娱乐产业(Entertainment industry)。

原理

第二部分,介绍下 ChatGPT 的原理,也就是如何得到 ChatGPT 的。具体过程,如下图所示,该图来自 OpenAI 研究员 Andrej Karpathy 在微软 Build 2023 大会 PPT

 从图中可以看出,ChatGPT 的训练过程分为 4 个阶段:预训练(Pretraining)、监督微调(Supervised Finetuning)、奖励建模(Reward Modeling)和增强学习(Reinforcement Learning)。由于预训练的数据量达到万亿级别,所以需要的 GPU 较多,超过一千,花费数月时间,占了训练时间的大半部分。

技巧

第三部分,介绍 Prompt 技巧,以此创建有效的 ChatGPT prompts ,推动吸引人的且信息丰富的会话。下面介绍一些有效的 prompts 的关键原则(key principles),这些原则的前提是你希望从 ChatGPT 获取有用信息。如果你只是想要闲聊、侃侃大山,就没有必要使用这些原则。Good Prompts 的关键原则如下:

  • 清晰(Clarity),改进 ChatGPT 对 Prompt 的理解;
  • 聚焦(Focus),聚焦主题,避免 Prompt 太泛,或过于开放;
  • 相关(Relevance),与 ChatGPT 对话主题相关,从而更高效地从 ChatGPT 获取信息;

 下图所展示的是,一些有效的 Prompt 和无效的 Prompt 例子。

有效prompts,如对文章要点的总结、巴黎最好的素食餐厅、中国的首都在哪里,等等;

无效 prompts,如告诉我关于整个世界的一些事情、 可以帮我做作业吗、你怎么样了,等等;

有些 prompts,可能是无效的,也可能是有效的,关键看你与 ChatGPT 对话的目的是什么。比如询问天气,如果你只是想知道具体的天气情况,那么这个 prompt 就是有效的;如果你只是把其当做一个开场白的话,那就是无效的,你没有从中获取到有效信息。

提示技巧(Prompt Tips)

  • 开始对话前,明确对话的目标或目的(clear goal or purpose);
  • 使用具体的、针对性的问题(specific, targeted questions),而不是开放性的(open-ended);
  • 避免单独一条 Prompt 中避免包含过多信息;
  • 使用明确的、简明的语言(clear, concise language),而不是行话(jargon)或有歧义的语言(ambiguous language);
  • 使用过渡短语顺利地从一个主题转移到另一个;
  • 使用 "act as" hack 帮助 ChatGPT 理解对话中的角色;
  • 注意 ChatGPT 的能力(capabilities)和限制(limitations);
  • 测试并调试你的提示以确保它们是有效的(effective);

总而言之,制作清晰的、简洁的 prompts 以提供 ChatGPT 必要的上下文信息(context)、指令(instructions)和限制(constraints)

 更多例子,如下图所示

下面看看 ChatGPT 的回答

 

 API

最后一部分,介绍 OpenAI API申请测试OpenAI 平台提供 API 用于构建应用或者 ChatGPT 插件。申请 OpenAI API 需要准备三件套:VPN(Virtual Private Network, 虚拟专用网)、Google GMail 邮箱账号和国外手机(接收验证码,可用接码平台代替)。测试 OpenAI API 可以采用两种方式:curl 命令和 Python 代码。这里的测试希望完成一个简单的任务,让 OpenAI ChatGPT 输出 "This is a test!"

具体的 curl 命令,如下所示:

curl --http1.1 https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
     "model": "gpt-3.5-turbo",
     "messages": [{"role": "user", "content": "Say this is a test!"}]
   }'

具体的 Python 代码,如下所示:

import os
import openai

openai.api_key = os.getenv("OPENAI_API_KEY")
completion = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role":"user", "content":"Say \ 
        this is a test!"}
            ]
        )
print(completion.choices[0].message.content)

更多解释说明,参见我的博文 “OpenAI API keys 申请和测试小结”。  

 

参考资料

[1] The Art of ChatGPT Prompting: A Guide to Crafting Clear and Effective Prompts. https://wethinkapp.medium.com/the-art-of-chatgpt-prompting-a-guide-to-crafting-clear-and-effective-prompts-1dfc2589295b
[2] 盘点8大网络新文体:生活体、甄嬛体等流行. http://www.xinhuanet.com/politics/2012-12/20/c_124121991.htm

posted @ 2023-06-20 08:07  klchang  阅读(184)  评论(0编辑  收藏  举报