共计 3055 个字符,预计需要花费 8 分钟才能阅读完成。
背景
ChatGPT API 提供了强大的自然语言处理能力,开发者可以利用它构建智能对话系统、内容生成工具等。其核心优势在于理解上下文、生成连贯回复以及适应多种任务场景。对于开发者来说,掌握 API 的基本使用和优化技巧,可以更高效地集成到自己的应用中。

前置准备
获取 API 密钥
- 登录 OpenAI 官网(https://openai.com/)
- 进入 API 密钥管理页面
- 创建新的 API 密钥并保存
环境配置
确保 Python 环境为 3.8+,并安装必要的库:
pip install openai requests
核心实现
基础请求示例
以下是一个带注释和异常处理的 Python 示例:
import openai
from typing import Dict, Optional
def chat_completion(
prompt: str,
api_key: str,
model: str = "gpt-3.5-turbo",
temperature: float = 0.7,
) -> Optional[Dict]:
"""
发送请求到 ChatGPT API
Args:
prompt: 用户输入文本
api_key: OpenAI API 密钥
model: 使用的模型版本
temperature: 控制生成文本的随机性
Returns:
API 响应数据或 None(如果出错)"""
openai.api_key = api_key
try:
response = openai.ChatCompletion.create(
model=model,
messages=[{"role": "user", "content": prompt}],
temperature=temperature,
)
return response
except openai.error.APIError as e:
print(f"OpenAI API 错误: {e}")
except Exception as e:
print(f"未知错误: {e}")
return None
多轮对话管理
要实现连贯的多轮对话,需要维护对话历史:
class Conversation:
def __init__(self, system_prompt: str = None):
self.messages = []
if system_prompt:
self.add_message("system", system_prompt)
def add_message(self, role: str, content: str):
"""添加消息到对话历史"""
self.messages.append({"role": role, "content": content})
def get_response(self, api_key: str, model: str = "gpt-3.5-turbo") -> Optional[str]:
"""获取 AI 回复"""
try:
response = openai.ChatCompletion.create(
model=model,
messages=self.messages,
)
return response.choices[0].message.content
except openai.error.OpenAIError as e:
print(f"API 错误: {e}")
return None
流式响应处理
对于长内容生成,可以使用流式响应提高用户体验:
def stream_response(prompt: str, api_key: str):
"""处理流式响应"""
openai.api_key = api_key
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
stream=True,
)
for chunk in response:
content = chunk.choices[0].delta.get("content", "")
print(content, end="", flush=True)
生产级考量
速率限制与重试
OpenAI API 有严格的速率限制,建议实现指数退避重试:
import time
from openai.error import RateLimitError
def robust_request(prompt: str, api_key: str, max_retries: int = 3):
"""带重试机制的请求"""
openai.api_key = api_key
retry_delay = 1
for attempt in range(max_retries):
try:
return openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
)
except RateLimitError:
if attempt == max_retries - 1:
raise
time.sleep(retry_delay)
retry_delay *= 2
敏感信息过滤
在发送用户输入前,建议进行敏感信息过滤:
def sanitize_input(text: str) -> str:
"""简单的敏感信息过滤"""
sensitive_words = ["密码", "信用卡", "SSN"]
for word in sensitive_words:
if word in text:
text = text.replace(word, "[ 已过滤]")
return text
成本监控
API 调用会产生费用,建议跟踪使用量:
class CostTracker:
def __init__(self):
self.total_tokens = 0
def update(self, response):
"""更新 token 计数"""
self.total_tokens += response.usage.total_tokens
def estimate_cost(self, model: str) -> float:
"""估算当前成本"""
# gpt-3.5-turbo 价格:$0.002/1K tokens
if model == "gpt-3.5-turbo":
return self.total_tokens * 0.002 / 1000
# 其他模型价格...
return 0
避坑指南
常见错误代码
- 429 错误:速率限制超出,需要降低请求频率或实现重试
- 401 错误:API 密钥无效或过期
- 400 错误:请求格式错误,检查参数
上下文窗口超限
当对话历史超过模型限制(如 4096 tokens),可以:
1. 截断早期对话
2. 总结之前的对话内容
3. 分段处理长文本
温度参数影响
temperature 参数控制生成文本的随机性:
– 低值(0.2-0.5):更确定性和聚焦的回答
– 高值(0.7-1.0):更多样化和创造性的回答
延伸学习
- OpenAI 官方文档:https://platform.openai.com/docs
- 最佳实践指南:https://platform.openai.com/docs/guides/gpt-best-practices
- 社区论坛:https://community.openai.com/
结语
通过本文介绍的基础知识和实用技巧,开发者可以更高效地使用 ChatGPT API 构建应用。实际开发中,建议从简单功能开始,逐步增加复杂度,并密切关注 API 使用情况和成本。随着经验的积累,可以探索更高级的功能和优化方法。
正文完
发表至: 未分类
近两天内
