How do you send files to the OpenAI API?
题意:你如何向 OpenAI API 发送文件
问题背景:
For fun I wanted to try to make a tool to ask chatgpt to document rust files. I found an issue, in that the maximum message length the API allows seems to be 2048 characters.
为了好玩,我想尝试制作一个工具,让 ChatGPT 生成 Rust 文件的文档。我发现了一个问题,API 允许的最大消息长度似乎是 2048 个字符。
It seems that the OpenAI API allows you to send files, so I was hoping that by sending the files to the server the model would have the context it needs to generate the comments.
看起来 OpenAI API 允许发送文件,所以我希望通过将文件发送到服务器,模型可以获得生成注释所需的上下文
However, I don't seem to be able to do so, I tried this:
然而,我似乎无法做到这一点,我尝试了以下方法
use std::fmt::Write;
use std::fs;
use std::io;
use std::io::Read;
use chatgpt::prelude::*;
use clap::Parser;
use syn;
use syn::Item;
use reqwest;
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
struct Args
{
/// Path to the source code to document
#[arg(short, long)]
file_path: String,
}
fn main()
{
let args = Args::parse();
let mut file = std::fs::File::open(args.file_path).unwrap();
let mut content = String::new();
file.read_to_string(&mut content).unwrap();
let ast = syn::parse_file(&content).unwrap();
let mut input_buffer = String::new();
// Getting the API key here
let key = "My key that I have replaced for obvious reasons";
{
// Create a reqwest client
let client = reqwest::blocking::Client::new();
// Make a POST request to the OpenAI API
let response = client
.post("https://api.openai.com/v1/files")
.header("Authorization", "Bearer My key that I have replaced for obvious reasons")
.header("Content-Type", "application/json")
.body(content.clone())
.send().unwrap();
// Check if the request was successful
if response.status().is_success() {
println!("File uploaded successfully!");
} else {
println!("Failed to upload file. Status code: {}", response.status());
}
std::mem::forget(client);
std::mem::forget(response);
}
}
The response I get is: 我得到的响应是:
Failed to upload file. Status code: 415 Unsupported Media Type
I am not sure what I am doing wrong. I have also tried changing the content type to text/plain
, I get the same error.
我不确定我哪里做错了。我还尝试将内容类型更改为 text/plain
,但仍然遇到相同的错误
问题解决:
The async-openai crate has Files, which allows you to upload files to OpenAI:
async-openai
crate 提供了 Files
,可以让你上传文件到 OpenAI
let client = Client::new();
let request = CreateFileRequest {
input: "path/to/my/file.bin".into(),
purpose: "test".into(),
};
let response = client.files().create (request).await?;