使用 OpenAI ChatGPT
OpenAI 是一个由马斯克所创立的是人工智能( AI )研究实验室,在 2022 年底推出了 ChatGPT 的自然语言生成式模型,立刻造成了非常广大的回响,这篇教学会介绍如何使用 OpenAI ChatGPT,以及如何透过 Python 串接 OpenAI ChatGPT 的 API。
快速导览:
- 本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
- 因为 OpenAI 目前仍持续发展,如果遇到程序码跑不起来,有可能因为 OpenAI 的 API 有进行调整,请回馈让我知道,感谢!
注册 OpenAI
前往 OpenAI 的网站。
- OpenAI 网站:https://openai.com/
- 体验 ChatGPT:https://chat.openai.com/
- OpenAI 开发者平台:https://platform.openai.com/
点击最上方的“Try”,会打开注册或登录的页面 ( 点击“API”按钮,也会打开注册或登录的页面 ),点击 Sign up 按钮进行注册,注册时需要使用可以接收短信认证码的手机电话号码。
透过 ChatGPT 和 AI 聊天
注册 OpenAI 并登录完成后,在页面的下方会出现能“输入文字”的字段。
体验 ChatGPT:https://chat.openai.com/
输入文字后按下送出,就能开始与 OpenAI 的 AI 机器人聊天。
因为每个注册的账号都可以和 AI 机器人聊天,也能够透过 OpenAI 的 API 呼叫机器人,因此有时候会遇到 OpenAI 服务器无法回应的状况,这时候只能傻傻的等待,或在比较不热门的时段和 AI 机器人聊天。
OpenAI 的使用额度
目前 OpenAI 提供“18 美金或三个月”的使用额度,会根据使用的字词量多寡,或呼叫次数...等作业进行费用的扣除,使用范围包含了在网站上与 AI 互动,或透过程序呼叫 API,当即将超过费用或是到达期限,就会先暂停使用权限并要求付费,初期适合尝鲜或作为开发者使用 ( 下图是 2022 年 12 月撰写这篇文章时的用量 )。
OpenAI 开发者平台:https://platform.openai.com/
建立 OpenAI API Key
如果要比较深入的使用 OpenAI ( 例如使用 Python 串接、结合 LINE BOT...等 ),就必须要透过 OpenAI 的 API 来实现,从右上方“Personal”的选单里,选择“View API Keys”。
选择后进入建立 API Keys 页面,点击“Create new secret key”按钮,就能建立 API Keys。
注意!只有建立完成的当下可以复制 API Keys,请使用记事本或其他工具储存 API Key,如果要删除 API Key,必须再次建立新的 API Key 才能删除旧的。
使用 Python 串接 OpenAI API
输入下列指令安装 openai 函数库 ( 本机环境根据个人状况使用 pip 或 pip3 ),如果安装失败,可以使用 pip install --upgrade pip 更新 pip 尝试解决。
!pip install openai
安装后,使用下列的程序码,就能够向 OpenAI 的 AI 机器人发送对话消息,并接收 AI 机器人所回传的消息。
import openai
openai.api_key = '你的 API Key'
response = openai.Completion.create(
model="text-davinci-003",
prompt="講個笑話來聽聽",
max_tokens=128,
temperature=0.5,
)
completed_text = response["choices"][0]["text"]
print(completed_text)
上述的程序码中使用了 openai.Completion.create 方法,方法的参数说明如下 ( 详细参数参考:Create completion ):
| 参数 | 说明 |
|---|---|
| model | AI 所使用的引擎模组,如果是以自然语意为主,默认使用 text-davinci-003 ( 更多引擎参考:https://beta.openai.com/docs/models/gpt-3 )。 |
| prompt | 要传送的句子会词汇。 |
| max_tokens | 希望 AI 回传的最大字数,默认 128,在某些情况下回传的字数会大于这个数字。 |
| temperature | 随机文字组合,范围 0~1,默认 0.5,0 表示不随机,1 表示完全随机。 |
| language | 机器人处理的“程序语言”,默认 python,可设定 javascript、java、csharp、golang、ruby、php、cpp。 |
也因为 OpenAI 的 AI 机器人是一个大型语言模型,能够被训练成理解和回复多种语言,因此回复消息所使用的语言,是根据输入的文字消息内容决定,以下的程序码为例,执行后输入“中文笑话”,回复的消息就是中文笑话,而如果是输入“english joke”,就会回应一个英文的笑话。
import openai
openai.api_key = '你的 API Key'
while True:
msg = input()
response = openai.Completion.create(
model='text-davinci-003',
prompt=msg,
max_tokens=128,
temperature=0.5
)
completed_text = response['choices'][0]['text']
print(completed_text)
如果是使用 gpt-3.5-turbo 引擎模组,则要把 openai.ChatCompletion 改成 openai.ChatCompletion,并将 prompt 参数改成 messages 参数,参数内容使用串列和字典的格式,透过字典格式表现上下文语句,例如下面的例子,ChatGPT 就会知道用户的名字是 oxxo。
import openai
openai.api_key = '你的 API KEY'
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
max_tokens=128,
temperature=0.5,
messages=[
{"role": "user", "content": "我叫做 oxxo"},
{"role": "assistant", "content": "原來你是 oxxo 呀"},
{"role": "user", "content": "請問我叫什麼名字?"}
]
)
print(response.choices[0].message.content)
串连上下文语句
如果使用 text-davinci-003 模型,在传送语句时,将之前对话的内容,使用“\n\n”两个换行符号分隔 ( 实测这样子的准确度最高 ),并连接目前要讲的语句,传送出去之后就可以让 ChatGPT 了解过去的交谈内容,实现串连上下语句的功能。
import openai
openai.api_key = '你的 API Key'
messages = ''
while True:
msg = input('me > ')
messages = f'{messages}{msg}\n' # 將過去的語句連接目前的對話,後方加上 \n 可以避免標點符號結尾問題
response = openai.Completion.create(
model='text-davinci-003',
prompt=messages,
max_tokens=128,
temperature=0.5
)
ai_msg = response['choices'][0]['text'].replace('\n','')
print('ai > '+ai_msg)
messages = f'{messages}\n{ai_msg}\n\n' # 合併 AI 回應的話
如果使用 gpt-3.5-turbo 模型,直接将回应语句使用字典的格式,添加到回应的 messages 串列中,ChatGPT 就能自动识别上下语句。
import openai
openai.api_key = '你的 API Key'
messages = []
while True:
msg = input('me > ')
messages.append({"role":"user","content":msg}) # 添加 user 回應
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
max_tokens=128,
temperature=0.5,
messages=messages
)
ai_msg = response.choices[0].message.content.replace('\n','')
messages.append({"role":"assistant","content":ai_msg}) # 添加 ChatGPT 回應
print(f'ai > {ai_msg}')
不过要注意的是,传送历史纪录会造成整体 token 暴增!必须要评估自己的口袋深度 ( 有没有把握可以支付费用 ),再决定是否要进行历史纪录的动作。
延伸阅读
如果已经可以使用 Python 串接 OpenAI,就可以参考下方的文章,将 OpenAI 与 LINE BOT 串连,做出一个具有人工智能的 LINE 聊天机器人啰!
小结
透过 Python 串接 OpenAI 的 API 其实非常简单,只需要申请 API Key 就能串接,由于是免费版本,在使用上仍然会有每个月 18 美元的“额度”限制 ( 参考 OpenAI Usage ),但对于一般开发者来说应该是很足够了,相信未来的生活里,应该会充斥着许多 AI 代替真人的消息或语音回复,至于如何判断消息的好坏或是处理衍生的道德伦理问题,就有待人类智商来解决了吧。
微信扫码关注
抖音扫码关注