您正在学习的是试看内容,报名后可学习全部内容 报名课程

01|重新出发,让我们学会和AI说话

你好,我是徐文浩。

欢迎你打开 AI 世界的大门。我猜你是被这段时间大火的ChatGPT吸引过来的吧?既然你是带着这样的目的打开了这门课程,那么我也一定会给你想要的。我们的课程会先从ChatGPT的主题开始,在接下来的几讲里,我会为你介绍如何使用OpenAI的API来和AI应用沟通。这些API背后,其实和ChatGPT一样,使用的是OpenAI的GPT-3.5//GPT-4系列的大语言模型。

整个课程,我们都会使用真实的数据、代码来演示如何利用好大语言模型。所以这一讲,我会先带你做好一系列准备工作。不过不用担心,去运行这些程序并不需要你专门去买一块昂贵的显卡。事实上,如果你不是一个程序员,而是一个产品经理,或者只是对AI感兴趣的非技术人,那么你可以使用浏览器就能访问的免费开发环境,来试验这些问题。

OpenAI的API能做到哪些神奇的事情?号称离“通用人工智能(AGI)”已经不远的产品长什么样子?GPT-3这样的模型和之前基于深度学习的自然语言处理解决方案又有什么不同?这些吊人胃口的问题,我会在课程里一一揭晓。

下面我们就先来做一些准备工作,注册账号并搭建开发环境。

创建 OpenAI 的 API Key

为了学习这门课程,你需要先去注册一个可以使用OpenAI的API的账号,这是账号注册的入口。目前,OpenAI还没有向中国大陆和香港地区开放,所以账号的注册需要你自己想想办法了,如果你有好办法,也欢迎你分享在评论区。

图片

账号注册完成之后,你点击右上角的账号,然后点击 “View API Keys”,就会进入一个管理API Keys的页面。

图片

你点击下面的 “+Create new secret key” 可以创建一个新的API Key。

 title=

对应的API Key你需要把它存储在一个安全的地方,后面我们调用OpenAI的接口都需要使用这个API Key。

现在OpenAI为所有免费注册的用户都提供了5美元(最早是18美元)的免费使用API的额度,这个额度用来体验API的功能,以及学习这个课程已经够用了。如果你想要进一步将这个API用在实际的产品上,就需要考虑把这个账号升级成付费账号了。

搭建本地的Jupyter Labs开发环境

有了API Key之后,我们还需要搭建一个开发环境。这门课,我主要通过 Python 来讲解和演示如何使用好AI。如果你是一个程序员,你可以自己去 Python语言的官网下载并安装对应的开发环境。

一般来说,你还需要一个Python的包管理和环境管理工具,我自己比较习惯使用 Conda

conda create --name py310 python=3.10
conda activate py310

最后,还需要通过包管理工具,配置一个独立的Python 3.10的环境,并安装好JupyterLab、OpenAI以及后面要用到的一系列开发包。我把对应的pip命令也列在了下面,供你参考。

pip install jupyterlab==4.0.9
pip install ipywidgets==8.1.1
pip install openai==1.6.1

后续,随着我们课程的进展,你可能还需要通过pip来安装更多Python包。

安装完JupyterLab之后,你只需要把刚才我们获取到的API Key设置到环境变量里,然后启动JupyterLab。你可以从浏览器里,通过Jupyter Notebook交互式地运行这个课程后面的代码,体验OpenAI的大语言模型神奇的效果。

export OPENAI_API_KEY=在这里写你获取到的ApiKey
jupyter-lab .

你可以选择新建Python 3的Notebook,来体验交互式地运行Python代码调用OpenAI的API。

图片

通过Colab使用JupyterLab

如果你不是一个程序员,或者你懒得在本地搭建一个开发环境。还有一个选择,就是使用Google提供的叫做 Colab 的线上Python Notebook环境。

