共计 3069 个字符,预计需要花费 8 分钟才能阅读完成。
技术背景与应用场景
ChatGPT 是基于 GPT(生成式预训练变换器)架构的大型语言模型,由 OpenAI 开发。它能够理解自然语言输入并生成连贯的文本响应,广泛应用于对话系统、内容创作、代码辅助等领域。

典型应用场景包括:
- 智能客服:自动回答用户咨询
- 内容生成:文章摘要、营销文案创作
- 编程辅助:代码补全、错误调试
- 教育工具:语言学习、知识问答
环境准备与 API 配置
1. 环境要求
确保系统已安装 Python 3.8+,推荐使用虚拟环境隔离依赖:
python -m venv chatgpt_env
source chatgpt_env/bin/activate # Linux/Mac
chatgpt_env\Scripts\activate # Windows
2. 安装必要库
pip install openai python-dotenv
3. 密钥安全管理
最佳实践是通过环境变量管理 API 密钥,避免硬编码泄露风险:
- 在项目根目录创建
.env文件 - 添加如下内容(替换实际密钥):
OPENAI_API_KEY=sk-your_api_key_here - 在代码中安全加载:
from dotenv import load_dotenv import openai load_dotenv() openai.api_key = os.getenv('OPENAI_API_KEY')
基础 API 调用实战
完整代码示例
import openai
import os
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
openai.api_key = os.getenv('OPENAI_API_KEY')
# 基础对话函数
def chat_with_gpt(prompt, model="gpt-3.5-turbo", temperature=0.7):
"""
基础对话实现
:param prompt: 用户输入文本
:param model: 使用的模型版本
:param temperature: 生成多样性控制(0-1):return: AI 生成的响应内容
"""
try:
response = openai.ChatCompletion.create(
model=model,
messages=[{"role": "user", "content": prompt}],
temperature=temperature
)
return response.choices[0].message.content
except openai.error.RateLimitError:
return "请求过于频繁,请稍后再试"
except Exception as e:
return f"发生错误: {str(e)}"
# 上下文保持对话
class Conversation:
def __init__(self):
self.history = []
def add_message(self, role, content):
"""添加对话历史记录"""
self.history.append({"role": role, "content": content})
def get_response(self, user_input, max_tokens=150):
"""获取带上下文的响应"""
self.add_message("user", user_input)
try:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=self.history,
max_tokens=max_tokens
)
ai_response = response.choices[0].message.content
self.add_message("assistant", ai_response)
return ai_response
except openai.error.InvalidRequestError as e:
if "maximum context length" in str(e):
# 处理 token 超限情况
self.history = self.history[-4:] # 保留最近 2 轮对话
return "上下文过长,已自动清理历史,请重新提问"
raise
# 示例使用
if __name__ == "__main__":
# 基础对话
print(chat_with_gpt("Python 如何实现快速排序?"))
# 上下文对话
conv = Conversation()
print(conv.get_response("推荐北京的旅游景点"))
print(conv.get_response("这些景点适合带孩子吗?"))
生产环境注意事项
1. Token 计算与成本控制
- 计费基于输入 + 输出的总 token 数
- 中文平均 1token≈2 个汉字
- 监控用量建议:
def count_tokens(text, model="gpt-3.5-turbo"): """近似计算 token 数量""" return len(text) // 2 if "gpt-3.5" in model else len(text) // 4
2. 敏感数据过滤
- 在发送请求前清理 PII(个人身份信息):
import re def sanitize_input(text): """基础敏感信息过滤""" # 移除身份证号 text = re.sub(r'\d{17}[\dXx]', '[ID_REDACTED]', text) # 移除手机号 text = re.sub(r'1[3-9]\d{9}', '[PHONE_REDACTED]', text) return text
3. 异步调用优化
对于高并发场景,推荐使用异步请求:
import aiohttp
async def async_chat(session, prompt):
"""异步 API 调用示例"""
headers = {"Authorization": f"Bearer {os.getenv('OPENAI_API_KEY')}",
"Content-Type": "application/json"
}
payload = {
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": prompt}]
}
async with session.post(
"https://api.openai.com/v1/chat/completions",
json=payload,
headers=headers
) as resp:
return await resp.json()
实践任务
任务 1:增强多轮对话记忆
改进提供的 Conversation 类,实现:
- 对话历史持久化存储(如 SQLite)
- 自动清理最早的历史消息(而不仅是最近)
- 为每个对话添加时间戳
任务 2:构建客服机器人
基于 Flask/Django 框架实现:
- Web 界面接收用户输入
- 展示对话历史
- 添加常见问题预设回复
- 实现转人工客服功能
常见问题解决方案
- 速率限制错误:
- 实现指数退避重试机制
-
监控 API 调用频率
-
响应质量不稳定:
- 调整 temperature 参数(0-1)
-
添加更明确的指令提示
-
上下文丢失:
- 定期保存对话状态
- 实现手动上下文重置功能
扩展学习建议
- 探索不同模型(gpt-4, text-davinci-003)的特性差异
- 学习使用 OpenAI 的微调 API 定制专属模型
- 结合 LangChain 等框架构建复杂应用
通过本指南,您应该已经掌握了 ChatGPT API 的基础使用方法。建议从简单应用开始,逐步增加复杂度,实践中遇到问题时参考 OpenAI 官方文档获取最新信息。
正文完
