基于OpenAI API的Python内容生成Bot生成空文件问题求助
问题排查与修复方案
核心问题分析
你遇到的空文件问题,本质是API返回的content为空字符串,但代码未做判断就直接写入文件。虽然你在CMD能看到响应,但可能响应内容本身是空(比如模型未生成有效内容),或者代码中对响应的提取逻辑存在隐性问题。
排查步骤
- 临时打印API返回内容:在获取
content后添加打印语句,确认实际返回值:content = chat_completion.message.content print(f"API返回内容({city_name}): {repr(content)}") # 用repr查看是否为空或不可见字符 - 检查CSV中的城市名:确认
city.csv中是否存在空行或无效城市名,导致模型无法生成内容。 - 查看错误日志:检查
error_log.txt是否有未捕获的隐性异常(比如API返回格式变化)。
修复代码
修改generate_and_save_content函数,增加空内容判断,并完善日志记录:
def generate_and_save_content(city_name): prompt_template = ( "Prompt.... {city_name} " ) messages = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt_template.format(city_name=city_name)}, ] try: response = client.chat.completions.create( model="gpt-3.5-turbo", messages=messages, max_tokens=3000 ) choices = response.choices chat_completion = choices[0] content = chat_completion.message.content # 新增:判断内容是否为空或仅含空白字符 if not content or content.strip() == "": error_msg = f"API返回空内容,跳过保存({city_name})" print(error_msg) logging.error(error_msg) return False output_file = os.path.join(output_directory, city_name + ".txt") with open(output_file, "w", encoding="utf-8") as file: file.write(content) print(f"内容已成功保存({city_name})") return True except Exception as e: error_message = f"生成内容失败({city_name}): {str(e)}" print(error_message) logging.error(error_message) return False
额外优化建议
- 增强Prompt质量:如果模型频繁返回空内容,检查
prompt_template是否足够明确,比如补充具体的内容要求(如"生成关于{city_name}的旅游指南,至少300字")。 - 添加重试机制:针对临时的API异常或空返回,增加重试逻辑:
max_retries = 2 for attempt in range(max_retries + 1): try: # 原API请求逻辑 response = client.chat.completions.create( model="gpt-3.5-turbo", messages=messages, max_tokens=3000 ) choices = response.choices chat_completion = choices[0] content = chat_completion.message.content break except Exception as e: if attempt < max_retries: print(f"重试第{attempt+1}次({city_name})...") time.sleep(3) else: error_message = f"生成内容失败({city_name}): {str(e)}" print(error_message) logging.error(error_message) return False # 后续的空内容判断和保存逻辑 ...
内容的提问来源于stack exchange,提问作者Cham
相关产品推荐
相关产品推荐

