Windows 的 ChatGPT-API:在您的 Windows 应用程序中使用 ChatGPT





5.00/5 (16投票s)
快速生成文本和图像
引言
OpenAI 于 2023 年 3 月发布了其 REST API。我准备在我的视频编辑器中使用它进行文本、图像生成等等!
背景
- 在 OpenAI 注册一个帐户。
- 在 https://platform.openai.com/account/api-keys 创建 API 密钥。使用不是免费的,但是有一些免费的优惠(例如 beta codex 模型)可供使用。
- 阅读并决定使用哪些模型 https://platform.openai.com/docs/models/overview。
- 在您的 Win32 代码中包含 chatgpt.hpp。
生成文本
CHATGPT_API c("your_api_key");
c.SetModel("code-davinci-002"); // optional
auto off = c.Text("What is your name?");
auto& r = off.value();
std::cout << r.t << std::endl;
它返回一个 std::optional<CHATGPT_RESULT> ,其中包含来自模型的响应。
有一个 temperature 参数可用于决定响应的随机性(越低 - 越不随机)。您还可以设置一个 code 模型(目前免费)来测试代码生成。
生成图像
CHATGPT_API c("your_api_key");
auto off = c.Image("Red cat");
auto& r = off.value();
std::cout << r.t << std::endl;
它返回一个 std::optional<CHATGPT_RESULT> ,其中包含红色猫的 PNG 图像的原始数据。
该库依赖于我的 REST API (包含在存储库中),并通过 JSON 与 ChatGPT 端点进行通信。例如,成员 Text() 的实现方式如下
  std::optional<CHATGPT_RESULT> Text(const char* prompt, 
                int Temperature = 0, int max_tokens = 10)
    {
        std::vector<char> data(10000);
        sprintf_s(data.data(), 10000, R"({
"model": "%s",
"prompt" : "%s",
"temperature" : %i,
"max_tokens" : %i,
"top_p" : 1,
"frequency_penalty" : 0.2,
"presence_penalty" : 0
})", model.c_str(), prompt, Temperature, max_tokens);
        data.resize(strlen(data.data()));
        RESTAPI::REST r;
        r.Connect(L"api.openai.com", true, 0, 0, 0, 0);
        std::initializer_list<std::wstring> hdrs = {
            Bearer(),
            L"Content-Type: application/json",
        };
        auto hi = r.RequestWithBuffer(L"/v1/completions", 
                  L"POST", hdrs, data.data(), data.size());
        std::vector<char> out;
        r.ReadToMemory(hi, out);
        out.resize(out.size() + 1);
        try
        {
            jsonxx::Object o;
            o.parse(out.data());
            CHATGPT_RESULT r;
            r.o = o;
            auto& choices = o.get<jsonxx::Array>("choices");
            auto& choice0 = choices.get<jsonxx::Object>(0);
            r.t = choice0.get<jsonxx::String>("text");
            return r;
        }
        catch (...)
        {
        }
        return {};
    }
关注点
现在,我正忙于在我的 Turbo Play 中实现这些很棒的功能,所以我会不断地实现新的东西!
历史
- 2023年3月2日 - 首次发布

