调用ChatGPT API持续返回Error:404,请求技术协助
问题分析与解决方案
你遇到的404错误核心原因是API端点和请求格式不匹配:gpt-4-turbo属于Chat Completions模型,不能使用旧版的/v1/completions端点,且请求参数格式也和文本补全接口不同。
具体修正步骤
1. 修正API端点URL
将原有的api_url改为Chat Completions接口地址:
api_url = "https://api.openai.com/v1/chat/completions"
2. 调整API请求格式
Chat Completions接口使用messages数组传递上下文,而非单独的prompt参数。同时明确分类规则,让模型输出结构化结果,方便后续处理。修改后的classify_text函数如下:
def classify_text(text): system_prompt = """请对以下文本进行分类: 1. 判断是否涉及中国房地产业(是/否) 2. 如果涉及,进一步判断是否特指中国房地产政策(是/否) 请用JSON格式返回结果,键名分别为"related_to_real_estate"和"is_real_estate_policy",值为"是"或"否"。""" payload = { "model": "gpt-4-turbo", "messages": [ {"role": "system", "content": system_prompt}, {"role": "user", "content": text} ], "max_tokens": 64, "temperature": 0.1 } response = requests.post(api_url, headers=headers, json=payload) if response.status_code == 200: result = response.json() return result['choices'][0]['message']['content'] else: return {"error": "API请求失败", "status_code": response.status_code, "detail": response.text}
3. 优化API密钥管理(推荐)
不要硬编码API密钥,使用环境变量加载避免泄露:
# 替换原有的Authorization行 headers = { "Content-Type": "application/json", "Authorization": f"Bearer {getenv('OPENAI_API_KEY')}" }
运行前需设置环境变量:
- Windows:
set OPENAI_API_KEY=sk-proj-xxx - Linux/macOS:
export OPENAI_API_KEY=sk-proj-xxx
4. 批量处理注意事项
批量请求时需添加延迟,避免触发API速率限制:
import time for item in data: classification = classify_text(item['CleanedContent']) results.append(...) time.sleep(1) # 每秒请求一次,可根据自身配额调整
完整修正后代码示例
基础设置
import json import requests from os import getenv import time # 加载数据集 with open('/policy_cleaned.json', 'r', encoding='utf-8') as file: data = json.load(file) # API配置 api_url = "https://api.openai.com/v1/chat/completions" headers = { "Content-Type": "application/json", "Authorization": f"Bearer {getenv('OPENAI_API_KEY')}" }
API分类函数
def classify_text(text): system_prompt = """请对以下文本进行分类: 1. 判断是否涉及中国房地产业(是/否) 2. 如果涉及,进一步判断是否特指中国房地产政策(是/否) 请用JSON格式返回结果,键名分别为"related_to_real_estate"和"is_real_estate_policy",值为"是"或"否"。""" payload = { "model": "gpt-4-turbo", "messages": [ {"role": "system", "content": system_prompt}, {"role": "user", "content": text} ], "max_tokens": 64, "temperature": 0.1 } response = requests.post(api_url, headers=headers, json=payload) if response.status_code == 200: result = response.json() return result['choices'][0]['message']['content'] else: return {"error": "API请求失败", "status_code": response.status_code, "detail": response.text}
运行分类并保存结果
results = [] for item in data: classification = classify_text(item['CleanedContent']) results.append({ "PolicyID": item['PolicyID'], "Title": item['Title'], "Classification": classification }) time.sleep(1) # 保存结果 with open('classified_data.json', 'w', encoding='utf-8') as file: json.dump(results, file, ensure_ascii=False, indent=2)
内容的提问来源于stack exchange,提问作者cccbc
相关产品推荐
相关产品推荐

