Библиотека OpenAI-C ++-это библиотека , обслуживаемая сообществом , которая обеспечивает удобный доступ к API OpenAI из приложений, написанных на языке C ++.
Библиотека небольшая с двумя файлами заголовка (только один, если вы уже используете Nlohmann JSON).
Нет особого требования. У вас уже должно быть это:
Библиотека должна реализовать все запросы на ссылки OpenAI. Если таковые имеются (из -за обновления), не стесняйтесь открывать проблему.
| Ссылка на API | Метод | Пример файла |
|---|---|---|
| Модели API | Список моделей ✅ | 1-model.cpp |
| Модели API | Получить модель ✅ | 1-model.cpp |
| Завершение API | Создать завершение ✅ | 2-Сопротивление. 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 Audio | Создать транскрипцию ✅ | 11-audio.cpp |
| API Audio | Создать перевод ✅ | 11-audio.cpp |
| API умеренность | Создать умеренность ✅ | 12-Moderation.cpp |
Библиотека состоит из двух файлов: включать/openai/openai.hpp и включать/openai/nlohmann/json.hpp.
Просто скопируйте папку include/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 является Typedef для nlohmann :: json, вы получаете все функции, предоставленные последним (конверсии, как доступ, ...).
mkdir build && cd build
cmake .. && make
examples/[whatever] В вашем проекте, если вы хотите получить многословный выход, например, при запуске примеров, вы можете определить #define OPENAI_VERBOSE_OUTPUT .
По умолчанию OpenAI-CPP выставит исключение ошибки времени выполнения, если запрос Curl не удастся. Вы можете справиться с этими исключениями так, как вам нравится. Вы можете предотвратить исключения броска, установив setThrowException(false) (см. Пример в примерах/09-instances.cpp). Если вы сделаете это, вместо этого будет отображаться предупреждение.
Вы можете использовать методы openai::post() или openai::get() , чтобы полностью контролировать то, что вы отправляете (например, может быть полезен, когда доступен новый метод от API OpenAI и еще не предоставлен 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);
}Вы можете использовать std :: reference_wrapper, как показано в примерах/09-instances.cpp.
Эта стратегия полезна, если вам нужно управлять несколькими экземплярами OpenAI-CPP с различными секретными ключами.
Примечание. Если вы используете WSL, то вас не беспокоит следующее.
Согласно установке Curl на Windows,
Windows 10 поставляется с инструментом Curl, связанного с операционной системой с версии 1804
Тем не менее, у вас все еще могут возникнуть трудности с обработкой Libcurl, где броски Cmake Could NOT find CURL (missing: CURL_LIBRARY CURL_INCLUDE_DIR) .
Вы можете попытаться следовать за двумя способами, представленными с помощью Curl Install Curl на Windows.
Еще один способ решить это - захватить версию для Curl для 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Или если вы предпочитаете использовать GNU GCC в Windows
cmake -G " MSYS Makefiles " -D CMAKE_CXX_COMPILER=g++ ..
makeГрань
Эта работа была в основном вдохновлена расслаблением и кодом обертки скручивания от CPR.
Ольреа