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

使用ChatGPT-4 Assistant API上传文件无扩展名致检索失败求助

解决OpenAI文件上传无扩展名导致的检索不支持错误

问题场景

基于Django DRF开发试卷生成AI,读取书籍文件生成试题时,文件上传成功并获取到file_id,Thread也创建完成,但关联文件到消息时触发错误:

Files with extensions [none] are not supported for retrieval

检查OpenAI存储发现,上传的文件没有扩展名,导致无法被检索。相关代码如下:

from openai import OpenAI
import environ


env =environ.Env()
environ.Env.read_env()

openai_api_key = env("OPENAI_API_KEY")
client = OpenAI(api_key=openai_api_key)


def generate_exam(prompt, the_file):
    assistant_id = env("ASSISTANT_ID")
    thread = client.beta.threads.create()
    print("Thread is created")

    # Upload file to OpenAI
    uploaded_file = client.files.create(file=the_file.read(), purpose='assistants')
    file_id = uploaded_file.id
    print("File is uploaded: " + file_id)

    # Create message with file attachment
    message = client.beta.threads.messages.create(
        thread_id=thread.id,
        role="user",
        content=prompt,  # Use the prompt directly as a string
        attachments=[
            {
                "file_id": file_id,
                "tools": [{"type": "file_search"}]
            }
        ]
    )
    print("Message is created")

    # Create and monitor run
    run = client.beta.threads.runs.create(
        thread_id=thread.id,
        assistant_id=assistant_id,
    )
    print("Run instance is created")

    # Polling for run completion
    while run.status != "completed":
        run = client.beta.threads.runs.retrieve(
            thread_id=thread.id,
            run_id=run.id
        )
        print(f"Run status: {run.status}")

    # Retrieve and display messages after run completion
    messages = client.beta.threads.messages.list(thread_id=thread.id)
    response = ""
    for msg in messages.data:
        if msg.role == "assistant":
            response += msg.content[0].text.value + "\n"
    
    return response if response else "No response generated."

问题原因

上传文件时调用the_file.read()仅传递了文件内容,没有携带原文件的文件名(包含扩展名)。OpenAI的文件存储依赖扩展名判断是否支持检索,无扩展名的文件会被判定为不支持类型,触发上述错误。

解决方案

直接传递Django DRF上传的文件对象(the_file)给client.files.create的file参数,该对象包含完整的文件名和扩展名,OpenAI会自动识别并保留扩展名。

修改后的核心代码部分:

# Upload file to OpenAI - 修改此处,直接传递文件对象而非读取后的内容
uploaded_file = client.files.create(file=the_file, purpose='assistants')
file_id = uploaded_file.id
print("File is uploaded: " + file_id)

完整修改后的代码

from openai import OpenAI
import environ


env =environ.Env()
environ.Env.read_env()

openai_api_key = env("OPENAI_API_KEY")
client = OpenAI(api_key=openai_api_key)


def generate_exam(prompt, the_file):
    assistant_id = env("ASSISTANT_ID")
    thread = client.beta.threads.create()
    print("Thread is created")

    # Upload file to OpenAI - 直接传递文件对象,保留文件名和扩展名
    uploaded_file = client.files.create(file=the_file, purpose='assistants')
    file_id = uploaded_file.id
    print("File is uploaded: " + file_id)

    # Create message with file attachment
    message = client.beta.threads.messages.create(
        thread_id=thread.id,
        role="user",
        content=prompt,  # Use the prompt directly as a string
        attachments=[
            {
                "file_id": file_id,
                "tools": [{"type": "file_search"}]
            }
        ]
    )
    print("Message is created")

    # Create and monitor run
    run = client.beta.threads.runs.create(
        thread_id=thread.id,
        assistant_id=assistant_id,
    )
    print("Run instance is created")

    # Polling for run completion
    while run.status != "completed":
        run = client.beta.threads.runs.retrieve(
            thread_id=thread.id,
            run_id=run.id
        )
        print(f"Run status: {run.status}")

    # Retrieve and display messages after run completion
    messages = client.beta.threads.messages.list(thread_id=thread.id)
    response = ""
    for msg in messages.data:
        if msg.role == "assistant":
            response += msg.content[0].text.value + "\n"
    
    return response if response else "No response generated."

内容的提问来源于stack exchange,提问作者Code With Moha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 13:18:11