OpenAI-C ++庫是一個社區維護的庫,可從用C ++語言編寫的應用程序來方便地訪問OpenAI API。
該庫很小,帶有兩個標題文件(僅當您已經使用Nlohmann JSON時)。
沒有特別的要求。您應該已經擁有這些:
庫應在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模型 |
該庫由兩個文件組成:包括/openai/openai.hpp,包括/openai/nlohmann/json.hpp。
只需複制項目中的inclage/OpenAICPP文件夾,您就可以在代碼中使用#include "openai.hpp" 。僅此而已。
注意: OpenAi-CPP使用nlohmann JSON,可在
include/json.hpp中使用。隨意使用自己的副本以更快的編譯時間構建。
需要使用您的帳戶的秘密密鑰配置該庫,該密鑰可在網站上使用。建議在使用庫之前設置OPENAI_API_KEY環境變量(或者您還可以直接在代碼中設置API鍵):
export OPENAI_API_KEY= ' sk-... '以下代碼可在示例/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的打字,因此您將獲得後者提供的所有功能(轉換,喜歡訪問,...)。
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會話的兩種方法,以便您可以隨時隨地使用它。
這是默認行為。 OpenAi-CPP提供免費的方便功能: openai::start(const std::string& token)和openai::instance() 。初始化和配置OpenAI-CPP實例:
auto & openai = openai::start();當您處於另一個範圍並丟失了openai參考時,您可以再次抓住它:
auto & openai = openai::instance();這可能不是建議的方式,但是由於我們通常只想處理一個OpenAI實例(一個令牌),因此這種方法非常方便。
另一種方法是通過參考,將其存儲並在需要時調用適當的方法來傳遞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);
}您可以使用示例/09-instances.cpp中所示的std :: Referent_wrapper。
如果您必須使用不同的秘密密鑰管理幾個OpenAi-CPP實例,則此策略將很有用。
注意:如果您使用的是WSL,那麼您並不關心以下內容。
根據Windows上的安裝捲髮
Windows 10隨著版本1804以來與操作系統捆綁在一起的捲發工具
但是,您可能仍然很難處理cmake拋出的libcurl Could NOT find CURL (missing: CURL_LIBRARY CURL_INCLUDE_DIR) 。
您可以嘗試按照窗口上的捲曲安裝捲曲提出的兩種方式遵循一種。
解決此問題的另一種方法是在此處捕獲Windows的捲曲版本,請在路徑中可見的適當文件夾中復制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++ ..
make麻省理工學院
這項工作主要是受到CPR的鬆弛和捲曲包裝代碼的啟發。
奧里亞