A Biblioteca Openai-C ++ é uma biblioteca mantida na comunidade que fornece acesso conveniente à API OpenAI a partir de aplicativos escritos na linguagem C ++.
A biblioteca é pequena com dois arquivos de cabeçalho (apenas um se você já usa o Nlohmann JSON).
Nenhum requisito especial. Você já deveria ter
A biblioteca deve implementar todas as solicitações nas referências do OpenAI. Se houver algum (devido a uma atualização), fique à vontade para abrir um problema.
| Referência da API | Método | Arquivo de exemplo |
|---|---|---|
| Modelos de API | Modelos de lista ✅ | 1-model.cpp |
| Modelos de API | Recuperar o modelo ✅ | 1-model.cpp |
| Conclusões da API | Crie conclusão ✅ | 2-cleliction.cpp |
| Edições da API | Criar conclusão | 3-Edit.cpp |
| Imagens da API | Crie imagem ✅ | 4-image.cpp |
| Imagens da API | Crie a imagem Editar ✅ | 4-image.cpp |
| Imagens da API | Crie variação de imagem ✅ | 4-image.cpp |
| Incorporação de API | Crie incorporação ✅ | 5-Embetbedding.cpp |
| Arquivos API | Arquivo de lista ✅ | 6-File.cpp |
| Arquivos API | Faça o upload do arquivo ✅ | 6-File.cpp |
| Arquivos API | Excluir arquivo ✅ | 6-File.cpp |
| Arquivos API | Recuperar o arquivo ✅ | 6-File.cpp |
| Arquivos API | Recuperar o conteúdo do arquivo ✅ | 6-File.cpp |
| API Fine-tunes | Crie tune fino ✅ | 7-fine-tune.cpp |
| API Fine-tunes | Liste tune fine ✅ | 7-fine-tune.cpp |
| API Fine-tunes | Recuperar tune fino ✅ | 7-fine-tune.cpp |
| API Fine-tunes | Cancelar tune fine ✅ | 7-fine-tune.cpp |
| API Fine-tunes | Liste eventos de ajuste fino ✅ | 7-fine-tune.cpp |
| API Fine-tunes | Excluir modelo de tune fine ✅ | 7-fine-tune.cpp |
| Chat da API | Crie conclusão de bate -papo ✅ | 10-chat.cpp |
| API Audio | Crie transcrição ✅ | 11-audio.cpp |
| API Audio | Crie tradução ✅ | 11-audio.cpp |
| Moderação da API | Crie moderação ✅ | 12-modeation.cpp |
A biblioteca consiste em dois arquivos: incluir/openi/Openai.hpp e incluir/openai/nlohmann/json.hpp.
Basta copiar a pasta Incluir/OpenAicpp em seu projeto e você pode usar #include "openai.hpp" no seu código. Isso é tudo.
NOTA: O Openai-CPP usa o Nlohmann JSON, que está disponível para
include/json.hpp. Sinta -se à vontade para usar sua própria cópia para obter um tempo de compilação mais rápido.
A biblioteca precisa ser configurada com a chave secreta da sua conta, disponível no site. Recomenda -se definir sua variável de ambiente OPENAI_API_KEY antes de usar a biblioteca (ou você também pode definir a chave da API diretamente no código):
export OPENAI_API_KEY= ' sk-... 'O código a seguir está disponível nos exemplos/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 ' ;
}A saída recebida 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 " 
Como Openai::Json é um typedef de um nlohmann :: json, você recebe todos os recursos fornecidos pelo último (conversões, STL como acesso, ...).
mkdir build && cd build
cmake .. && make
examples/[whatever] No seu projeto, se você deseja obter uma saída detalhada, como na execução dos exemplos, poderá definir #define OPENAI_VERBOSE_OUTPUT .
Por padrão, o OpenAI-CPP lançará uma exceção de erro de tempo de execução se a solicitação de CURL não tiver sucesso. Você é livre para lidar com essas exceções da maneira que você gosta. Você pode impedir que as exceções de arremesso definindo setThrowException(false) (consulte o exemplo nos exemplos/09-instances.cpp). Se você fizer isso, um aviso será exibido.
Você pode usar os métodos openai::post() ou openai::get() para controlar completamente o que está enviando (por exemplo, pode ser útil quando um novo método da API OpenAI estiver disponível e ainda não fornecido pelo OpenAI-CPP ).
Aqui estão duas abordagens para manter vivo a sessão OpenAI-CPP em seu programa, para que você possa usá-lo a qualquer momento, em qualquer lugar.
Este é o comportamento padrão. OpenAI-CPP fornece funções convenientes gratuitas: openai::start(const std::string& token) e openai::instance() . Inicialize e configure a instância do OpenAI-CPP com:
auto & openai = openai::start(); Quando você está em outro escopo e perdeu a referência openai , pode agarrá -lo novamente com:
auto & openai = openai::instance();Pode não ser da maneira recomendada, mas como geralmente queremos lidar com apenas uma instância do Openai (um token), essa abordagem é altamente conveniente.
Uma outra abordagem é passar na instância do OpenAI por referência, armazená -la e chamar os métodos apropriados quando necessário.
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);
}Você pode usar um std :: reference_wrapper, conforme mostrado em exemplos/09-instances.cpp.
Essa estratégia é útil se você precisar gerenciar várias instâncias do OpenAI-CPP com diferentes teclas secretas.
Nota: Se você estiver usando o WSL, não está preocupado com o seguinte.
De acordo com a instalação do CURL no Windows,
O Windows 10 vem com a ferramenta Curl, empacotada com o sistema operacional desde a versão 1804
No entanto, você ainda pode ter dificuldades em lidar com Libcurl, onde os arremessos de cmake Could NOT find CURL (missing: CURL_LIBRARY CURL_INCLUDE_DIR) .
Você pode tentar seguir uma das duas maneiras propostas pelo Curl Install Curl no Windows.
Outra maneira de resolver isso é pegar a versão Curl para o Windows aqui, copie o conteúdo de include nas pastas apropriadas disponíveis visíveis no seu caminho (por exemplo, se na instalação do Git [...]/Git/mingw64/include/ ). Você também precisa pegar os arquivos curl.lib e libcurl.dll daqui e copiá -los nas pastas apropriadas (por exemplo, se na sua instalação Git [...]/Git/mingw64/lib/ ).
mkdir build && cd build
cmake .. -DCMAKE_GENERATOR_PLATFORM=x64
cmake --build .
cmake --build . --target 00-showcase # For a specific targetOu se você preferir usar o GNU GCC no Windows
cmake -G " MSYS Makefiles " -D CMAKE_CXX_COMPILER=g++ ..
makeMit
Este trabalho foi inspirado principalmente pela folga e pelo código do Wrapper da RCP.
Olrea