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

使用Azure OpenAI API生成PDF嵌入时遇openai.error.InvalidRequestError问题

问题分析与解决方案

可能的原因

出现openai.error.InvalidRequestError: '$.input' is invalid且单独处理PDF无异常,大概率是批量循环过程中,某一页的文本块存在格式/内容问题,但单独处理时因上下文环境差异未触发,常见情况包括:

  • 文本块为空字符串或仅含空白字符
  • 文本包含不可见的控制字符(如ASCII控制码、无效Unicode字符)
  • 循环中get_embedding的输入参数被意外篡改(比如page_text_chunk被赋值为非字符串类型)

解决步骤

  • 定位问题文本块:在循环中添加日志,输出出错时的PDF文件名、页码、文本块长度、前100字符,精准定位异常输入:
    import logging
    logging.basicConfig(level=logging.INFO)
    
    # 循环处理PDF页面时添加
    try:
        embedding = get_embedding(page_text_chunk, engine="text_embedding")
    except openai.error.InvalidRequestError as e:
        logging.error(f"处理PDF {pdf_name} 第{page_num}页出错: {str(e)}")
        logging.error(f"文本块长度: {len(page_text_chunk)}")
        logging.error(f"文本块前100字符: {page_text_chunk[:100]}")
        raise
    
  • 预处理文本块:在调用get_embedding前统一清理输入:
    import re
    
    def clean_text(text):
        # 移除空白字符以外的控制字符
        cleaned = re.sub(r'[\x00-\x1F\x7F]', '', text)
        # 去除首尾空白,若为空则返回默认占位文本
        cleaned = cleaned.strip()
        return cleaned if cleaned else "空文本块"
    
    # 调用前处理
    cleaned_text = clean_text(page_text_chunk)
    embedding = get_embedding(cleaned_text, engine="text_embedding")
    
  • 检查循环变量状态:确认循环中page_text_chunk始终为字符串类型,未被其他逻辑修改为None或非字符串对象;同时检查engine参数是否在循环中被意外变更。
  • 验证模型输入限制:确认文本块长度未超过Azure OpenAI嵌入模型的token上限(如text-embedding-ada-002支持8191 tokens),超出时需拆分文本块再处理。

内容的提问来源于stack exchange,提问作者Dom R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:01:12