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?;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

营赢盈英

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值