导读:本文将与大家一起学习在几分钟内使用 Python 和 OpenAI 的 API 构建一个简单的聊天机器人,并提供了初学者需要的源代码示例。
此时此刻,我对ChatGPT的存在,是感到心安的。
但它刚推出时,我却感到十分恐惧。我的母亲是一位小学四年级老师,她那天急匆匆地告诉我(我是一名职业作家和技术内容经理),我可能将很快会失业。
然而多年以后,我却仍然在职,现在我努力让 ChatGPT 成为我的真正盟友。我不仅逐渐意识到它的用处,而且也意识到,当机器人要接管一切时,最好不要成为它的敌人。
话虽这样讲,我为什么要喋喋不休地谈论这个呢?嗯,了解敌人是迈向友好的重要一步。而与人工智能合作是一项极其宝贵的技能。这不仅仅代表是在 ChatGPT 上发问(我现在很喜欢问这个问题)。
学习如何与大语言模型一起或与大语言模型一起编写代码,是真正驾驭 GPT 力量的下一步。
我设计本教程的目的是帮助初学者入门,了解ChatGPT 的 API和响应逻辑。它不会教你如何在 GPT 之上构建一个复杂的应用程序,它会帮助你理解如何编写与 OpenAI(ChatGPT 的创建者与运营公司)API 交互的代码。
本教程简洁易懂,这里会使用Jupyter Notebook来构建。
OpenAI入门
请先在https://platform.openai.com注册为会员。
登录成功后,请访问 API 仪表板。
前往你的API 密钥页面,点击“创建新密钥”并立即复制该密钥,注意之后你将无法再次查看该密钥。
接下来,我们来添加账单信息。
虽然 OpenAI 提供免费试用,但是我添加了付款方式。10 美元的信用额度通常足以试用 GPT-3.5。
注意:你需要免费试用或有效计费才能使用 GPT-3.5。
使用 ChatGPT-3.5 构建聊天机器人
导入所需的库和依赖项
请将以下内容粘贴到你的第一个 Jupyter Notebook 单元中:
!pip install openai python-dotenv --quiet
Openai允许让你与 OpenAI 的模型(如 GPT-3.5)进行交互。 python-dotenv可以安全地管理 API 密钥等敏感信息,并将它们从.env文件加载到你的Python环境中。
导入模块
使用以下代码导入openai、os和dotenv,这有助于配置您的环境并与 API 交互:
import openai
import os
from dotenv import load_dotenv
加载 API 密钥
确保已在 OpenAI 仪表板中创建 API 密钥。现在,我们需要设置一个.env文件,然后来安全地存储它:
api_key = "sk-proj-api-key-here"
# Save the key to a .env file
with open(".env", "w") as f:
f.write(f"OPENAI_API_KEY={api_key}")
print(".env file created.")
将你的实际真实 API 密钥粘贴到此处sk-proj-api-key-here。接下来,将密钥加载到你的notpad中:
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
定义聊天机器人功能
下面,我们定义聊天机器人如何与 OpenAI 的 API 通信并处理对话。
def chat_with_gpt(messages):
response = openai.chat.completions.create(
model="gpt-3.5-turbo",
messages=messages,
temperature=0.7,
)
return response.choices[0].message.content
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello, who are you?"}
]
其中方法openai.chat.completions.create()是专为交互式聊天设计的最新 API 调用。
该方法允许通过发送消息列表并根据正在进行的对话接收相关响应,与 GPT-3.5 进行实时通信。
像 GPT-3.5 这样的 GPT 模型已经能够在会话期间保留记忆。这意味着它们会参考对话的早期部分,以提供更连贯、更有用的响应。我们的chat_with_gpt函数接受一个消息列表,作为正在进行的对话历史记录。这有助于助手根据上下文做出响应。
列表中的每条消息都包含一个"role"值,用于告诉模型该消息来自谁:
"user"对于提问者
"assistant"对于 GPT 响应
"system"设置行为指令(可选)
该temperature值控制助手响应的随机性或创造性。数值范围为 0 到 1,0 表示响应的结束可预测,1 表示响应更具随机性和创造性。建议将 0.7 设为最佳平衡值。
该 API 返回一个响应对象。从中,我们使用 提取助手的回复choices[0].message.content,该回复指的是 GPT 生成的实际文本。
运行聊天循环
现在我们将使聊天机器人具有交互性,以便用户可以与模型进行持续的对话。
while True:
user_input = input("You: ")
if user_input.lower() in ["exit", "quit"]:
print("Goodbye!")
break
messages.append({"role": "user", "content": user_input})
reply = chat_with_gpt(messages)
messages.append({"role": "assistant", "content": reply})
print(f"Assistant: {reply}")
本节设置了一个无限循环,允许聊天机器人持续运行,直到用户输入exit或quit为止。
无限循环使聊天机器人能够进行交互对话,并通过跟踪已说过的内容来“感知”过去的消息。此循环使对话持续进行,同时保留上下文。这种上下文使 GPT-3.5 能够以更自然、更有意义的方式做出回应。
以下是一步一步不断发生的事情:
聊天机器人使用input() 来提示用户输入。
如果用户输入“exit”或“quit”,循环就会中断,聊天机器人就会说Goodbye。
如果用户没有输入“退出”或“quit”,messages.append(...)则将用户的最后一条消息添加到对话历史记录中。
调用该函数chat_with_gpt(messages)来获取助手的响应。
助手的回复也使用 添加到历史记录中messages.append(...)。
最后,它会将响应打印到控制台,以便用户阅读参考。
与机器人交朋友
本教程将帮助各位了解如何使用 GPT-3.5 构建聊天机器人。
这显然只是一个开端,但你现在已经掌握了如何使用 OpenAI API 进行身份验证、维护对话循环以及如何使用 Jupyter Notebook 测试和运行代码。
这是迈向更高级的 AI 开发,以及与机器人成为朋友的重要第一步。
祝各位开发者朋友AI编程快乐!
作者:场长
本文为 @ 场长 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。