共计 2840 个字符,预计需要花费 8 分钟才能阅读完成。
背景痛点
国内开发者想要直接使用 ChatGPT 官方 API 面临几个主要障碍:

- IP 限制 :OpenAI 的服务对国内 IP 地址进行了封锁,直接访问会返回错误。
- 支付方式 :官方 API 需要绑定国际信用卡进行付费,国内常见的支付方式无法使用。
- 合规性 :国内对 AI 服务有特殊的合规要求,直接使用境外 API 可能存在法律风险。
技术方案对比
目前国内可用的免费 API 方案主要有以下几种:
- Azure OpenAI Service 代理 :微软提供的服务,合规性较好,但需要企业资质申请。
- 开源反向代理 :如 ChatGPT-Next-Web 等开源项目提供的代理 API,部署简单但稳定性存疑。
- 第三方平台 API:一些国内平台提供的封装 API,免费但有调用限制。
综合考虑稳定性、合规性和开发成本,我们推荐使用第三方平台 API 作为入门方案。
核心实现
Python 示例代码
import requests
import hashlib
import hmac
import time
# ⚠️ 从环境变量获取 API 密钥
API_KEY = os.getenv('CHATGPT_API_KEY')
BASE_URL = 'https://api.example.com/v1/chat'
# 生成请求签名
def generate_signature(api_key, timestamp):
message = f"{api_key}{timestamp}".encode('utf-8')
secret = api_key.encode('utf-8')
return hmac.new(secret, message, hashlib.sha256).hexdigest()
# 流式请求处理
def stream_chat_completion(prompt):
timestamp = str(int(time.time()))
signature = generate_signature(API_KEY, timestamp)
headers = {
'X-API-Key': API_KEY,
'X-Signature': signature,
'X-Timestamp': timestamp,
'Accept': 'text/event-stream'
}
data = {
'model': 'gpt-3.5-turbo',
'messages': [{'role': 'user', 'content': prompt}],
'stream': True
}
with requests.post(BASE_URL, json=data, headers=headers, stream=True) as r:
for line in r.iter_lines():
if line:
print(line.decode('utf-8'))
# 使用示例
if __name__ == '__main__':
stream_chat_completion("你好,请介绍一下你自己")
Node.js 示例代码
const crypto = require('crypto');
const axios = require('axios');
// ⚠️ 配置项
const API_KEY = process.env.CHATGPT_API_KEY;
const BASE_URL = 'https://api.example.com/v1/chat';
// 生成签名
function generateSignature(apiKey, timestamp) {const hmac = crypto.createHmac('sha256', apiKey);
hmac.update(`${apiKey}${timestamp}`);
return hmac.digest('hex');
}
// 链式调用示例
function chatCompletion(prompt) {const timestamp = Math.floor(Date.now() / 1000).toString();
const signature = generateSignature(API_KEY, timestamp);
return axios.post(BASE_URL, {
model: 'gpt-3.5-turbo',
messages: [{role: 'user', content: prompt}],
stream: false
}, {
headers: {
'X-API-Key': API_KEY,
'X-Signature': signature,
'X-Timestamp': timestamp
}
})
.then(response => {console.log(response.data);
return response.data;
})
.catch(error => {console.error('API 请求失败:', error);
throw error;
});
}
// 使用示例
chatCompletion("你好,请介绍一下你自己")
.then(data => console.log('响应数据:', data))
.catch(err => console.error('错误:', err));
生产考量
超时重试策略
import random
from time import sleep
# 指数退避重试
def exponential_backoff_retry(func, max_retries=5, initial_delay=1):
retry = 0
while retry < max_retries:
try:
return func()
except Exception as e:
delay = initial_delay * (2 ** retry) + random.uniform(0, 1)
print(f"请求失败,{delay} 秒后重试...")
sleep(delay)
retry += 1
raise Exception(f"超过最大重试次数 {max_retries}")
敏感词过滤
import re
# ⚠️ 敏感词正则表达式
def filter_sensitive_words(text):
sensitive_pattern = re.compile(r'( 政治敏感词 | 违法内容 | 暴力词汇 | 色情词汇)',
flags=re.IGNORECASE
)
return sensitive_pattern.sub('***', text)
避坑指南
- QPS 限制突破
- 使用多个 API 密钥轮询
- 实现本地缓存减少重复请求
-
错峰调用 API
-
内存优化
- 限制对话历史长度
- 使用 LRU 缓存管理上下文
- 定期清理无用会话
延伸思考
当 API 响应延迟超过 2 秒时,可以考虑以下优化方案:
- 前端显示加载状态和预估等待时间
- 实现渐进式响应,先返回部分结果
- 使用本地缓存响应常见问题
- 考虑降级策略,如切换到更快的轻量级模型
总结
通过本文介绍的方法,开发者可以在国内环境下合规地接入 ChatGPT API 服务。虽然免费 API 有一定限制,但通过合理的设计和优化,仍然可以构建出流畅的 AI 对话应用。随着国内 AI 生态的发展,未来可能会有更多稳定可靠的接入方案出现。
正文完