即使你已经有了本地的开发环境,我也建议你注册一个账号。因为Colab可以让你免费使用一些GPU的资源,在你需要使用GPU尝试训练一些深度学习模型,而又没有一张比较好的显卡的时候,就可以直接使用它。另一方面,Colab便于你在网络上把自己撰写的Python代码分享给其他人。

 title=

Colab已经是一个Python Notebook的环境了。所以我们不需要再去安装Python和JupyterLab了。不过我们还是需要安装OpenAI的库,以及设定我们的API Key。你只需要在Notebook开始的时候,执行下面这样一小段代码就可以做到这一点。

!pip install openai
%env OPENAI_API_KEY=在这里写你获取到的ApiKey

不过需要注意,如果你需要将Notebook分享出去,记得把其中OpenAI的API key删除掉,免得别人的调用,花费都算在了你头上。

体验并测试OpenAI的API

好了,现在环境已经搭建好了。无论你是使用本地的JupyterLab环境,还是使用Google免费提供的Colab环境,我都迫不及待地想要和你一起来体验一下OpenAI了。我在这里放了一段代码,你可以把它贴到你的Notebook里面,直接运行一下。

from openai import OpenAI
import os

client = OpenAI(
  api_key=os.environ['OPENAI_API_KEY'],
)
COMPLETION_MODEL = "text-davinci-003"

prompt = """
Consideration proudct : 工厂现货PVC充气青蛙夜市地摊热卖充气玩具发光蛙儿童水上玩具

1. Compose human readale product title used on Amazon in english within 20 words.
2. Write 5 selling points for the products in Amazon.
3. Evaluate a price range for this product in U.S.

Output the result in json format with three properties called title, selling_points and price_range
"""

def get_response(prompt):
    completions = client.completions.create (
        model=COMPLETION_MODEL,
        prompt=prompt,
        max_tokens=512,
        n=1,
        stop=None,
        temperature=0.0,        
    )
    message = completions.choices[0].text
    return message

print(get_response(prompt)) 

我们来看看返回结果。

{
    "title": "Glow-in-the-Dark Inflatable PVC Frog Night Market Hot Selling Water Toy for Kids",
    "selling_points": [
        "Made of durable PVC material",
        "Glow-in-the-dark design for night play",
        "Inflatable design for easy storage and transport",
        "Perfect for water play and outdoor activities",
        "Great gift for kids"
    ],
    "price_range": "$10 - $20"
}

这个商品名称不是我构造的,而是直接找了1688里一个真实存在的商品。

图片

这段代码里面,我们调用了OpenAI的Completion接口,然后向它提了一个需求,也就是为一个我在1688上找到的中文商品名称做三件事情。

  1. 为这个商品写一个适合在亚马逊上使用的英文标题。
  2. 给这个商品写5个卖点。
  3. 估计一下,这个商品在美国卖多少钱比较合适。

同时,我们告诉OpenAI,我们希望返回的结果是JSON格式的,并且上面的三个事情用title、selling_points 和 price_range 三个字段返回。

神奇的是,OpenAI真的理解了我们的需求,返回了一个符合我们要求的JSON字符串给我们。在这个过程中,它完成了好几件不同的事情。

第一个是翻译,我们给的商品名称是中文的,返回的内容是英文的。

第二个是理解你的语义去生成文本,我们这里希望它写一个在亚马逊电商平台上适合人读的标题,所以在返回的英文结果里面,AI没有保留原文里有的“工厂现货”的含义,因为那个明显不适合在亚马逊这样的平台上作为标题。下面5条描述也没有包含“工厂现货”这样的信息。而且,其中的第三条卖点 “Inflatable design for easy storage and transport”,也就是作为一个充气的产品易于存放和运输,这一点其实是从“充气”这个信息AI推理出来的,原来的中文标题里并没有这样的信息。

第三个是利用AI自己有的知识给商品定价,这里它为这个商品定的价格是在10~20美元之间。而我用 “Glow-in-the-Dark frog” 在亚马逊里搜索,搜索结果的第一行里,就有一个16美元发光的青蛙。

