
导读:本文将与大家一起学习在几分钟内使用 Python 和 OpenAI 的 API 构建一个简单的聊天机器人,并提供初学者可直接运行的源代码示例。

此时此刻,我对 ChatGPT 的存在,反而感到心安。
但它刚推出时,我确实有过一阵恐惧:它会不会让很多写作者、内容岗位失去价值?这种担忧并不罕见。多年以后再回头看,我依然在工作,而且我更愿意把 ChatGPT 当成真正的盟友。
为什么要说这些?因为“理解”是合作的第一步。与 AI 协作是一项很实用的技能,它不只是会在 ChatGPT 页面里提问,更关键的是:你能否把它接入自己的代码、自己的工作流,并让它在你的业务场景里跑起来。
学习如何与大语言模型一起写代码,是把 GPT 能力真正用起来的下一步。
本教程面向初学者,目标很明确:让你理解 ChatGPT API 的调用方式、响应结构以及如何维护一段持续对话。它不会直接带你搭建复杂应用,但会把最核心的“第一公里”打通。
本文会用 Jupyter Notebook 来演示,跟着复制粘贴即可。
OpenAI 入门准备
请先在 https://platform.openai.com 注册并登录。

登录成功后:
- 进入 API 仪表板(Dashboard)
- 打开 API Keys 页面,点击“创建新密钥(Create new secret key)”
- 创建后立刻复制保存:该密钥通常只展示一次,后续无法再次查看
接下来添加账单信息:
- OpenAI 可能提供免费试用,但不少情况下需要绑定支付方式才可正常调用
- 例如充值 10 美元的额度,通常足够你试用 GPT-3.5
注意:你需要免费试用额度或有效计费,才能使用 GPT-3.5。
使用 ChatGPT-3.5 构建聊天机器人(Jupyter Notebook)
1)安装依赖
将以下命令粘贴到 Notebook 的第一个单元执行:
!pip install openai python-dotenv --quiet
openai:用于与 OpenAI 模型(如 GPT-3.5)交互
python-dotenv:用于安全管理 API Key 等敏感信息,从 .env 文件加载到环境变量中(避免把密钥硬编码到代码里)
2)导入模块
使用以下代码导入 openai、os 和 dotenv:
import openai
import os
from dotenv import load_dotenv
3)加载 API 密钥(写入 .env 并读取)
确保你已经在 OpenAI 控制台创建了 API Key。接下来我们创建一个 .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 Key 粘贴到 sk-proj-api-key-here 位置。然后将密钥加载到当前环境:
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
到这里,你已经完成了最关键的鉴权准备。很多新手卡住的点,往往就出在“Key 放哪、怎么读、怎么不泄露”这一步。
如果你想系统补齐 Python 环境、虚拟环境与依赖管理等基础,也可以先把这些点梳理清楚,再继续往下做。
4)定义聊天机器人函数(封装 Chat Completions 调用)
下面我们定义机器人如何与 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 调用方式:你发送一个 messages 列表,模型会结合历史上下文返回更相关的响应。
messages 的结构
列表中的每条消息都有 role 字段,用来标识“谁在说话”:
"user":用户输入
"assistant":模型回复
"system":系统指令(可选,用于设定行为、风格、边界等)
temperature 是什么?
temperature 控制回复的随机性/创造性,取值范围通常在 0 到 1:
- 0:更稳定、更可预测(适合严谨问答、结构化输出)
- 1:更发散、更有创造性(适合脑暴、写作灵感)
本文用 0.7,属于比较常见的平衡值。
如何拿到模型输出?
API 会返回一个响应对象,我们用 response.choices[0].message.content 提取真正的文本回复。
5)运行聊天循环(让对话“持续”起来)
现在让机器人进入交互式循环,支持连续对话,直到用户退出:
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}")
这一段做了三件关键的事:
- 持续读取用户输入:通过
input() 接收对话内容
- 维护对话历史:每次把 user/assistant 的消息都
append 进 messages
- 把上下文带给模型:下一次请求时仍然传入完整
messages,模型就能“参考之前说过什么”
为什么要维护历史?
因为这会显著提升对话的连贯性:模型不是只回答“当前这一句”,而是在“已知前文”的前提下做出更贴近上下文的回应。
与机器人“交朋友”:你已经完成了第一步
现在你已经跑通了一个最小可用的 GPT-3.5 聊天机器人,并掌握了三件事:
- 如何完成 OpenAI API 的鉴权与密钥管理(
.env + 环境变量)
- 如何用
messages 维护上下文,实现连续对话
- 如何在 Jupyter Notebook 中快速测试、迭代你的对话逻辑
这当然只是开端。下一步你可以思考:要不要加上日志?要不要把对话存数据库?要不要接一个 Web UI 或命令行参数?当你开始提出这些问题,你就已经在“把能力做成产品”的路上了。
更多相关教程与资料,也可以在云栈社区的技术文档板块继续延伸阅读与检索。