当前位置: 首页 > 知识库问答 >
问题:

openai Assistants Upload file 400 Invalid file format?

周和歌
2023-11-12

Uploading a .json file with Lambda results in an error.

static async CreateLocalFile({ file, user_id, date, type }) {      try {         const filePath = path.join("/tmp", `${user_id}-${type}-${date}.json`);         const jsonData = JSON.stringify(file);         fs.writeFileSync(filePath, jsonData, { encoding: "utf8" });         return filePath;      } catch (error) {         console.error("Error creating local file:", error.message);         throw error;      }   }   static async UploadFiles(params) {      try {         const filePath = await this.CreateLocalFile(params);         const files = await openai.files.create({            file: fs.createReadStream(filePath),            purpose: "assistants",         });         return files;      } catch (error) {         console.error("Error uploading file:", error.message);         throw error;      }   }

共有1个答案

葛俊
2023-11-12

从你提供的代码和错误信息来看,问题可能出现在你试图上传的文件格式上。你试图上传的是一个 .json 文件,但根据错误信息提示,你可能正在使用一个不正确的文件格式进行上传。

在 OpenAI 的 API 中,files.create 方法需要的 file 参数应该是一个可读流(Readable Stream),这通常是由一个文件系统(fs)模块的 createReadStream 方法创建的。然而,从你提供的代码中看,你正在将一个 JSON 对象转换成字符串,并将其写入一个文件,然后再将这个文件作为一个可读流上传。

在大多数情况下,你应该直接将文件流(stream)上传给 OpenAI,而不是首先将文件内容转换成字符串并写入磁盘。你可以尝试使用 fs.createReadStream 直接从源文件创建一个流,而不是先将文件内容转换成字符串。

这是一个改进的例子:

const { createWriteStream, fs } = require('fs');const openai = require('openai-api'); // Assuming you have this OpenAI moduleconst path = require('path');async function UploadFiles(params) {   try {      const filePath = path.join("/tmp", `${params.user_id}-${params.type}-${params.date}.json`);      const writeStream = fs.createWriteStream(filePath);      const files = await openai.files.create({         file: writeStream,         purpose: "assistants",      });      return files;   } catch (error) {      console.error("Error uploading file:", error.message);      throw error;   }}

这个代码片段将创建一个可写流,然后将其传递给 openai.files.create 方法。这样做的前提是,你的源文件数据是一个可读流(例如,你可能已经从某个地方获取了一个文件流)。如果不是这样,你可能需要首先读取源文件,创建一个可读流,然后再将其传递给 openai.files.create 方法。

 类似资料:

相关问答

相关文章

相关阅读