Pandas与OpenAI集成程序无法存储列值问题排查
问题分析与修复方案
核心问题
- Excel列值未传入API请求:代码中生成了包含URL的
chat_prompt,但实际调用OpenAI API时仅传递了原始user_input,导致AI无法获取URL信息。 - 单回复无法匹配多行数据:当前逻辑仅生成一个AI回复,却试图赋值给多行的"AI Response"列,会引发Pandas数据长度不匹配的错误,且无法实现每行对应独立回复的需求。
- Prompt构造逻辑错误:
generate_chat_prompt生成的格式不符合Chat Completion的消息规范,重复的对话结构会干扰模型理解用户需求。
修复后的完整代码
import pandas as pd import openai from tenacity import retry, stop_after_attempt, wait_exponential # 用于API重试,处理临时错误 # 设置OpenAI API密钥 openai.api_key = "MYKEY" def get_excel_column_values(file_path, sheet_name, column_name): """读取Excel指定列的值及完整DataFrame""" df = pd.read_excel(file_path, sheet_name=sheet_name) return df[column_name].tolist(), df # 避免重复读取Excel,提升效率 def generate_single_prompt(user_input, url): """为单个URL生成格式化的Prompt""" return f"{user_input}\n目标URL: {url}" @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10)) def get_ai_response(prompt): """调用OpenAI API获取回复,加入重试机制处理502等临时错误""" chat_params = { "model": "gpt-3.5-turbo", "messages": [ {"role": "system", "content": "你是一个专业的助手,会根据用户需求处理指定URL的相关任务。"}, {"role": "user", "content": prompt} ], "max_tokens": 100, "temperature": 0.7, } response = openai.ChatCompletion.create(**chat_params) return response.choices[0].message["content"].strip() def save_responses_to_excel(df, file_path, sheet_name, responses): """将AI回复批量写入Excel""" df["AI Response"] = responses df.to_excel(file_path, sheet_name=sheet_name, index=False) # 配置Excel文件信息 file_path = "MYFILELOCATION" sheet_name = "Sheet1" column_name = "URLs" # 获取用户输入 user_input = input("请输入你的需求:") # 读取Excel列值和完整DataFrame url_list, df = get_excel_column_values(file_path, sheet_name, column_name) # 为每个URL生成对应AI回复 ai_responses = [] for url in url_list: prompt = generate_single_prompt(user_input, url) try: response = get_ai_response(prompt) ai_responses.append(response) print(f"URL {url} 处理完成") except Exception as e: ai_responses.append(f"处理失败:{str(e)}") print(f"URL {url} 处理出错:{str(e)}") # 保存结果到Excel save_responses_to_excel(df, file_path, sheet_name, ai_responses) print("所有回复已成功写入Excel")
关键改进点
- 正确传递URL到API:每个URL都会被整合到Prompt中,确保AI能获取到对应的任务对象。
- 每行独立生成回复:遍历所有URL,为每行数据生成专属的AI回复,解决数据长度不匹配问题。
- 加入重试机制:使用
tenacity库处理OpenAI API的临时错误(如502 Bad Gateway),提升程序稳定性(需先执行pip install tenacity安装依赖)。 - 优化Prompt格式:简化Prompt结构,让模型更清晰理解用户需求与对应的URL。
- 减少重复IO操作:一次性读取DataFrame,避免多次打开Excel文件,提升运行效率。
内容的提问来源于stack exchange,提问作者FaiznnShaik
相关产品推荐
相关产品推荐

