Gemini API на С++
Добавлено: 02 сен 2026, 06:28
Подключить Gemini API на С++ можно с помощью сетевой библиотеки libcurl (для HTTP-запросов) и библиотеки nlohmann-json (для работы с JSON).
Установка зависимостей в Debian 11
Откройте терминал и установите необходимые пакеты:
Код программы (gemini.cpp)
Компиляция и запуск
Скомпилируйте программу с помощью g++:
Установите ваш API-ключ Gemini и запустите бинарный файл:
Установка зависимостей в Debian 11
Откройте терминал и установите необходимые пакеты:
Код: Выделить всё
sudo apt update
sudo apt install build-essential libcurl4-openssl-dev nlohmann-json3-dev
Код: Выделить всё
#include <iostream>
#include <string>
#include <curl/curl.h>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
// Вспомогательная функция для записи ответа от сервера
size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
size_t totalSize = size * nmemb;
output->append((char*)contents, totalSize);
return totalSize;
}
int main() {
// 1. Получение API-ключа из переменной окружения
const char* apiKeyEnv = std::getenv("GEMINI_API_KEY");
if (!apiKeyEnv) {
std::cerr << "Ошибка: Переменная окружения GEMINI_API_KEY не установлена!" << std::endl;
return 1;
}
std::string apiKey = apiKeyEnv;
// 2. Формирование URL и тела JSON-запроса
std::string url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=" + apiKey;
json requestData = {
{"contents", json::array({
{
{"parts", json::array({
{{"text", "Напиши одно короткое приветствие на русском языке."}}
})}
}
})}
};
std::string jsonPayload = requestData.dump();
std::string responseString;
// 3. Инициализация и настройка cURL
CURL* curl = curl_easy_init();
if (curl) {
struct curl_slist* headers = NULL;
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonPayload.c_str());
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &responseString);
// Выполнение запроса
CURLcode res = curl_easy_perform(curl);
if (res != CURLE_OK) {
std::cerr << "Ошибка cURL: " << curl_easy_strerror(res) << std::endl;
} else {
// 4. Парсинг ответа
try {
json responseJson = json::parse(responseString);
if (responseJson.contains("candidates") && !responseJson["candidates"].empty()) {
std::string text = responseJson["candidates"][0]["content"]["parts"][0]["text"];
std::cout << "Ответ Gemini:\n" << text << std::endl;
} else {
std::cout << "Ошибка или пустой ответ:\n" << responseJson.dump(4) << std::endl;
}
} catch (const std::exception& e) {
std::cerr << "Ошибка парсинга JSON: " << e.what() << std::endl;
std::cout << "Сырой ответ: " << responseString << std::endl;
}
}
// Очистка ресурсов
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
return 0;
}
Скомпилируйте программу с помощью g++:
Код: Выделить всё
g++ gemini.cpp -o gemini -lcurl
Код: Выделить всё
export GEMINI_API_KEY="ВАШ_НАСТОЯЩИЙ_API_КЛЮЧ"
./gemini