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 的账号,这是账号注册的 入口

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

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

API Key

对应的 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 代码分享给其他人。

用Colab尝试各种Python代码

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 工具的便利性。

课后练习

请将今天课程中提供的示例代码,在你搭建的开发环境中运行一下。

可以去看一下 OpenAI 提供的 示例,找几个你感兴趣的用途,在上面的开发环境里运行体验一下,你也可以脑洞大开,尝试一些你想用 AI 解决的问题,看看 AI 能不能给出你想要的结果。

推荐阅读

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