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

Pandas与OpenAI集成程序无法存储列值问题排查

问题分析与修复方案

核心问题

  1. Excel列值未传入API请求:代码中生成了包含URL的chat_prompt,但实际调用OpenAI API时仅传递了原始user_input,导致AI无法获取URL信息。
  2. 单回复无法匹配多行数据:当前逻辑仅生成一个AI回复,却试图赋值给多行的"AI Response"列,会引发Pandas数据长度不匹配的错误,且无法实现每行对应独立回复的需求。
  3. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:43:13