OpenAI-C ++ Library adalah perpustakaan yang dipelihara komunitas yang menyediakan akses mudah ke API OpenAI dari aplikasi yang ditulis dalam bahasa C ++.
Perpustakaannya kecil dengan dua file header (hanya satu jika Anda sudah menggunakan nlohmann json).
Tidak ada persyaratan khusus. Anda seharusnya sudah memilikinya:
Perpustakaan harus mengimplementasikan semua permintaan pada referensi OpenAI. Jika ada yang hilang (karena pembaruan), jangan ragu untuk membuka masalah.
| Referensi API | Metode | File contoh |
|---|---|---|
| Model API | Daftar model ✅ | 1-model.cpp |
| Model API | Retrieve Model ✅ | 1-model.cpp |
| Penyelesaian API | Buat Penyelesaian ✅ | 2-completion.cpp |
| API Edits | Buat penyelesaian | 3-edit.cpp |
| Gambar API | Buat gambar ✅ | 4-image.cpp |
| Gambar API | Buat gambar edit ✅ | 4-image.cpp |
| Gambar API | Buat variasi gambar ✅ | 4-image.cpp |
| Embeddings API | Buat embeddings ✅ | 5-Embedding.cpp |
| File API | Daftar file ✅ | 6 file.cpp |
| File API | Unggah file ✅ | 6 file.cpp |
| File API | Hapus file ✅ | 6 file.cpp |
| File API | Ambil file ✅ | 6 file.cpp |
| File API | Ambil Konten File ✅ | 6 file.cpp |
| Tunes API | Buat fine-tune ✅ | 7-fine-tune.cpp |
| Tunes API | Daftar fine-tune ✅ | 7-fine-tune.cpp |
| Tunes API | Ambil fine-tune ✅ | 7-fine-tune.cpp |
| Tunes API | Batalkan fine-tune ✅ | 7-fine-tune.cpp |
| Tunes API | Daftar acara fine-tune ✅ | 7-fine-tune.cpp |
| Tunes API | Hapus model fine-tune ✅ | 7-fine-tune.cpp |
| Obrolan API | Buat Obrolan Penyelesaian ✅ | 10-chat.cpp |
| Audio API | Buat transkripsi ✅ | 11-audio.cpp |
| Audio API | Buat terjemahan ✅ | 11-audio.cpp |
| API Moderasi | Buat moderasi ✅ | 12-moderation.cpp |
Perpustakaan terdiri dari dua file: termasuk/openai/openai.hpp dan termasuk/openai/nlohmann/json.hpp.
Cukup salin folder include/openaicpp di proyek Anda dan Anda dapat menggunakan #include "openai.hpp" dalam kode Anda. Itu saja.
Catatan: OpenAI-CPP menggunakan Nlohmann Json yang tersedia di
include/json.hpp. Jangan ragu untuk menggunakan salinan Anda sendiri untuk pembuatan waktu kompilasi yang lebih cepat.
Perpustakaan perlu dikonfigurasi dengan kunci rahasia akun Anda yang tersedia di situs web. Disarankan untuk mengatur variabel lingkungan OPENAI_API_KEY Anda sebelum menggunakan pustaka (atau Anda juga dapat mengatur tombol API secara langsung dalam kode):
export OPENAI_API_KEY= ' sk-... 'Kode berikut tersedia di contoh/00-showcase.cpp.
# include " openai.hpp "
# include < iostream >
int main () {
openai::start (); // Will use the api key provided by `OPENAI_API_KEY` environment variable
// openai::start("your_API_key", "optional_organization"); // Or you can handle it yourself
auto completion = openai::completion (). create ( R"( {
"model": "text-davinci-003",
"prompt": "Say this is a test",
"max_tokens": 7,
"temperature": 0
} )" _json); // Using user-defined (raw) string literals
std::cout << " Response is: n " << completion. dump ( 2 ) << ' n ' ;
auto image = openai::image (). create ({
{ " prompt " , " A cute koala playing the violin " },
{ " n " , 1 },
{ " size " , " 512x512 " }
}); // Using initializer lists
std::cout << " Image URL is: " << image[ " data " ][ 0 ][ " url " ] << ' n ' ;
}Output yang diterima terlihat seperti:
>> request: https://api.openai.com/v1/completions { " max_tokens " :7, " model " : " text-davinci-003 " , " prompt " : " Say this is a test " , " temperature " :0}
Response is:
{
" choices " : [
{
" finish_reason " : " length " ,
" index " : 0,
" logprobs " : null,
" text " : " nnThis is indeed a test "
}
],
" created " : 1674121840,
" id " : " cmpl-6aLr6jPhtxpLyu9rNsJFKDHU3SHpe " ,
" model " : " text-davinci-003 " ,
" object " : " text_completion " ,
" usage " : {
" completion_tokens " : 7,
" prompt_tokens " : 5,
" total_tokens " : 12
}
}
>> request: https://api.openai.com/v1/images/generations { " n " :1, " prompt " : " A cute koala playing the violin " , " size " : " 512x512 " }
Image URL is: " https://oaidalleapiprodscus.blob.core.windows.net/private/org-WaIMDdGHNwJiXAmjegDHE6AM/user-bCrYDjR21ly46316ZbdgqvKf/img-sysAePXF2c8yu28AIoZLLmEG.png?st=2023-01-19T20%3A35%3A19Z&se=2023-01-19T22%3A35%3A19Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-01-19T18%3A10%3A41Z&ske=2023-01-20T18%3A10%3A41Z&sks=b&skv=2021-08-06&sig=nWkcGTTCsWigHHocYP%2BsyiV5FJL6izpAe3OVvX1GLuI%3D " 
Sejak Openai::Json adalah typedef ke nlohmann :: json, Anda mendapatkan semua fitur yang disediakan oleh yang terakhir (konversi, STL seperti akses, ...).
mkdir build && cd build
cmake .. && make
examples/[whatever] Dalam proyek Anda, jika Anda ingin mendapatkan output verbose seperti saat menjalankan contoh, Anda dapat mendefinisikan #define OPENAI_VERBOSE_OUTPUT .
Secara default, OpenAI-CPP akan melempar pengecualian kesalahan runtime jika permintaan CURL tidak berhasil. Anda bebas menangani pengecualian ini seperti yang Anda suka. Anda dapat mencegah pengecualian melempar dengan mengatur setThrowException(false) (lihat contoh dalam contoh/09-instances.cpp). Jika Anda melakukannya, peringatan akan ditampilkan sebagai gantinya.
Anda dapat menggunakan metode openai::post() atau openai::get() untuk sepenuhnya mengontrol apa yang Anda kirim (misalnya dapat bermanfaat ketika metode baru dari API OpenAI tersedia dan belum disediakan oleh OpenAI-CPP ).
Berikut adalah dua pendekatan untuk tetap hidup sesi OpenAI-CPP dalam program Anda sehingga Anda dapat menggunakannya kapan saja, di mana saja.
Ini adalah perilaku default. OpenAI-CPP menyediakan fungsi yang nyaman gratis: openai::start(const std::string& token) dan openai::instance() . Inisialisasi dan konfigurasikan instance OpenAI-CPP dengan:
auto & openai = openai::start(); Ketika Anda berada di ruang lingkup lain dan Anda telah kehilangan referensi openai , Anda dapat mengambilnya lagi dengan:
auto & openai = openai::instance();Ini mungkin bukan cara yang disarankan tetapi karena kita umumnya hanya ingin menangani satu instance OpenAI (satu token), pendekatan ini sangat nyaman.
Pendekatan lain adalah lulus instance OpenAI dengan referensi, menyimpannya, dan memanggil metode yang sesuai saat dibutuhkan.
void bar (openai::OpenAI& openai) {
openai. completion . create ({
{ " model " , " text-davinci-003 " },
{ " prompt " , " Say bar() function called " }
});
}
int main () {
openai::OpenAI openai_instance{ " your_api_key " };
bar (openai_instance);
}Anda dapat menggunakan std :: referensi_wrapper seperti yang ditunjukkan dalam contoh/09-instances.cpp.
Strategi ini berguna jika Anda harus mengelola beberapa contoh OpenAI-CPP dengan kunci rahasia yang berbeda.
Catatan: Jika Anda menggunakan WSL maka Anda tidak khawatir dengan yang berikut ini.
Menurut instal curl di windows,
Windows 10 dilengkapi dengan alat keriting yang dibundel dengan sistem operasi sejak versi 1804
Namun, Anda mungkin masih mengalami kesulitan menangani libcurl di mana lemparan cmake Could NOT find CURL (missing: CURL_LIBRARY CURL_INCLUDE_DIR) .
Anda dapat mencoba mengikuti satu 2 cara yang diusulkan oleh Curl Install Curl pada Windows.
Cara lain untuk menyelesaikan ini adalah dengan mengambil versi Curl untuk Windows di sini, salin konten include dalam folder yang tepat yang tersedia terlihat di jalur Anda (misalnya jika di instalasi git Anda [...]/Git/mingw64/include/ ). Anda juga perlu mengambil file curl.lib dan libcurl.dll dari sini dan menyalinnya di folder yang sesuai (misalnya jika di instalasi git Anda [...]/Git/mingw64/lib/ ).
mkdir build && cd build
cmake .. -DCMAKE_GENERATOR_PLATFORM=x64
cmake --build .
cmake --build . --target 00-showcase # For a specific targetAtau jika Anda lebih suka menggunakan GNU GCC di Windows
cmake -G " MSYS Makefiles " -D CMAKE_CXX_COMPILER=g++ ..
makeMit
Karya ini terutama terinspirasi oleh Slacking dan kode bungkus curl dari CPR.
Olrea