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。
对应的API Key你需要把它存储在一个安全的地方,后面我们调用OpenAI的接口都需要使用这个API Key。
现在OpenAI为所有免费注册的用户都提供了5美元(最早是18美元)的免费使用API的额度,这个额度用来体验API的功能,以及学习这个课程已经够用了。如果你想要进一步将这个API用在实际的产品上,就需要考虑把这个账号升级成付费账号了。
搭建本地的Jupyter Labs开发环境
有了API Key之后,我们还需要搭建一个开发环境。这门课,我主要通过 Python 来讲解和演示如何使用好AI。如果你是一个程序员,你可以自己去 Python语言的官网下载并安装对应的开发环境。
一般来说,你还需要一个Python的包管理和环境管理工具,我自己比较习惯使用 Conda。
最后,还需要通过包管理工具,配置一个独立的Python 3.10的环境,并安装好JupyterLab、OpenAI以及后面要用到的一系列开发包。我把对应的pip命令也列在了下面,供你参考。
后续,随着我们课程的进展,你可能还需要通过pip来安装更多Python包。
安装完JupyterLab之后,你只需要把刚才我们获取到的API Key设置到环境变量里,然后启动JupyterLab。你可以从浏览器里,通过Jupyter Notebook交互式地运行这个课程后面的代码,体验OpenAI的大语言模型神奇的效果。
你可以选择新建Python 3的Notebook,来体验交互式地运行Python代码调用OpenAI的API。
通过Colab使用JupyterLab
如果你不是一个程序员,或者你懒得在本地搭建一个开发环境。还有一个选择,就是使用Google提供的叫做 Colab 的线上Python Notebook环境。
即使你已经有了本地的开发环境,我也建议你注册一个账号。因为Colab可以让你免费使用一些GPU的资源,在你需要使用GPU尝试训练一些深度学习模型,而又没有一张比较好的显卡的时候,就可以直接使用它。另一方面,Colab便于你在网络上把自己撰写的Python代码分享给其他人。
Colab已经是一个Python Notebook的环境了。所以我们不需要再去安装Python和JupyterLab了。不过我们还是需要安装OpenAI的库,以及设定我们的API Key。你只需要在Notebook开始的时候,执行下面这样一小段代码就可以做到这一点。
不过需要注意,如果你需要将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上找到的中文商品名称做三件事情。
- 为这个商品写一个适合在亚马逊上使用的英文标题。
- 给这个商品写5个卖点。
- 估计一下,这个商品在美国卖多少钱比较合适。
同时,我们告诉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))
输出结果:
我们给了它一个英文的体育新闻的标题,然后让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那么火热。
- 邱嘉琪 👍(8) 💬(0)
openapi被封禁了,推荐使用代理,我使用https://api.bianxieai.com/
2024-05-09 - Geek_d596b8 👍(17) 💬(2)
2024-02-24 更新一下,课程中提到的text-davinci-003模型,已经被摒弃,现在已被gpt-3.5-turbo-instruct取代,大家可以使用这个模型来运行。(验证已通过) 同时在windows miniconda 环境中使用一下命令来设置open ai key conda env config vars set OPENAI_API_KEY=sk-xxxxxyyyyzzzzz
2024-02-24 - 不忘初心 👍(19) 💬(4)
基于open ai开发的编译器https://www.cursor.so/
2023-03-20 - 代码五花肉 👍(18) 💬(1)
听完这节课,我用安卓原生开发试了试,我突然看到了有语音转文字的API的文档,于是我先用录音功能发送了录音文件给 Wisper-1,然后识别到了文字后再接着发给API,然后拿到结果后用tts进行朗读,这样就做好了一个语音助手了,比Siri强大100倍~接下来就跟着老师学习正确的提示,看看能不能把生成提示用python弄成一个工程,然后给各种提示弄一个标签按钮,这样能让使用更加自动化~
2023-03-28 - Y024 👍(18) 💬(13)
补充说明:最新注册的只有 5 美元的 API 额度了。
2023-03-20 - Rocky_zd 👍(13) 💬(3)
作为一个门外汉,折腾了几天,终于成功运行了第一课的示例代码了。 1、借助梯子+亲友国外手机号,完成api账户注册。 2、用梯子+conda,运行代码,总是报网络连接错误;改用colab,需要用谷歌邮箱登录,自己注册总是无法验证中国的手机号,网上买了一个谷歌邮箱,终于可以顺利运行示例代码了。
2023-03-30 - 非洲黑猴子 👍(9) 💬(6)
运行第一段代码的时候好像就被要求充值了: RateLimitError: You exceeded your current quota, please check your plan and billing details.
2023-03-21 - aoe 👍(7) 💬(5)
还是老师有商业头脑,举的例子都是带大家致富的。 提一个与老师不同的观点:使用 python 对于不懂技术的「产品经理」来说太难了,使用「Playground」与 OpenAI 交互会更友好。 原因:我工作中使用 Java,但不会 python,阅读文章时我也没想过去学一下 python,因为那不是我的兴趣点。我更关注的是,如何使用 OpenAI API 带来的福利。 目前我知道最简单的方式是使用「Playground」,将老师文中的 prompt 粘贴进去,点击提交按钮就得到了下面的结果: { "title": "Glow-in-the-Dark PVC Inflatable Frog Night Market Stall Hot Selling Inflatable Toy for Kids Water Toy", "selling_points": ["Made from durable PVC material","Glow-in-the-Dark design","Comes with an air pump","Fun and safe for kids","Easy to inflate and deflate"], "price_range": "$15-$20" } OpenAI 官方也列出了多种语言接入 API 的解决方案:https://platform.openai.com/docs/libraries/community-libraries
2023-03-23 - Geek_2d9ee5 👍(4) 💬(1)
windows在powershell prompt中设置环境变量与代理 $env:OPENAI_API_KEY='your_api_key‘ $env:HTTP_PROXY='http://localhost:7890' $env:HTTPS_PROXY='http://localhost:7890' 查看环境变量 ls env:HTTP*
2023-04-12 - dan629xy 👍(4) 💬(1)
在Mac下通过conda 安装环境出现错误,是什么原因: (py310) $ ~ jupyter-lab . Traceback (most recent call last): File "/Users/miniconda3/envs/py310/lib/python3.10/site-packages/traitlets/traitlets.py", line 656, in get value = obj._trait_values[self.name] KeyError: 'registry' During handling of the above exception, another exception occurred:
2023-03-26 - 王jojo 👍(3) 💬(1)
问下openai也提供了nodejs版本,这两种对比的话,更推荐那种呢?node似乎更靠近web
2023-03-28 - harryZ 👍(3) 💬(1)
用Colab运行了本课的实例, 一共提交了两次, 共花费了$0.00516, 要知道我是刚注册的, 现在只有$5额度了.... 第二个例子再放在了chat中重复了一次, 果然输出还是一样的,
2023-03-22 - peter 👍(3) 💬(2)
请教老师几个问题: Q1:本地的 Jupyter Labs 开发环境,是windows还是Linux? 我的笔记本电脑是win10,安装有Linux虚拟机。文中所说的“本地的 Jupyter Labs 开发环境”,是win10下的还是Linux下的环境?我不清楚自己的电脑上是否安装了(Jupyter Labs) Q2:账号注册“入口”点击后网址转变是什么意思? 文中有一句“这是账号注册的入口。”,点击“入口”后,网址显示为“openai.com/api”,然后变为“openai.com/product”,为什么?转变为”product”后能否注册账号? Q3:源代码下载后,鼠标双击其中的一个文件“01_open_ai_101.ipynb”,该文件被本机上安装的VSCODE打开了。打开后,显示代码和对应的结果;点击代码左边的运行按钮,会再次生成结果,此时有两份结果。请问,VSCODE可以作为运行环境吗?
2023-03-21 - Geek_788696 👍(2) 💬(5)
之前自己的openai的账号过期了,就陷入了定式思维。就一直想去购买新的账号。结果一问,价格都好贵。分分钟都是要不就是全新账号gpt4,230元,就是免费额度5$的39元。算来算去都觉得好贵。然后在万能的tb上(也不能说万能,反正关键字都给屏蔽了,直接搜openai账号,ai账号,直接给你屏蔽了)。找到这个oneapi,一个中转的api。但完全能用。既然是课程练习。感觉没必要花那么多钱。这个购买最后是3.9元。就完成了第一个练习。还不错。
2024-01-18from openai import OpenAI # Initialize the client with your specific base URL and API key client = OpenAI( base_url="https://oneapi.xty.app/v1", api_key="sk-xxx" ) # Define the prompt messages prompt_messages = [ { "role": "system", "content": "You are a helpful assistant. Help the user by providing a human-readable product title for Amazon in English within 20 words, writing 5 selling points for the product on Amazon, and evaluating a price range for this product in the U.S. Provide the result in JSON format with three properties called title, selling_points, and price_range." }, { "role": "user", "content": "Consideration product: 工厂现货PVC充气青蛙夜市地摊热卖充气玩具发光蛙儿童水上玩具." } ] # Get response from the chat completion completion = client.chat.completions.create( model="gpt-3.5-turbo", messages=prompt_messages ) # Print the completion message # print(completion.choices[0].message['content']) # Assuming 'completion' is the response object from your chat completion request for choice in completion.choices: # Extract the message from the choice message = choice.message # Check if the role of the message is 'assistant', meaning it's the response generated by the model if message.role == 'assistant': # Print the content of the message print(message.content)
- 内德 👍(2) 💬(1)
代码GitHub地址是什么?
2023-04-03