ChatGPT API 调用教程——用 Python 接入 OpenAI

ChatGPT API 调用教程——用 Python 接入 OpenAI

作者: CaoZH
日期: 2023-02-15
本文为原创教程


2023 年初,OpenAI 开放了 ChatGPT API,开发者可以在自己的应用中集成对话式 AI 能力。本文手把手教你用 Python 调用 ChatGPT API,从申请 Key 到写一个命令行聊天机器人。

一、准备工作

1. 注册 OpenAI 账号并获取 API Key

  1. 访问 platform.openai.com 注册账号
  2. 进入 API Keys 页面,点击 Create new secret key
  3. 复制并保存好 Key(关闭后不再显示)

2. 安装依赖

1
2
3
4
5
6
7
8
9
10
# 创建项目目录
mkdir chatgpt-demo && cd chatgpt-demo

# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows

# 安装 OpenAI Python 库
pip install openai

二、基础调用

最简单的对话

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import openai

# 设置 API Key
openai.api_key = "sk-your-api-key-here"

# 发送请求
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "用一句话解释什么是 API"}
]
)

# 获取回复
print(response.choices[0].message.content)

多轮对话

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import openai

openai.api_key = "sk-your-api-key-here"

messages = [
{"role": "system", "content": "你是一个友好的AI助手,请用简洁的语言回答。"},
{"role": "user", "content": "什么是 Docker?"},
]

response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages
)

# 将 AI 回复加入对话历史
messages.append(response.choices[0].message)

# 继续对话
messages.append({"role": "user", "content": "和虚拟机有什么区别?"})

response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages
)

print(response.choices[0].message.content)

三、参数调优

1
2
3
4
5
6
7
8
9
10
11
12
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "写一个 Python 快速排序"}
],
temperature=0.3, # 0-2,越低越确定,越高越有创意
max_tokens=500, # 最大返回 token 数
top_p=0.9, # 核采样(与 temperature 二选一)
frequency_penalty=0, # -2~2,频率惩罚,避免重复
presence_penalty=0, # -2~2,话题多样性
stop=["\n\n", "```"], # 停止标记
)
参数 作用 推荐值
temperature 控制输出随机性 0.2-0.8
max_tokens 控制回复长度 根据需求设置
top_p 核采样阈值 0.9
frequency_penalty 减少重复 0.5-1.0

四、实战:命令行聊天机器人

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/usr/bin/env python3
# chat.py - 命令行 ChatGPT 客户端

import openai
import os
from datetime import datetime

# 从环境变量读取 API Key
openai.api_key = os.getenv("OPENAI_API_KEY")
if not openai.api_key:
print("请设置环境变量: export OPENAI_API_KEY='your-key'")
exit(1)

# 系统提示词
SYSTEM_PROMPT = "你是一个有帮助的AI助手。当前时间:" + datetime.now().strftime("%Y-%m-%d")

def chat():
messages = [{"role": "system", "content": SYSTEM_PROMPT}]
print("ChatGPT CLI (输入 'quit' 退出, 'clear' 清空历史)")
print("-" * 50)

while True:
user_input = input("\n👤: ").strip()

if user_input.lower() == 'quit':
break
elif user_input.lower() == 'clear':
messages = [{"role": "system", "content": SYSTEM_PROMPT}]
print("对话历史已清空")
continue

messages.append({"role": "user", "content": user_input})

try:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages,
temperature=0.7,
)

reply = response.choices[0].message.content
print(f"\n🤖: {reply}")

messages.append({"role": "assistant", "content": reply})

except Exception as e:
print(f"\n❌ 错误: {e}")

if __name__ == "__main__":
chat()

运行:

1
2
export OPENAI_API_KEY='sk-your-key-here'
python chat.py

五、流式输出(打字机效果)

1
2
3
4
5
6
7
8
9
10
11
12
13
import openai
openai.api_key = "sk-your-key-here"

response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "讲一个程序员笑话"}],
stream=True, # 开启流式
)

for chunk in response:
if chunk.choices[0].delta.get("content"):
print(chunk.choices[0].delta.content, end="", flush=True)
print()

六、Token 管理与计费

1
2
3
4
5
6
7
8
9
10
11
12
13
import tiktoken

# 计算 token 数量
enc = tiktoken.encoding_for_model("gpt-3.5-turbo")

text = "Hello, how are you?"
tokens = enc.encode(text)
print(f"Token 数: {len(tokens)}")
print(f"解码: {enc.decode(tokens)}")

# 价格参考(2023年初):
# gpt-3.5-turbo: $0.002 / 1K tokens
# 约 750 个单词 = 1000 tokens ≈ $0.002

七、总结

通过本教程,你学会了:

  • ✅ 申请 OpenAI API Key
  • ✅ 基础对话调用
  • ✅ 多轮对话保持上下文
  • ✅ 参数调优控制输出
  • ✅ 构建命令行聊天机器人
  • ✅ 流式输出和 Token 管理

ChatGPT API 的发布开启了 AI 应用开发的新纪元。结合你自己领域的业务场景,可以构建出非常有趣的应用。


首发于 CaoZH 的笔记