最后是根据我们的要求把我们想要的结果,通过一个 JSON 结构化地返回给我们。而且,尽管我们没有提出要求,但是AI还是很贴心地把5个卖点放在了一个数组里,方便你后续只选取其中的几个来用。返回的结果是JSON,这样方便了我们进一步利用返回结果。比如,我们就可以把这个结果解析之后存储到数据库里,然后展现给商品运营人员。

图片

好了,如果看到这个结果你有些激动的话,请你先平复一下,我们马上来看一个新例子。

prompt = """
Man Utd must win trophies, says Ten Hag ahead of League Cup final

请将上面这句话的人名提取出来,并用json的方式展示出来
"""

print(get_response(prompt))

输出结果:

{
  "names": ["Ten Hag"]
}

我们给了它一个英文的体育新闻的标题,然后让AI把其中的人名提取出来。可以看到,返回的结果也准确地把新闻里面唯一出现的人名——曼联队的主教练滕哈格的名字提取了出来。

和之前的例子不同,这个例子里,我们希望AI处理的内容是英文,给出的指令则是中文。不过AI都处理得很好,而且我们的输入完全是自然的中英文混合在一起,并没有使用特定的标识符或者分隔符。

注:第一个例子,我们希望AI处理的内容是中文,给出的指令是英文。

我们这里的两个例子,其实对应着很多不同的问题,其中就包括机器翻译、文本生成、知识推理、命名实体识别等等。在传统的机器学习领域,对于其中任何一个问题,都可能需要一个独立的机器学习模型。就算把这些模型都免费提供给你,把这些独立的机器学习模型组合到一起实现上面的效果,还需要海量的工程研发工作。没有一个数十人的团队,工作量根本看不到头。

然而,OpenAI通过一个包含1750亿参数的大语言模型,就能理解自然的语言输入,直接完成各种不同的问题。而这个让人惊艳的表现,也是让很多人惊呼“通用人工智能(AGI)要来了”的原因。

小结

好了,希望到这里,你对OpenAI提供的大语言模型能干什么有了一个最直观的认识。同时,你也应该已经注册好了对应的账号,生成了调用大语言模型的API Key。无论是在本地搭建了开发环境,还是通过Colab这样免费在线的开发环境,你都应该已经尝试着调用过OpenAI的API拿到一些返回结果了。

图片

OpenAI提供的GPT-3.5/GPT-4系列的大语言模型,可以让你使用一个模型来解决所有的自然语言处理问题。原先我们需要一个个地单独训练模型,或者至少需要微调模型的场景,在大语言模型之下都消失了。这大大降低了我们利用AI解决问题的门槛,无论之前我们通过各种开源工具将机器学习变得多么便捷,想要做好自然语言处理,还是需要一些自然语言处理的专家。而且,往往我们还需要组合好多个模型,进行大量的工程开发工作。

而在大语言模型时代,我们只需要有会向AI提问的应用开发工程师,就能开发AI应用了。这也是我设计这门课程的目的,希望能让你体会到当前开发AI工具的便利性。

课后练习

  1. 请将今天课程中提供的示例代码,在你搭建的开发环境中运行一下。
  2. 你可以去看一下 OpenAI 提供的示例,找几个你感兴趣的用途,在上面的开发环境里运行体验一下,你也可以脑洞大开,尝试一些你想用AI解决的问题,看看AI能不能给出你想要的结果。

欢迎你把你体验的提示语和结果分享在评论区,看看都能有什么样的好创意。也欢迎你把这节课分享给感兴趣的朋友,我们下一讲再见。

推荐阅读

如果你想知道GPT系列大模型到底是怎么回事儿,我推荐你去看一下李沐老师讲解GPT系列论文的视频 GPT、GPT-2、GPT-3 论文精读,这个视频深入浅出,能够让你理解为什么现在GPT那么火热。