[C++] 362 ChatAIアプリの製作 その43 Claude3 APIへの対応 旧ChatGPTアプリ

[Mac M2 Pro 12CPU, Sonoma 14.3.1, clang++ 15.0.0]
対応LLM:gpt-4, gpt-4-vision, claude-3

ネット観察しているとClaude3 Opusの評判がやたらいいので、ChatGPTアプリに導入しました。今日からChatAIアプリに改名します。

GPT-4と同様にlibcurlライブラリを使って通信します。認証(Authorization)のところで少し手間取りました。

これからじっくり比較評価していきます。

    string url;
    if (model.find("gpt") != string::npos){
        url = "https://api.openai.com/v1/chat/completions";
    }else{
        url = "https://api.anthropic.com/v1/messages";
    }

    const char* apiKey;
    const char* apiKey2;
    apiKey = getenv("CHATGPT_API_KEY");
    apiKey2 = getenv("CLAUDE_API_KEY");

    // appファイルは環境変数を取得できないため直打ち
    if (apiKey == NULL) {
        apiKey = "xxx";
    }

    if (apiKey2 == NULL) {
        apiKey2 = "xxx";
    }

    string authHeader;
    if (model.find("gpt") != string::npos){
        authHeader = "Authorization: Bearer " + string(apiKey);
    } else {
        authHeader = "x-api-key: " + string(apiKey2);
    }
    
    curl_slist* headers = {};
    headers = curl_slist_append(headers, authHeader.c_str());
    headers = curl_slist_append(headers, "Content-Type: application/json");
    if (model.find("claude") != string::npos){
        headers = curl_slist_append(headers, "anthropic-version: 2023-06-01");
    }