Google Sheets ChatGPT, GPT-4, Claude Sonnet в таблицах Google


17 июля 2024 г.

Как использовать ChatGPT в таблицах Google Sheets – самая простая инструкция


Вариант 1: Функция для таблицы


Важно: при таком варианте каждый раз при загрузке таблицы ячейки будут пересчитываться – а значит, будет вызываться платное API.
Этот вариант рекомендуется для тестирования, а для практики лучше взять Вариант 2.

Инструкция по интеграции:

1. Заходим в Apps Script – нам нужно создать специальную функцию для вызова ChatGPT



2. Вводим функцию (текст ниже скриншота). Заменяем API ключ на свой, модель на свою (необязательно), сохраняем.



Текст функции

/**
* Return a ChatGPT response from VseGPT a given prompt
* @constructor
* @param {string} prompt - the request prompt to be processed by ChatGPT
* @param {number} temperature [OPTIONAL] - How random the responses will be from 0 to 2 - Default is 0.7
* @param {integer} maxLeght [OPTIONAL] - The maximum number of tokens used to generate a response - Default is 256
* @param {number} topP [OPTIONAL] - Get the top X% of the sampling pool from 0 to 1 - Default is 1
* @param {number} frequencyPenalty [OPTIONAL] - Positive values make it less likely to repeat the same lines verbatim, from -2 to 2 - Default is 0
* @param {number} presencePenalty [OPTIONAL] - Positive values make it more likely to talk about new topics, from -2 to 2 - Default is 0
* @customfunction
*/
function chatGPT( prompt = "Hello!", temperature = 0.7, maxLeght = 256, topP = 1, frequencyPenalty = 0, presencePenalty = 0) {
 //use your API Key here
 const apiKey = 'your api key;
 //change the API URL here if you want to use a different API
 const url = 'https://api.vsegpt.ru/v1/chat/completions';
 //change the model here
 const model = 'gpt-3.5-turbo';

 //request along with the parameters
 const request = {
   model: model,
   messages: [{"role": "user", "content": prompt}],
   temperature: temperature,
   top_p: topP,
   max_tokens: maxLeght,
   frequency_penalty: frequencyPenalty,
   presence_penalty: presencePenalty
 };

 //headers
 const data = {
   contentType: "application/json",
   headers: { Authorization: "Bearer "+ apiKey, 'X-Title': "Google Sheets function" },
   payload: JSON.stringify(request),
 };

 //connect to the OpenAI API, sending the headers and parse the JSON response
 const response = JSON.parse(UrlFetchApp.fetch(url, data).getContentText());

 //add the response message to the return array
 return response.choices[0].message.content;
 
}


3. Вызываем функцию в Google Sheets. Все работает!


Вариант 2: Кнопка для разового вычисления текста по нажатию (рекомендуется)


Этот вариант рекомендуется, т.к. в нем обращения к платному API идет один раз.
Но его рекомендуется адаптировать под ваши нужды.

1. Сделайте все, указанное в Варианте 1 – в частности, добавьте функцию chatGPT

2. Добавьте также этот скрипт, новую функцию buttonGPT

function buttonGPT() {
  // Select a file
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  // Selecting each of the sheets in a variable
  const raw = ss.getSheetByName('List1');
 
  // Получаем последнюю строку
  const lastRow = raw.getLastRow();

  // Получаем промт - первая ячейка в последней строке
  const prompt = raw.getRange(lastRow, 1).getValue(); 

  // Получаем результат запроса
  var contents = chatGPT(prompt);

  // Добавляем во вторую колонку результат запроса
  raw.getRange(lastRow, 2).setValue(contents); 
}


3. Переименуйте лист в “List1” (по этому имени будет обращение к листу) и запустите функцию buttonGPT.
Или: нарисуйте кнопку (Вставка / Рисунок) и добавьте к ней вызов функции buttonGPT.

При вызове функции будет несколько окон, запрашивающих разрешение на выполнение скрипта.
Разрешите выполнение.



Готово!

Вариант 3: Кнопка для массовой обработки строк по нажатию (рекомендуется)


Этот вариант рекомендуется, т.к. в нем обращения к платному API идет один раз на строку.
Но его рекомендуется адаптировать под ваши нужды.

1. Сделайте все, указанное в Варианте 1 – в частности, добавьте функцию chatGPT

2. Добавьте также этот скрипт, новую функцию massProcessGPT

function massProcessGPT() {
  // Select a file
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  // Selecting sheet
  const raw = ss.getSheetByName('List1');
 
  // Get last row
  const lastRow = raw.getLastRow();

  // Process each row
  for (let row = 1; row <= lastRow; row++) {
    // Get prompt from first column
    const prompt = raw.getRange(row, 1).getValue();
    
    // Get current result from second column
    const currentResult = raw.getRange(row, 2).getValue();

    // Skip if already processed (not empty and not "...")
    if (currentResult !== "" && currentResult !== "...") {
      continue;
    }

    // Set "..." as processing indicator
    raw.getRange(row, 2).setValue("...");
    
    // Get response from ChatGPT
    const contents = chatGPT(prompt);

    // Set result
    raw.getRange(row, 2).setValue(contents);

    // Delay 1000ms between requests
    Utilities.sleep(1000);
  }
}


3. Переименуйте лист в “List1” (по этому имени будет обращение к листу) и запустите функцию massProcessGPT.
Или: нарисуйте кнопку (Вставка / Рисунок) и добавьте к ней вызов функции massProcessGPT.

При вызове функции будет несколько окон, запрашивающих разрешение на выполнение скрипта.
Разрешите выполнение.



Готово!

Дополнительная информация


Если вы получаете ошибку 429 – «слишком частые запросы к API» – вы можете добавить функцию, которая добавит задержку между вызовами API.

Utilities.sleep(1000)

https://stackoverflow.com/questions/11142109/how-to-use-utilities-sleep-function