La bibliothèque OpenAI-C ++ est une bibliothèque entretenue par la communauté qui offre un accès pratique à l'API OpenAI à partir des applications écrites dans la langue C ++.
La bibliothèque est petite avec deux fichiers d'en-tête (un seul si vous utilisez déjà Nlohmann JSON).
Aucune exigence spéciale. Vous devriez déjà l'avoir:
La bibliothèque doit implémenter toutes les demandes sur les références OpenAI. S'il est manquant (en raison d'une mise à jour), n'hésitez pas à ouvrir un problème.
| Référence de l'API | Méthode | Exemple de fichier |
|---|---|---|
| Modèles API | Modèles de liste ✅ | 1-modèle.cpp |
| Modèles API | Récupérer le modèle ✅ | 1-modèle.cpp |
| API ACHELIONS | Créer l'achèvement ✅ | 2-completion.cpp |
| Modifications de l'API | Créer l'achèvement | 3-edit.cpp |
| Images API | Créer une image ✅ | 4-IMAGE.CPP |
| Images API | Créer l'image Modifier ✅ | 4-IMAGE.CPP |
| Images API | Créer une variation d'image ✅ | 4-IMAGE.CPP |
| API Embeddings | Créer des intégres ✅ | 5-Embedding.cpp |
| Fichiers API | Lister le fichier ✅ | 6-file.cpp |
| Fichiers API | Télécharger le fichier ✅ | 6-file.cpp |
| Fichiers API | Supprimer le fichier ✅ | 6-file.cpp |
| Fichiers API | Récupérer le fichier ✅ | 6-file.cpp |
| Fichiers API | Récupérer le contenu du fichier ✅ | 6-file.cpp |
| API FINES | Créer une amende ✅ ✅ | 7-fine-tune.cpp |
| API FINES | Liste Fine-Tune ✅ | 7-fine-tune.cpp |
| API FINES | Récupérer Fine-tune ✅ | 7-fine-tune.cpp |
| API FINES | Annuler Fine-Tune ✅ | 7-fine-tune.cpp |
| API FINES | Énumérer les événements fins ✅ | 7-fine-tune.cpp |
| API FINES | Supprimer le modèle d'adaptation ✅ | 7-fine-tune.cpp |
| Chat API | Créer l'achèvement du chat ✅ | 10 chat.cpp |
| Audio API | Créer une transcription ✅ | 11-audio.cpp |
| Audio API | Créer une traduction ✅ | 11-audio.cpp |
| Modération de l'API | Créer une modération ✅ | 12-moderation.cpp |
La bibliothèque se compose de deux fichiers: inclure / openai / openai.hpp et inclure / openai / nlohmann / json.hpp.
Copiez simplement le dossier Inclure / Openaicpp dans votre projet et vous pouvez utiliser #include "openai.hpp" dans votre code. C'est tout.
Remarque: OpenAI-CPP utilise Nlohmann JSON qui est disponible dans
include/json.hpp. N'hésitez pas à utiliser votre propre copie pour une construction de temps de compilation plus rapide.
La bibliothèque doit être configurée avec la clé secrète de votre compte qui est disponible sur le site Web. Il est recommandé de définir votre variable d'environnement OPENAI_API_KEY avant d'utiliser la bibliothèque (ou vous pouvez également définir la clé API directement dans le code):
export OPENAI_API_KEY= ' sk-... 'Le code suivant est disponible sur Exemples / 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 ' ;
}La sortie reçue ressemble:
>> 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 " 
Étant donné que Openai::Json est un typedef pour un nlohmann :: json, vous obtenez toutes les fonctionnalités fournies par ce dernier (Conversions, STL Like Access, ...).
mkdir build && cd build
cmake .. && make
examples/[whatever] Dans votre projet, si vous souhaitez obtenir une sortie verbale comme lors de l'exécution des exemples, vous pouvez définir #define OPENAI_VERBOSE_OUTPUT .
Par défaut, OpenAI-CPP lancera une exception d'erreur d'exécution si la demande de curl ne réussit pas. Vous êtes libre de gérer ces exceptions comme vous le souhaitez. Vous pouvez empêcher les exceptions de lancer en définissant setThrowException(false) (voir l'exemple dans Exemples / 09-stances.cpp). Si vous faites cela, un avertissement sera affiché à la place.
Vous pouvez utiliser les méthodes openai::post() ou openai::get() pour contrôler pleinement ce que vous envoyez (par exemple peut être utile lorsqu'une nouvelle méthode de l'API OpenAI est disponible et non fournie par OpenAI-CPP ).
Voici deux approches pour garder en vie la session OpenAI-CPP dans votre programme afin que vous puissiez l'utiliser à tout moment, n'importe où.
C'est le comportement par défaut. OpenAI-CPP fournit des fonctions pratiques gratuites: openai::start(const std::string& token) et openai::instance() . Initialiser et configurer l'instance OpenAI-CPP avec:
auto & openai = openai::start(); Lorsque vous êtes dans une autre portée et que vous avez perdu la référence openai , vous pouvez le saisir à nouveau avec:
auto & openai = openai::instance();Ce n'est peut-être pas le moyen recommandé, mais comme nous voulons généralement gérer une seule instance OpenAI (un jeton), cette approche est très pratique.
Une autre approche consiste à passer l'instance OpenAI par référence, à la stocker et à appeler les méthodes appropriées en cas de besoin.
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);
}Vous pouvez utiliser un std :: référence_wrapper comme indiqué dans Exemples / 09-stances.cpp.
Cette stratégie est utile si vous devez gérer plusieurs instances OpenAI-CPP avec différentes clés secrètes.
Remarque: Si vous utilisez WSL, vous n'êtes pas préoccupé par ce qui suit.
Selon Installer Curl sur Windows,
Windows 10 est livré avec l'outil Curl avec le système d'exploitation depuis la version 1804
Cependant, vous pourriez toujours avoir des difficultés à gérer libcurl où les lancers Cmake Could NOT find CURL (missing: CURL_LIBRARY CURL_INCLUDE_DIR) .
Vous pouvez essayer de suivre une des 2 façons proposées par la boucle d'installation de Curl sur Windows.
Une autre façon de résoudre ce problème est de saisir la version Curl pour Windows ici, copier le contenu de include dans les dossiers appropriés disponibles visibles sur votre chemin (par exemple, si dans votre installation GIT [...]/Git/mingw64/include/ ). Vous devez également saisir les fichiers curl.lib et libcurl.dll à partir d'ici et les copier dans des dossiers appropriés (par exemple, si dans votre installation git [...]/Git/mingw64/lib/ ).
mkdir build && cd build
cmake .. -DCMAKE_GENERATOR_PLATFORM=x64
cmake --build .
cmake --build . --target 00-showcase # For a specific targetOu si vous préférez utiliser GNU GCC sur Windows
cmake -G " MSYS Makefiles " -D CMAKE_CXX_COMPILER=g++ ..
makeMit
Ce travail a été principalement inspiré par le relâchement et le code de wrapper curl de la RCR.
Olrea