使用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.
相关产品推荐
相关产品推荐

