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

Flask集成OpenAI API遇阻:CV评分功能无法获取结果及密钥错误

问题排查与修复方案

1. 核心API Key配置错误

你的代码存在API Key配置矛盾:手动设置了openai.api_key,但创建OpenAI客户端时却尝试读取未设置的环境变量OPENAI_API_KEY,导致客户端拿到的API Key为空,触发报错。

修复二选一:

  • 方案一:直接使用已设置的Key创建客户端
    修改客户端初始化代码:
    client = OpenAI(api_key=openai.api_key)
    
    或者直接传入完整API Key(快速测试可用,注意不要泄露):
    client = OpenAI(api_key='你的完整API Key')
    
  • 方案二:设置系统环境变量
    启动Flask前先配置环境变量:
    • Windows命令行:set OPENAI_API_KEY=你的完整API Key
    • Linux/macOS终端:export OPENAI_API_KEY=你的完整API Key
      再启动Flask应用,确保os.environ.get能正确读取到Key。

2. 额外潜在问题(会导致后续功能异常)

(1)文件读取错误:无法解析PDF/Word文档

直接读取二进制文件后解码成文本会导致PDF、docx内容乱码,OpenAI无法正确分析。需要用专门库提取文本:

  • 安装依赖:
    pip install PyPDF2 python-docx
    
  • 替换原文件读取逻辑:
    from PyPDF2 import PdfReader
    from docx import Document
    
    def extract_text(file):
        filename = file.filename
        if filename.endswith('.pdf'):
            reader = PdfReader(file)
            return '\n'.join([page.extract_text() for page in reader.pages])
        elif filename.endswith('.docx'):
            doc = Document(file)
            return '\n'.join([para.text for para in doc.paragraphs])
        elif filename.endswith('.txt'):
            try:
                return file.read().decode('utf-8')
            except UnicodeDecodeError:
                return file.read().decode('latin-1')
        else:
            raise ValueError("不支持的文件格式")
    
    # 在analyze_cv函数中替换原读取代码
    cv_text = extract_text(request.files['cv'])
    job_desc_text = extract_text(request.files['job_description'])
    
    注:.doc格式需额外依赖(如textract),可根据需求添加。

(2)OpenAI API调用问题

  • 删除无用代码openai.Completion.create;
  • 修正SDK调用的大小写错误,且推荐使用新版模型:
    response = client.completions.create(
        model="gpt-3.5-turbo-instruct",  # 替换为推荐的新版模型
        prompt=prompt,
        temperature=0.7,
        max_tokens=1024
    )
    

(3)结果解析逻辑脆弱

原代码依赖固定格式拆分结果,易因OpenAI返回内容变化出错。修改prompt要求结构化输出:

prompt = f"""给定以下职位描述:\n{job_desc_text}\n\n基于简历评估候选人匹配度:\n{cv_text}\n\n仅返回JSON格式结果,包含两个键:'score'(1-10的整数)和'explanation'(详细评估文本),不要添加其他内容。"""

然后解析结果:

import json
result = json.loads(response.choices[0].text.strip())
score = result['score']
explanation = result['explanation']

3. 前端优化:增加用户可见的错误提示

当前前端仅在控制台打印错误,可修改catch逻辑让用户看到提示:

.catch(error => {
    document.getElementById('result').innerHTML = `<p style="color:red;">错误:文件分析失败,请查看后端日志。</p>`;
    console.error('Error:', error);
});

内容的提问来源于stack exchange,提问作者Shiva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:00:28