65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIconstarIcon

5.00/5 (16投票s)

2023年3月2日

CPOL
viewsIcon

25260

快速生成文本和图像

引言

OpenAI 于 2023 年 3 月发布了其 REST API。我准备在我的视频编辑器中使用它进行文本、图像生成等等!

背景

生成文本

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日 - 首次发布
© . All rights reserved.