Azure OpenAI 从内存上传文件

0 投票
1 回答
64 浏览
提问于 2025-04-14 18:20

我正在创建一个助手,想给它提供一些数据来分析。我知道可以通过以下代码上传一个文件,让助手使用:

from openai import AzureOpenAI
import pandas as pd

client = AzureOpenAI(**credentials_here)

pd.DataFrame({
    "A": [1, 2, 3, 4, 5],
    "B": [6, 7, 8, 9, 10],
    "C": [11, 12, 13, 14, 15],
}).to_csv('data.csv', index=False)

file = client.files.create(
    file=open(
        "data.csv",
        "rb",
    ),
    purpose="assistants",
)

我更希望能从内存中的数据结构上传文件。请问我该如何使用AzureOpenAI客户端从内存中上传数据呢?

我看到OpenAI允许用户提供类似字节的对象,所以我希望能用pickle.dumps来实现这个功能。

import pickle
df = pd.DataFrame({
    "A": [1, 2, 3, 4, 5],
    "B": [6, 7, 8, 9, 10],
    "C": [11, 12, 13, 14, 15],
})

file = client.files.create(
    file=pickle.dumps(df),
    purpose="assistants"
)

这个代码片段在使用OpenAI客户端时没有报错,但我通过AzureOpenAI客户端时却遇到了问题,得到了下面的结果。

openai.BadRequestError: Error code: 400 - {'error': {'message': "Invalid file format. Supported formats: ['c', 'cpp', 'csv', 'docx', 'html', 'java', 'json', 'md', 'pdf', 'php', 'pptx', 'py', 'rb', 'tex', 'txt', 'css', 'jpeg', 'jpg', 'js', 'gif', 'png', 'tar', 'ts', 'xlsx', 'xml', 'zip']", 'type': 'invalid_request_error', 'param': None, 'code': None}}

1 个回答

0

看起来AzureOpenAI可以接受从io.BytesIO编码的字节对象。所以,对于一个数据框(dataframe),一个简单的方法就是使用io.BytesIO来处理数据框的字符串表示。

import io
df = pd.DataFrame({
    "A": [1, 2, 3, 4, 5],
    "B": [6, 7, 8, 9, 10],
    "C": [11, 12, 13, 14, 15],
})

in_memory_df = io.BytesIO(df.to_csv().encode())

file = client.files.create(
    file=in_memory_df,
    purpose="assistants"
)

另外,(file_name, bytes_contents, file_type)这样的元组也是可以接受的,所以这个代码片段也是有效的,并且更加明确。

file = client.files.create(
    file=('name_dataset_here.csv', in_memory_df, 'text/csv'),
    purpose="assistants"
)

撰写回答