You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 02:53:17