OpenAI-C ++ Biblioteca es una biblioteca mantenida por la comunidad que proporciona un acceso conveniente a la API de OpenAI desde las aplicaciones escritas en el idioma C ++.
La biblioteca es pequeña con dos archivos de encabezado (solo uno si ya usa Nlohmann JSON).
No hay requisito especial. Ya deberías tener estos:
La biblioteca debe implementar todas las solicitudes en referencias de OpenAI. Si falta alguno (debido a una actualización), no dude en abrir un problema.
| Referencia de API | Método | Archivo de ejemplo |
|---|---|---|
| Modelos API | Listas de modelos ✅ | 1-model.cpp |
| Modelos API | Recuperar modelo ✅ | 1-model.cpp |
| Finalización de la API | Crear finalización ✅ | 2-Completo.cpp |
| Ediciones API | Crear finalización | 3-edit.cpp |
| Imágenes API | Crear imagen ✅ | 4-Image.cpp |
| Imágenes API | Crear imagen Editar ✅ | 4-Image.cpp |
| Imágenes API | Crear variación de imagen ✅ | 4-Image.cpp |
| Incrustaciones de API | Crea incrustaciones ✅ | 5-incrustación.cpp |
| Archivos API | Lista de archivo ✅ | 6-archivo.cpp |
| Archivos API | Archivo de carga ✅ | 6-archivo.cpp |
| Archivos API | Eliminar archivo ✅ | 6-archivo.cpp |
| Archivos API | Recuperar archivo ✅ | 6-archivo.cpp |
| Archivos API | Recuperar contenido del archivo ✅ | 6-archivo.cpp |
| API Tunes finos | Crear ajuste fino ✅ | 7-fine-tune.cpp |
| API Tunes finos | Lista de ajuste fino ✅ | 7-fine-tune.cpp |
| API Tunes finos | Recuperar el ajuste fino ✅ | 7-fine-tune.cpp |
| API Tunes finos | Cancelar el ajuste ✅ ✅ | 7-fine-tune.cpp |
| API Tunes finos | Lista de eventos de ajuste fino ✅ | 7-fine-tune.cpp |
| API Tunes finos | Eliminar modelo de ajuste fino ✅ | 7-fine-tune.cpp |
| Chat API | Crea la finalización del chat ✅ | 10-chat.cpp |
| Audio API | Crear transcripción ✅ | 11-Audio.cpp |
| Audio API | Crear traducción ✅ | 11-Audio.cpp |
| Moderación de API | Crear moderación ✅ | 12-moderación.cpp |
La biblioteca consta de dos archivos: incluir/OpenAi/OpenAI.HPP e incluir/OpenAi/Nlohmann/Json.hpp.
Simplemente copie la carpeta incluir/OpenAicpp en su proyecto y puede usar #include "openai.hpp" en su código. Eso es todo.
Nota: OpenAI-CPP utiliza Nlohmann JSON, que está disponible en
include/json.hpp. Siéntase libre de usar su propia copia para una compilación de compilación más rápida.
La biblioteca debe configurarse con la clave secreta de su cuenta que está disponible en el sitio web. Se recomienda establecer su variable de entorno OPENAI_API_KEY antes de usar la biblioteca (o también puede configurar la tecla API directamente en el código)::
export OPENAI_API_KEY= ' sk-... 'El siguiente código está disponible en ejemplos/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 salida recibida parece:
>> 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 " 
Dado que Openai::Json es un typedef para un nlohmann :: json, obtienes todas las características proporcionadas por la última (conversiones, stl como acceso, ...).
mkdir build && cd build
cmake .. && make
examples/[whatever] En su proyecto, si desea obtener una salida detallada como al ejecutar los ejemplos, puede definir #define OPENAI_VERBOSE_OUTPUT .
De manera predeterminada, OpenAI-CPP organizará una excepción de error de tiempo de ejecución si la solicitud CURL no tiene éxito. Eres libre de manejar estas excepciones como quieras. Puede prevenir las excepciones de lanzamiento estableciendo setThrowException(false) (ver ejemplo en ejemplos/09-instances.cpp). Si hace eso, se mostrará una advertencia.
Puede usar los métodos openai::post() o openai::get() para controlar completamente lo que está enviando (por ejemplo, puede ser útil cuando todavía está disponible un nuevo método de OpenAI API y aún no proporciona OpenAI-CPP ).
Aquí hay dos enfoques para mantener viva la sesión Operai-CPP en su programa para que pueda usarlo en cualquier momento y en cualquier lugar.
Este es el comportamiento predeterminado. OpenAI-CPP proporciona funciones convenientes gratuitas: openai::start(const std::string& token) y openai::instance() . Inicialice y configure la instancia de OpenAI-CPP con:
auto & openai = openai::start(); Cuando estás en otro alcance y has perdido la referencia openai , puedes tomarla nuevamente con:
auto & openai = openai::instance();Puede que no sea la forma recomendada, pero dado que generalmente queremos manejar solo una instancia de OpenAI (un token), este enfoque es muy conveniente.
Un otro enfoque es pasar la instancia de OpenAI por referencia, almacenarla y llamar a los métodos apropiados cuando sea necesario.
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);
}Puede usar un std :: reference_wrapper como se muestra en ejemplos/09-instances.cpp.
Esta estrategia es útil si tiene que administrar varias instancias de OpenAI-CPP con diferentes claves secretas.
Nota: Si está utilizando WSL, entonces no le preocupa lo siguiente.
Según la instalación de Curl en Windows,
Windows 10 viene con la herramienta Curl incluida con el sistema operativo desde la versión 1804
Sin embargo, aún puede tener dificultades para manejar libcurl donde los lanzamientos de CMake Could NOT find CURL (missing: CURL_LIBRARY CURL_INCLUDE_DIR) .
Puede intentar seguir una de las 2 formas propuestas por el curl de la instalación curl en Windows.
Otra forma de resolver esto es obtener la versión CURL para Windows aquí, copiar el contenido de include en las carpetas apropiadas disponibles visibles en su ruta (por ejemplo, si está en su instalación Git [...]/Git/mingw64/include/ ). También debe obtener los archivos curl.lib y libcurl.dll desde aquí y copiarlos en las carpetas apropiadas (por ejemplo, si está en su instalación GIT [...]/Git/mingw64/lib/ ).
mkdir build && cd build
cmake .. -DCMAKE_GENERATOR_PLATFORM=x64
cmake --build .
cmake --build . --target 00-showcase # For a specific targetO si prefiere usar GNU GCC en Windows
cmake -G " MSYS Makefiles " -D CMAKE_CXX_COMPILER=g++ ..
makeMIT
Este trabajo se ha inspirado principalmente en Slacking y el código de envoltura curl de RCP.
Olrea