openai的C++库,

先给出github的C++的openai开源网址:https://github.com/D7EAD/liboai

 一、介绍

liboai 是一个简单的非官方 C++17 库,用于 OpenAI API。它允许开发人员通过一组简单的方法和类访问 OpenAI 端点。该库最有效地被认为是 OpenAI Python 库的精神移植,简称 openai ,由于其类似的结构 - 除了少数例外。

涉及的内容还挺多,

二、用法

查看下面的内容,了解在使用DALL-E生成图像时,  liboai 和其Python替代方案在风格上有多相似。

 Python中的DALL-E生成。
import openai
import os

openai.api_key = os.getenv("OPENAI_API_KEY")
response = openai.Image.create(
    prompt="A snake in the grass!",
    n=1,
    size="256x256"
)
print(response["data"][0]["url"])
DALL-E的C++生成。 
#include "liboai.h"

using namespace liboai;

int main() {
  OpenAI oai;
  oai.auth.SetKeyEnv("OPENAI_API_KEY");
	
  Response res = oai.Image->create(
    "A snake in the grass!",
    1,
    "256x256"
  );

  std::cout << res["data"][0]["url"] << std::endl;
}

运行以上代码将打印出生成图像的 URL,该图像可能与下面找到的图像相似,也可能不相似。


请记住,上述的C++示例是一个最小的示例,不是一个安全的异常代码片段。请查看文档以获取更详细和安全的异常代码片段。

三、依赖部分

为了使库按照其所做的方式工作,它依赖于两个主要的依赖项。这些依赖项可以在下面列出。

如果使用提供的解决方案构建库,则建议使用vcpkg安装这些依赖项。

四、文档

为了理解如何使用库的每个组件,最好先了解整个库的基本结构。在项目中使用 liboai 时,应该只包含一个头文件 liboai.h 。该头文件提供了与库的所有其他组件的接口,例如 Images , Completions 等。

CorrectIncorrect
#include "liboai.h"

int main() {
  ...
}
#include "fine_tunes.h"
#include "models.h"
// etc...

int main() {
  ...
}

 一旦我们已经正确地包含了必要的头文件以使用库——并且假设符号已经正确链接——我们可以利用 liboai.h 中的类来开始使用。在我们的源代码中的某个时刻,我们将不得不选择何时定义一个 liboai::OpenAI 对象来访问组件接口。存储在此对象中的每个组件接口都提供与其关联的方法,因此,例如,接口 Image 将具有一个方法 create(...) 以从文本生成图像。每个非异步方法都返回一个包含响应信息的 liboai::Response ,而异步方法则返回一个 liboai::FutureResponse 。但是,在我们开始使用这些方法之前,我们必须首先设置我们的授权信息——否则它将无法工作!

liboai::OpenAI 还包含另一个重要成员,授权成员,用于在调用 API 方法之前设置授权信息(例如 API 密钥和组织 ID)。有关在 liboai::Authorization 中找到的其他成员的更多信息,请参阅github的 authorization 文件夹。

CorrectIncorrect
#include "liboai.h"

using namespace liboai;

int main() {
  OpenAI oai;
  
  // Set our API key using an environment variable.
  // This is recommended as hard-coding API keys is
  // insecure.
  if (oai.auth.SetKeyEnv("OPENAI_API_KEY")) {
    Response response = oai.Image->create(
      "a siamese cat!"
    );
  }
  
  ...
}
#include "liboai.h"

using namespace liboai;

int main() {
  OpenAI oai;
	
  // Failure to set authorization info!
  // Will fail, exception will be thrown!
  Response response = oai.Image->create(
    "a siamese cat!"
  );
  
  ...
}
Correct, exception-safe ❗ 🔄
#include "liboai.h"

using namespace liboai;

int main() {
  OpenAI oai;
  if (oai.auth.SetKeyEnv("OPENAI_API_KEY")) {
    try {
      Response response = oai.Image->create(
        "a siamese cat!"
      );
    }
    catch (std::exception& e) {
      std::cout << e.what() << std::endl;
    }
    
    ...
  }
}

 

现在,一旦我们使用组件接口进行了调用,我们肯定希望从中获取信息。为了做到这一点,利用我们对API响应格式的了解,我们可以使用JSON索引在 liboai::Response 对象上提取信息,例如生成的图像的URL。请参见下面的示例,其中我们打印生成的图像的URL。

Accessing JSON Response Data 访问JSON响应数据
#include "liboai.h"

using namespace liboai;

int main() {
  OpenAI oai;
  if (oai.auth.SetKeyEnv("OPENAI_API_KEY")) {
    try {
      Response response = oai.Image->create(
        "a siamese cat!"
      );
      std::cout << response["data"][0]["url"].get<std::string>() << std::endl;
    }
    catch (std::exception& e) {
      std::cout << e.what() << std::endl;
    }
  }
}

 

如果我们想做的不仅仅是打印图像的URL,而是在完成时立即下载它怎么办?幸运的是, liboai 有一个方便的函数 Network::Download(...) (和 Network::DownloadAsync(...) )可以实现这一点。请参见下面的示例,了解如何下载新生成的图像。

Downloading a Generated Image 下载生成的图像。
#include "liboai.h"

using namespace liboai;

int main() {
  OpenAI oai;
  if (oai.auth.SetKeyEnv("OPENAI_API_KEY")) {
    try {
      Response response = oai.Image->create(
        "a siamese cat!"
      );
      Network::Download(
        "C:/some/folder/file.png",                    // to
        response["data"][0]["url"].get<std::string>() // from
      );
    }
    catch (std::exception& e) {
      std::cout << e.what() << std::endl;
    }
  }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值