OpenAI-C ++ライブラリは、C ++言語で記述されたアプリケーションからOpenAI APIへの便利なアクセスを提供するコミュニティにメンテナンスしたライブラリです。
ライブラリは2つのヘッダーファイルを備えています(既にNlohmann JSONを使用している場合は1つだけ)。
特別な要件はありません。あなたはすでにこれらを持っている必要があります:
ライブラリは、OpenAI参照にすべてのリクエストを実装する必要があります。 (更新のため)がない場合は、お気軽に問題を開いてください。
| APIリファレンス | 方法 | 例ファイル |
|---|---|---|
| APIモデル | モデルをリスト✅ | 1-model.cpp |
| APIモデル | モデルを取得✅ | 1-model.cpp |
| API完了 | 完了を作成します | 2-completion.cpp |
| API編集 | 完了を作成します | 3-edit.cpp |
| API画像 | 画像を作成します | 4-image.cpp |
| API画像 | 画像編集を作成します | 4-image.cpp |
| API画像 | 画像のバリエーションを作成します | 4-image.cpp |
| API埋め込み | 埋め込みを作成します | 5-embedding.cpp |
| APIファイル | リストファイル✅ | 6-file.cpp |
| APIファイル | ファイルをアップロードします | 6-file.cpp |
| APIファイル | ファイルを削除します | 6-file.cpp |
| APIファイル | ファイルを取得します | 6-file.cpp |
| APIファイル | ファイルのコンテンツを取得します | 6-file.cpp |
| APIファインチューンズ | 微調整を作成します | 7-fine-tune.cpp |
| APIファインチューンズ | 微調整✅をリストします | 7-fine-tune.cpp |
| APIファインチューンズ | 微調整を取得します | 7-fine-tune.cpp |
| APIファインチューンズ | キャンセル微調整✅ | 7-fine-tune.cpp |
| APIファインチューンズ | 微調整イベント✅ | 7-fine-tune.cpp |
| APIファインチューンズ | 微調整モデルを削除します | 7-fine-tune.cpp |
| APIチャット | チャットの完了を作成します | 10-chat.cpp |
| APIオーディオ | 転写を作成します | 11-Audio.cpp |
| APIオーディオ | 翻訳を作成します | 11-Audio.cpp |
| APIモデレート | モデレートを作成します | 12-moderation.cpp |
ライブラリは、include/openai/openai.hppの2つのファイルで構成されています。
プロジェクトにinclude/openaicppフォルダーをコピーするだけで、コードに#include "openai.hpp"を使用できます。それだけです。
注: Openai-CPPは、
include/json.hppで利用可能なnlohmann jsonを使用します。より速いコンパイル時間ビルドのために、独自のコピーを自由に使用してください。
ライブラリは、ウェブサイトで利用可能なアカウントのシークレットキーで構成する必要があります。ライブラリを使用する前に、 OPENAI_API_KEY環境変数を設定することをお勧めします(または、APIキーをコードに直接設定することもできます):
export OPENAI_API_KEY= ' sk-... '次のコードは、Examples/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 ' ;
}受信した出力は次のように見えます:
>> 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 " 
Openai::Jsonはnlohmann :: Jsonのtypedefであるため、後者の機能(変換、STL Like Access、...)が提供するすべての機能を取得します。
mkdir build && cd build
cmake .. && make
examples/[whatever]プロジェクトでは、例を実行するときに冗長出力を取得したい場合は、 #define OPENAI_VERBOSE_OUTPUTを定義できます。
デフォルトでは、Curl要求が成功しない場合、 OpenAI-CPPはランタイムエラーの例外をスローします。これらの例外を好きなように自由に処理できます。 setThrowException(false)を設定することにより、スロー例外を防ぐことができます(例/09-instances.cppの例を参照)。その場合、代わりに警告が表示されます。
openai::post()またはopenai::get()メソッドを使用して、送信したものを完全に制御できます(Openai APIの新しい方法が利用可能であり、 OpenAI-CPPがまだ提供していない場合に役立ちます)。
プログラムのOpenAI-CPPセッションを生き続けるための2つのアプローチを紹介するので、いつでもどこでも使用できます。
これがデフォルトの動作です。 Openai-CPPは無料の便利な機能を提供します: openai::start(const std::string& token)およびopenai::instance() 。 Openai-CPPインスタンスを初期化して構成します。
auto & openai = openai::start();別の範囲にあり、 openaiリファレンスを紛失した場合、次のように再びつかむことができます。
auto & openai = openai::instance();それは推奨される方法ではないかもしれませんが、一般的に1つのOpenAIインスタンス(1つのトークン)のみを処理したいので、このアプローチは非常に便利です。
他のアプローチは、参照によってOpenAIインスタンスを渡し、それを保存し、必要に応じて適切な方法を呼び出すことです。
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);
}examples/09-instances.cppに示すように、std :: reference_wrapperを使用できます。
この戦略は、異なる秘密キーを使用していくつかのOpenAI-CPPインスタンスを管理する必要がある場合に役立ちます。
注:WSLを使用している場合は、以下に関心がありません。
WindowsのインストールCurlによると、
Windows 10には、バージョン1804以降、オペレーティングシステムにバンドルされたカールツールが付属しています
ただし、CmakeスローがCould NOT find CURL (missing: CURL_LIBRARY CURL_INCLUDE_DIR) 。
Windowsにカールインストールカールによって提案された2つの方法に従うことができます。
これを解決する別の方法は、ここでWindowsのCurlバージョンをつかみ、パスで表示可能な適切なフォルダーのincludeをコピーすることです(たとえば、gitインストール[...]/Git/mingw64/include/ )。また、ここからcurl.libとlibcurl.dllファイルをつかみ、適切なフォルダーにコピーする必要があります(たとえば、gitインストール[...]/Git/mingw64/lib/ )。
mkdir build && cd build
cmake .. -DCMAKE_GENERATOR_PLATFORM=x64
cmake --build .
cmake --build . --target 00-showcase # For a specific targetまたは、WindowsでGNU GCCを使用することを好む場合
cmake -G " MSYS Makefiles " -D CMAKE_CXX_COMPILER=g++ ..
makemit
この作業は、主にSlackingとCPRのCurlラッパーコードに触発されています。
オルレア